lf-pagebuilder-vue 0.0.97 → 0.0.99
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.
|
@@ -27,9 +27,9 @@ var LfPagebuilder=(function(za){"use strict";var ofe=Object.defineProperty;var r
|
|
|
27
27
|
* @vue/runtime-dom v3.5.28
|
|
28
28
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
29
29
|
* @license MIT
|
|
30
|
-
**/let W6;const zk=typeof window<"u"&&window.trustedTypes;if(zk)try{W6=zk.createPolicy("vue",{createHTML:t=>t})}catch{}const Vk=W6?t=>W6.createHTML(t):t=>t,MH="http://www.w3.org/2000/svg",$H="http://www.w3.org/1998/Math/MathML",xs=typeof document<"u"?document:null,Zk=xs&&xs.createElement("template"),Bk={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,o)=>{const r=e==="svg"?xs.createElementNS(MH,t):e==="mathml"?xs.createElementNS($H,t):n?xs.createElement(t,{is:n}):xs.createElement(t);return t==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:t=>xs.createTextNode(t),createComment:t=>xs.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>xs.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,o,r,a){const i=n?n.previousSibling:e.lastChild;if(r&&(r===a||r.nextSibling))for(;e.insertBefore(r.cloneNode(!0),n),!(r===a||!(r=r.nextSibling)););else{Zk.innerHTML=Vk(o==="svg"?`<svg>${t}</svg>`:o==="mathml"?`<math>${t}</math>`:t);const l=Zk.content;if(o==="svg"||o==="mathml"){const s=l.firstChild;for(;s.firstChild;)l.appendChild(s.firstChild);l.removeChild(s)}e.insertBefore(l,n)}return[i?i.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}},T0="transition",tm="animation",_d=Symbol("_vtc"),Fk={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Hk=O0({},f6,Fk),LH=(t=>(t.displayName="Transition",t.props=Hk,t))((t,{slots:e})=>_3(AS,Xk(t),e)),i1=(t,e=[])=>{q2(t)?t.forEach(n=>n(...e)):t&&t(...e)},Uk=t=>t?q2(t)?t.some(e=>e.length>1):t.length>1:!1;function Xk(t){const e={};for(const U in t)U in Fk||(e[U]=t[U]);if(t.css===!1)return e;const{name:n="v",type:o,duration:r,enterFromClass:a=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=a,appearActiveClass:u=i,appearToClass:p=l,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=t,C=AH(r),k=C&&C[0],M=C&&C[1],{onBeforeEnter:L,onEnter:P,onEnterCancelled:w,onLeave:A,onLeaveCancelled:N,onBeforeAppear:F=L,onAppear:Z=P,onAppearCancelled:K=w}=e,X=(U,te,de,Ve)=>{U._enterCancelled=Ve,E0(U,te?p:l),E0(U,te?u:i),de&&de()},ne=(U,te)=>{U._isLeaving=!1,E0(U,m),E0(U,v),E0(U,b),te&&te()},Y=U=>(te,de)=>{const Ve=U?Z:P,ge=()=>X(te,U,de);i1(Ve,[te,ge]),Wk(()=>{E0(te,U?s:a),$l(te,U?p:l),Uk(Ve)||qk(te,o,k,ge)})};return O0(e,{onBeforeEnter(U){i1(L,[U]),$l(U,a),$l(U,i)},onBeforeAppear(U){i1(F,[U]),$l(U,s),$l(U,u)},onEnter:Y(!1),onAppear:Y(!0),onLeave(U,te){U._isLeaving=!0;const de=()=>ne(U,te);$l(U,m),U._enterCancelled?($l(U,b),G6(U)):(G6(U),$l(U,b)),Wk(()=>{U._isLeaving&&(E0(U,m),$l(U,v),Uk(A)||qk(U,o,M,de))}),i1(A,[U,de])},onEnterCancelled(U){X(U,!1,void 0,!0),i1(w,[U])},onAppearCancelled(U){X(U,!0,void 0,!0),i1(K,[U])},onLeaveCancelled(U){ne(U),i1(N,[U])}})}function AH(t){if(t==null)return null;if(B6(t))return[q6(t.enter),q6(t.leave)];{const e=q6(t);return[e,e]}}function q6(t){return X6(t)}function $l(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t[_d]||(t[_d]=new Set)).add(e)}function E0(t,e){e.split(/\s+/).forEach(o=>o&&t.classList.remove(o));const n=t[_d];n&&(n.delete(e),n.size||(t[_d]=void 0))}function Wk(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let PH=0;function qk(t,e,n,o){const r=t._endId=++PH,a=()=>{r===t._endId&&o()};if(n!=null)return setTimeout(a,n);const{type:i,timeout:l,propCount:s}=Gk(t,e);if(!i)return o();const u=i+"end";let p=0;const m=()=>{t.removeEventListener(u,b),a()},b=v=>{v.target===t&&++p>=s&&m()};setTimeout(()=>{p<s&&m()},l+1),t.addEventListener(u,b)}function Gk(t,e){const n=window.getComputedStyle(t),o=C=>(n[C]||"").split(", "),r=o(`${T0}Delay`),a=o(`${T0}Duration`),i=Yk(r,a),l=o(`${tm}Delay`),s=o(`${tm}Duration`),u=Yk(l,s);let p=null,m=0,b=0;e===T0?i>0&&(p=T0,m=i,b=a.length):e===tm?u>0&&(p=tm,m=u,b=s.length):(m=Math.max(i,u),p=m>0?i>u?T0:tm:null,b=p?p===T0?a.length:s.length:0);const v=p===T0&&/\b(?:transform|all)(?:,|$)/.test(o(`${T0}Property`).toString());return{type:p,timeout:m,propCount:b,hasTransform:v}}function Yk(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max(...e.map((n,o)=>Kk(n)+Kk(t[o])))}function Kk(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function G6(t){return(t?t.ownerDocument:document).body.offsetHeight}function NH(t,e,n){const o=t[_d];o&&(e=(e?[e,...o]:[...o]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}const R3=Symbol("_vod"),Jk=Symbol("_vsh"),nm={name:"show",beforeMount(t,{value:e},{transition:n}){t[R3]=t.style.display==="none"?"":t.style.display,n&&e?n.beforeEnter(t):om(t,e)},mounted(t,{value:e},{transition:n}){n&&e&&n.enter(t)},updated(t,{value:e,oldValue:n},{transition:o}){!e!=!n&&(o?e?(o.beforeEnter(t),om(t,!0),o.enter(t)):o.leave(t,()=>{om(t,!1)}):om(t,e))},beforeUnmount(t,{value:e}){om(t,e)}};function om(t,e){t.style.display=e?t[R3]:"none",t[Jk]=!e}function _H(){nm.getSSRProps=({value:t})=>{if(!t)return{style:{display:"none"}}}}const eT=Symbol("");function jH(t){const e=$2();if(!e)return;const n=e.ut=(r=t(e.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${e.uid}"]`)).forEach(a=>Q3(a,r))},o=()=>{const r=t(e.proxy);e.ce?Q3(e.ce,r):Y6(e.subTree,r),n(r)};y6(()=>{Ip(o)}),Ci(()=>{vi(o,fH,{flush:"post"});const r=new MutationObserver(o);r.observe(e.subTree.el.parentNode,{childList:!0}),Ld(()=>r.disconnect())})}function Y6(t,e){if(t.shapeFlag&128){const n=t.suspense;t=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Y6(n.activeBranch,e)})}for(;t.component;)t=t.component.subTree;if(t.shapeFlag&1&&t.el)Q3(t.el,e);else if(t.type===dn)t.children.forEach(n=>Y6(n,e));else if(t.type===o1){let{el:n,anchor:o}=t;for(;n&&(Q3(n,e),n!==o);)n=n.nextSibling}}function Q3(t,e){if(t.nodeType===1){const n=t.style;let o="";for(const r in e){const a=EH(e[r]);n.setProperty(`--${r}`,a),o+=`--${r}: ${a};`}n[eT]=o}}const IH=/(?:^|;)\s*display\s*:/;function RH(t,e,n){const o=t.style,r=Nd(n);let a=!1;if(n&&!r){if(e)if(Nd(e))for(const i of e.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&D3(o,l,"")}else for(const i in e)n[i]==null&&D3(o,i,"");for(const i in n)i==="display"&&(a=!0),D3(o,i,n[i])}else if(r){if(e!==n){const i=o[eT];i&&(n+=";"+i),o.cssText=n,a=IH.test(n)}}else e&&t.removeAttribute("style");R3 in t&&(t[R3]=a?o.display:"",t[Jk]&&(o.display="none"))}const tT=/\s*!important$/;function D3(t,e,n){if(q2(n))n.forEach(o=>D3(t,e,o));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const o=QH(t,e);tT.test(n)?t.setProperty(S0(o),n.replace(tT,""),"important"):t[o]=n}}const nT=["Webkit","Moz","ms"],K6={};function QH(t,e){const n=K6[e];if(n)return n;let o=X2(e);if(o!=="filter"&&o in t)return K6[e]=o;o=OH(o);for(let r=0;r<nT.length;r++){const a=nT[r]+o;if(a in t)return K6[e]=a}return e}const oT="http://www.w3.org/1999/xlink";function rT(t,e,n,o,r,a=kH(e)){o&&e.startsWith("xlink:")?n==null?t.removeAttributeNS(oT,e.slice(6,e.length)):t.setAttributeNS(oT,e,n):n==null||a&&!Dk(n)?t.removeAttribute(e):t.setAttribute(e,a?"":Z6(n)?String(n):n)}function aT(t,e,n,o,r){if(e==="innerHTML"||e==="textContent"){n!=null&&(t[e]=e==="innerHTML"?Vk(n):n);return}const a=t.tagName;if(e==="value"&&a!=="PROGRESS"&&!a.includes("-")){const l=a==="OPTION"?t.getAttribute("value")||"":t.value,s=n==null?t.type==="checkbox"?"on":"":String(n);(l!==s||!("_value"in t))&&(t.value=s),n==null&&t.removeAttribute(e),t._value=n;return}let i=!1;if(n===""||n==null){const l=typeof t[e];l==="boolean"?n=Dk(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{t[e]=n}catch{}i&&t.removeAttribute(r||e)}function ws(t,e,n,o){t.addEventListener(e,n,o)}function DH(t,e,n,o){t.removeEventListener(e,n,o)}const iT=Symbol("_vei");function zH(t,e,n,o,r=null){const a=t[iT]||(t[iT]={}),i=a[e];if(o&&i)i.value=o;else{const[l,s]=VH(e);if(o){const u=a[e]=FH(o,r);ws(t,l,u,s)}else i&&(DH(t,l,i,s),a[e]=void 0)}}const lT=/(?:Once|Passive|Capture)$/;function VH(t){let e;if(lT.test(t)){e={};let o;for(;o=t.match(lT);)t=t.slice(0,t.length-o[0].length),e[o[0].toLowerCase()]=!0}return[t[2]===":"?t.slice(3):S0(t.slice(2)),e]}let J6=0;const ZH=Promise.resolve(),BH=()=>J6||(ZH.then(()=>J6=0),J6=Date.now());function FH(t,e){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;gi(HH(o,n.value),e,5,[o])};return n.value=t,n.attached=BH(),n}function HH(t,e){if(q2(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(o=>r=>!r._stopped&&o&&o(r))}else return e}const sT=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,cT=(t,e,n,o,r,a)=>{const i=r==="svg";e==="class"?NH(t,o,i):e==="style"?RH(t,n,o):bH(e)?gH(e)||zH(t,e,n,o,a):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):UH(t,e,o,i))?(aT(t,e,o),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&rT(t,e,o,i,a,e!=="value")):t._isVueCE&&(/[A-Z]/.test(e)||!Nd(o))?aT(t,j3(e),o,a,e):(e==="true-value"?t._trueValue=o:e==="false-value"&&(t._falseValue=o),rT(t,e,o,i))};function UH(t,e,n,o){if(o)return!!(e==="innerHTML"||e==="textContent"||e in t&&sT(e)&&Rk(n));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const r=t.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return sT(e)&&Nd(n)?!1:e in t}const dT={};function uT(t,e,n){let o=T2(t,e);Qk(o)&&(o=O0({},o,e));class r extends z3{constructor(i){super(o,i,n)}}return r.def=o,r}const XH=((t,e)=>uT(t,e,$T)),WH=typeof HTMLElement<"u"?HTMLElement:class{};class z3 extends WH{constructor(e,n={},o=lm){super(),this._def=e,this._props=n,this._createApp=o,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&o!==lm?this._root=this.shadowRoot:e.shadowRoot!==!1?(this.attachShadow(O0({},e.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let e=this;for(;e=e&&(e.parentNode||e.host);)if(e instanceof z3){this._parent=e;break}this._instance||(this._resolved?this._mount(this._def):e&&e._pendingResolve?this._pendingResolve=e._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(e=this._parent){e&&(this._instance.parent=e._instance,this._inheritParentContext(e))}_inheritParentContext(e=this._parent){e&&this._app&&Object.setPrototypeOf(this._app._context.provides,e._instance.provides)}disconnectedCallback(){this._connected=!1,Sd(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(e){for(const n of e)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let o=0;o<this.attributes.length;o++)this._setAttr(this.attributes[o].name);this._ob=new MutationObserver(this._processMutations.bind(this)),this._ob.observe(this,{attributes:!0});const e=(o,r=!1)=>{this._resolved=!0,this._pendingResolve=void 0;const{props:a,styles:i}=o;let l;if(a&&!q2(a))for(const s in a){const u=a[s];(u===Number||u&&u.type===Number)&&(s in this._props&&(this._props[s]=X6(this._props[s])),(l||(l=Object.create(null)))[j3(s)]=!0)}this._numberProps=l,this._resolveProps(o),this.shadowRoot&&this._applyStyles(i),this._mount(o)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(o=>{o.configureApp=this._def.configureApp,e(this._def=o,!0)}):e(this._def)}_mount(e){this._app=this._createApp(e),this._inheritParentContext(),e.configureApp&&e.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const o in n)yH(this,o)||Object.defineProperty(this,o,{get:()=>la(n[o])})}_resolveProps(e){const{props:n}=e,o=q2(n)?n:Object.keys(n||{});for(const r of Object.keys(this))r[0]!=="_"&&o.includes(r)&&this._setProp(r,this[r]);for(const r of o.map(j3))Object.defineProperty(this,r,{get(){return this._getProp(r)},set(a){this._setProp(r,a,!0,!this._patching)}})}_setAttr(e){if(e.startsWith("data-v-"))return;const n=this.hasAttribute(e);let o=n?this.getAttribute(e):dT;const r=j3(e);n&&this._numberProps&&this._numberProps[r]&&(o=X6(o)),this._setProp(r,o,!1,!0)}_getProp(e){return this._props[e]}_setProp(e,n,o=!0,r=!1){if(n!==this._props[e]&&(this._dirty=!0,n===dT?delete this._props[e]:(this._props[e]=n,e==="key"&&this._app&&(this._app._ceVNode.key=n)),r&&this._instance&&this._update(),o)){const a=this._ob;a&&(this._processMutations(a.takeRecords()),a.disconnect()),n===!0?this.setAttribute(S0(e),""):typeof n=="string"||typeof n=="number"?this.setAttribute(S0(e),n+""):n||this.removeAttribute(S0(e)),a&&a.observe(this,{attributes:!0})}}_update(){const e=this._createVNode();this._app&&(e.appContext=this._app._context),MT(e,this._root)}_createVNode(){const e={};this.shadowRoot||(e.onVnodeMounted=e.onVnodeUpdated=this._renderSlots.bind(this));const n=Kn(this._def,O0(e,this._props));return this._instance||(n.ce=o=>{this._instance=o,o.ce=this,o.isCE=!0;const r=(a,i)=>{this.dispatchEvent(new CustomEvent(a,Qk(i[0])?O0({detail:i},i[0]):{detail:i}))};o.emit=(a,...i)=>{r(a,i),S0(a)!==a&&r(S0(a),i)},this._setParent()}),n}_applyStyles(e,n){if(!e)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const o=this._nonce;for(let r=e.length-1;r>=0;r--){const a=document.createElement("style");o&&a.setAttribute("nonce",o),a.textContent=e[r],this.shadowRoot.prepend(a)}}_parseSlots(){const e=this._slots={};let n;for(;n=this.firstChild;){const o=n.nodeType===1&&n.getAttribute("slot")||"default";(e[o]||(e[o]=[])).push(n),this.removeChild(n)}}_renderSlots(){const e=this._getSlots(),n=this._instance.type.__scopeId;for(let o=0;o<e.length;o++){const r=e[o],a=r.getAttribute("name")||"default",i=this._slots[a],l=r.parentNode;if(i)for(const s of i){if(n&&s.nodeType===1){const u=n+"-s",p=document.createTreeWalker(s,1);s.setAttribute(u,"");let m;for(;m=p.nextNode();)m.setAttribute(u,"")}l.insertBefore(s,r)}else for(;r.firstChild;)l.insertBefore(r.firstChild,r);l.removeChild(r)}}_getSlots(){const e=[this];this._teleportTargets&&e.push(...this._teleportTargets);const n=new Set;for(const o of e){const r=o.querySelectorAll("slot");for(let a=0;a<r.length;a++)n.add(r[a])}return Array.from(n)}_injectChildStyle(e){this._applyStyles(e.styles,e)}_beginPatch(){this._patching=!0,this._dirty=!1}_endPatch(){this._patching=!1,this._dirty&&this._instance&&this._update()}_hasShadowRoot(){return this._def.shadowRoot!==!1}_removeChildStyle(e){}}function pT(t){const e=$2(),n=e&&e.ce;return n||null}function qH(){const t=pT();return t&&t.shadowRoot}function GH(t="$style"){{const e=$2();if(!e)return V6;const n=e.type.__cssModules;if(!n)return V6;const o=n[t];return o||V6}}const mT=new WeakMap,hT=new WeakMap,V3=Symbol("_moveCb"),fT=Symbol("_enterCb"),YH=(t=>(delete t.props.mode,t))({name:"TransitionGroup",props:O0({},Hk,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=$2(),o=h6();let r,a;return O3(()=>{if(!r.length)return;const i=t.moveClass||`${t.name||"v"}-move`;if(!tU(r[0].el,n.vnode.el,i)){r=[];return}r.forEach(KH),r.forEach(JH);const l=r.filter(eU);G6(n.vnode.el),l.forEach(s=>{const u=s.el,p=u.style;$l(u,i),p.transform=p.webkitTransform=p.transitionDuration="";const m=u[V3]=b=>{b&&b.target!==u||(!b||b.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",m),u[V3]=null,E0(u,i))};u.addEventListener("transitionend",m)}),r=[]}),()=>{const i=po(t),l=Xk(i);let s=i.tag||dn;if(r=[],a)for(let u=0;u<a.length;u++){const p=a[u];p.el&&p.el instanceof Element&&(r.push(p),bs(p,Td(p,l,o,n)),mT.set(p,bT(p.el)))}a=e.default?b3(e.default()):[];for(let u=0;u<a.length;u++){const p=a[u];p.key!=null&&bs(p,Td(p,l,o,n))}return Kn(s,null,a)}}});function KH(t){const e=t.el;e[V3]&&e[V3](),e[fT]&&e[fT]()}function JH(t){hT.set(t,bT(t.el))}function eU(t){const e=mT.get(t),n=hT.get(t),o=e.left-n.left,r=e.top-n.top;if(o||r){const a=t.el,i=a.style,l=a.getBoundingClientRect();let s=1,u=1;return a.offsetWidth&&(s=l.width/a.offsetWidth),a.offsetHeight&&(u=l.height/a.offsetHeight),(!Number.isFinite(s)||s===0)&&(s=1),(!Number.isFinite(u)||u===0)&&(u=1),Math.abs(s-1)<.01&&(s=1),Math.abs(u-1)<.01&&(u=1),i.transform=i.webkitTransform=`translate(${o/s}px,${r/u}px)`,i.transitionDuration="0s",t}}function bT(t){const e=t.getBoundingClientRect();return{left:e.left,top:e.top}}function tU(t,e,n){const o=t.cloneNode(),r=t[_d];r&&r.forEach(l=>{l.split(/\s+/).forEach(s=>s&&o.classList.remove(s))}),n.split(/\s+/).forEach(l=>l&&o.classList.add(l)),o.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(o);const{hasTransform:i}=Gk(o);return a.removeChild(o),i}const M0=t=>{const e=t.props["onUpdate:modelValue"]||!1;return q2(e)?n=>SH(e,n):e};function nU(t){t.target.composing=!0}function gT(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const xi=Symbol("_assign");function vT(t,e,n){return e&&(t=t.trim()),n&&(t=U6(t)),t}const d2={created(t,{modifiers:{lazy:e,trim:n,number:o}},r){t[xi]=M0(r);const a=o||r.props&&r.props.type==="number";ws(t,e?"change":"input",i=>{i.target.composing||t[xi](vT(t.value,n,a))}),(n||a)&&ws(t,"change",()=>{t.value=vT(t.value,n,a)}),e||(ws(t,"compositionstart",nU),ws(t,"compositionend",gT),ws(t,"change",gT))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,oldValue:n,modifiers:{lazy:o,trim:r,number:a}},i){if(t[xi]=M0(i),t.composing)return;const l=(a||t.type==="number")&&!/^0\d/.test(t.value)?U6(t.value):t.value,s=e??"";l!==s&&(document.activeElement===t&&t.type!=="range"&&(o&&e===n||r&&t.value.trim()===s)||(t.value=s))}},l1={deep:!0,created(t,e,n){t[xi]=M0(n),ws(t,"change",()=>{const o=t._modelValue,r=jd(t),a=t.checked,i=t[xi];if(q2(o)){const l=I3(o,r),s=l!==-1;if(a&&!s)i(o.concat(r));else if(!a&&s){const u=[...o];u.splice(l,1),i(u)}}else if(em(o)){const l=new Set(o);a?l.add(r):l.delete(r),i(l)}else i(xT(t,a))})},mounted:yT,beforeUpdate(t,e,n){t[xi]=M0(n),yT(t,e,n)}};function yT(t,{value:e,oldValue:n},o){t._modelValue=e;let r;if(q2(e))r=I3(e,o.props.value)>-1;else if(em(e))r=e.has(o.props.value);else{if(e===n)return;r=k0(e,xT(t,!0))}t.checked!==r&&(t.checked=r)}const rm={created(t,{value:e},n){t.checked=k0(e,n.props.value),t[xi]=M0(n),ws(t,"change",()=>{t[xi](jd(t))})},beforeUpdate(t,{value:e,oldValue:n},o){t[xi]=M0(o),e!==n&&(t.checked=k0(e,o.props.value))}},G2={deep:!0,created(t,{value:e,modifiers:{number:n}},o){const r=em(e);ws(t,"change",()=>{const a=Array.prototype.filter.call(t.options,i=>i.selected).map(i=>n?U6(jd(i)):jd(i));t[xi](t.multiple?r?new Set(a):a:a[0]),t._assigning=!0,Sd(()=>{t._assigning=!1})}),t[xi]=M0(o)},mounted(t,{value:e}){CT(t,e)},beforeUpdate(t,e,n){t[xi]=M0(n)},updated(t,{value:e}){t._assigning||CT(t,e)}};function CT(t,e){const n=t.multiple,o=q2(e);if(!(n&&!o&&!em(e))){for(let r=0,a=t.options.length;r<a;r++){const i=t.options[r],l=jd(i);if(n)if(o){const s=typeof l;s==="string"||s==="number"?i.selected=e.some(u=>String(u)===String(l)):i.selected=I3(e,l)>-1}else i.selected=e.has(l);else if(k0(jd(i),e)){t.selectedIndex!==r&&(t.selectedIndex=r);return}}!n&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function jd(t){return"_value"in t?t._value:t.value}function xT(t,e){const n=e?"_trueValue":"_falseValue";return n in t?t[n]:e}const wT={created(t,e,n){Z3(t,e,n,null,"created")},mounted(t,e,n){Z3(t,e,n,null,"mounted")},beforeUpdate(t,e,n,o){Z3(t,e,n,o,"beforeUpdate")},updated(t,e,n,o){Z3(t,e,n,o,"updated")}};function OT(t,e){switch(t){case"SELECT":return G2;case"TEXTAREA":return d2;default:switch(e){case"checkbox":return l1;case"radio":return rm;default:return d2}}}function Z3(t,e,n,o,r){const i=OT(t.tagName,n.props&&n.props.type)[r];i&&i(t,e,n,o)}function oU(){d2.getSSRProps=({value:t})=>({value:t}),rm.getSSRProps=({value:t},e)=>{if(e.props&&k0(e.props.value,t))return{checked:!0}},l1.getSSRProps=({value:t},e)=>{if(q2(t)){if(e.props&&I3(t,e.props.value)>-1)return{checked:!0}}else if(em(t)){if(e.props&&t.has(e.props.value))return{checked:!0}}else if(t)return{checked:!0}},wT.getSSRProps=(t,e)=>{if(typeof e.type!="string")return;const n=OT(e.type.toUpperCase(),e.props&&e.props.type);if(n.getSSRProps)return n.getSSRProps(t,e)}}const rU=["ctrl","shift","alt","meta"],aU={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>rU.some(n=>t[`${n}Key`]&&!e.includes(n))},am=(t,e)=>{if(!t)return t;const n=t._withMods||(t._withMods={}),o=e.join(".");return n[o]||(n[o]=((r,...a)=>{for(let i=0;i<e.length;i++){const l=aU[e[i]];if(l&&l(r,e))return}return t(r,...a)}))},iU={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},lU=(t,e)=>{const n=t._withKeys||(t._withKeys={}),o=e.join(".");return n[o]||(n[o]=(r=>{if(!("key"in r))return;const a=S0(r.key);if(e.some(i=>i===a||iU[i]===a))return t(r)}))},ST=O0({patchProp:cT},Bk);let im,kT=!1;function TT(){return im||(im=hk(ST))}function ET(){return im=kT?im:fk(ST),kT=!0,im}const MT=((...t)=>{TT().render(...t)}),sU=((...t)=>{ET().hydrate(...t)}),lm=((...t)=>{const e=TT().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=AT(o);if(!r)return;const a=e._component;!Rk(a)&&!a.render&&!a.template&&(a.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,LT(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},e}),$T=((...t)=>{const e=ET().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=AT(o);if(r)return n(r,!0,LT(r))},e});function LT(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function AT(t){return Nd(t)?document.querySelector(t):t}let PT=!1;const cU=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:AS,BaseTransitionPropsValidators:f6,Comment:Nr,DeprecationTypes:mH,EffectScope:q8,ErrorCodes:SB,ErrorTypeStrings:lH,Fragment:dn,KeepAlive:KB,ReactiveEffect:kp,Static:o1,Suspense:VF,Teleport:MS,Text:w0,TrackOpTypes:GZ,Transition:LH,TransitionGroup:YH,TriggerOpTypes:YZ,VueElement:z3,assertNumber:OB,callWithAsyncErrorHandling:gi,callWithErrorHandling:Jc,camelize:X2,capitalize:s3,cloneVNode:Ml,compatUtils:pH,computed:sa,createApp:lm,createBlock:El,createCommentVNode:ln,createElementBlock:we,createElementVNode:V,createHydrationRenderer:fk,createPropsRestProxy:vF,createRenderer:hk,createSSRApp:$T,createSlots:oF,createStaticVNode:Ek,createTextVNode:wo,createVNode:Kn,customRef:JO,defineAsyncComponent:YB,defineComponent:T2,defineCustomElement:uT,defineEmits:sF,defineExpose:cF,defineModel:pF,defineOptions:dF,defineProps:lF,defineSSRCustomElement:XH,defineSlots:uF,devtools:sH,effect:vZ,effectScope:fZ,getCurrentInstance:$2,getCurrentScope:PO,getCurrentWatcher:KZ,getTransitionRawChildren:b3,guardReactiveProps:Tk,h:_3,handleError:e1,hasInjectionContext:AB,hydrate:sU,hydrateOnIdle:HB,hydrateOnInteraction:qB,hydrateOnMediaQuery:WB,hydrateOnVisible:XB,initCustomFormatter:rH,initDirectivesForSSR:()=>{PT||(PT=!0,oU(),_H())},inject:zp,isMemoSame:_k,isProxy:Ap,isReactive:hs,isReadonly:wl,isRef:Lr,isRuntimeOnly:JF,isShallow:k2,isVNode:ys,markRaw:YO,mergeDefaults:bF,mergeModels:gF,mergeProps:I6,nextTick:Sd,nodeOps:Bk,normalizeClass:Fo,normalizeProps:fB,normalizeStyle:W2,onActivated:QS,onBeforeMount:VS,onBeforeUnmount:Up,onBeforeUpdate:y6,onDeactivated:DS,onErrorCaptured:HS,onMounted:Ci,onRenderTracked:FS,onRenderTriggered:BS,onScopeDispose:bZ,onServerPrefetch:ZS,onUnmounted:Ld,onUpdated:O3,onWatcherCleanup:tS,openBlock:ve,patchProp:cT,popScopeId:$B,provide:gS,proxyRefs:i6,pushScopeId:MB,queuePostFlushCb:Ip,reactive:vd,readonly:n3,ref:rn,registerRuntimeCompiler:KF,render:MT,renderList:Vo,renderSlot:rF,resolveComponent:US,resolveDirective:nF,resolveDynamicComponent:tF,resolveFilter:uH,resolveTransitionHooks:Td,setBlockTracking:Kp,setDevtoolsHook:cH,setTransitionHooks:bs,shallowReactive:GO,shallowReadonly:QZ,shallowRef:a6,ssrContextKey:vS,ssrUtils:dH,stop:yZ,toDisplayString:Wt,toHandlerKey:_p,toHandlers:aF,toRaw:po,toRef:XZ,toRefs:FZ,toValue:VZ,transformVNodeArgs:XF,triggerRef:zZ,unref:la,useAttrs:fF,useCssModule:GH,useCssVars:jH,useHost:pT,useId:RB,useModel:EF,useSSRContext:yS,useShadowRoot:qH,useSlots:hF,useTemplateRef:QB,useTransitionState:h6,vModelCheckbox:l1,vModelDynamic:wT,vModelRadio:rm,vModelSelect:G2,vModelText:d2,vShow:nm,version:jk,warn:iH,watch:vi,watchEffect:PB,watchPostEffect:NB,watchSyncEffect:CS,withAsyncContext:yF,withCtx:Dp,withDefaults:mF,withDirectives:So,withKeys:lU,withMemo:aH,withModifiers:am,withScopeId:LB},Symbol.toStringTag,{value:"Module"})),dU=[{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Button",category:"Call to Action",name:"Botón en Astro",description:"Botón de prueba en Astro",framework:"Astro",priority:1,tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",label:"Texto del botón",mandatory:!0,example_value:"Botón en Astro"},{name:"href",type:"text",label:"Url de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}],repeat_data:null}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Author_2025_Algarve",category:"Contenido",name:"Contenido con imagen a la izquierda 2025",description:"Contenido con imagen para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","genial"],fields:[{name:"nameAuthor",type:"text",help:"Introduce el nombre del autor, no debería ocupar más de una línea",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Introduce la profesión del autor, no debería ocupar más de una línea",label:"Descripción del autor",mandatory:!1,example_value:"Abogada especialista en Derecho Fiscal con 15 años de experiencia"},{name:"imageAuthor",type:"image",help:"Introduce la URL de la imagen del autor",label:"Src de la imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAuthorAlt",type:"text",help:"Introduce la descripción alternativa (alt) de la imagen del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"minutes",type:"text",help:"Minutos de lectura del artículo. Si se deja vacío, no se muestra el componente de tiempo de lectura",label:"Minutos de lectura",mandatory:!1,example_value:"20"},{name:"borderRadius",type:"text",help:'Redondeo de la imagen. Valores admitidos: "sm", "md", "lg", "full", "48px". Si se deja vacío, no se aplica redondeo',label:"Border radius de la imagen",mandatory:!1,example_value:"full"},{name:"full",type:"boolean",help:"Si es true, el contenedor no lleva padding horizontal en móvil. Si es false, añade padding horizontal y un ancho mínimo de 48px a la imagen",label:"Modo ancho completo",mandatory:!1,example_value:!0},{name:"imageSize",type:"number",help:"Tamaño máximo (ancho y alto) de la imagen en píxeles. Valores admitidos: 24, 48, 60, 120, 160, 180, 200, 240. Por defecto 240",label:"Tamaño de la imagen (px)",mandatory:!1,example_value:240}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CTA_2025_Formentera",category:"Call to Action",name:"Botón CTA con colores personalizables GenIA-L 2025",description:"Botón de Call To Action con colores personalizables (texto, fondo, borde). En hover invierte los colores automáticamente. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["boton","cta","genial"],fields:[{name:"buttonText",type:"text",help:"Texto visible del botón. Se ajusta al ancho del contenido (w-fit). No admite HTML",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. Si se deja vacío, por defecto apunta a "#" (no navega)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"frontColor",type:"text",help:'Color del texto en reposo (y del fondo al hacer hover). Acepta nombre CSS (ej. "white", "black") o código hex (ej. "#2134F1"). En hover, este valor y "Color de fondo" se intercambian',label:"Color del texto (frontal)",mandatory:!1,example_value:"#ffffff"},{name:"backColor",type:"text",help:'Color de fondo en reposo (y del texto al hacer hover). Acepta nombre CSS o código hex. En hover, este valor y "Color del texto" se intercambian',label:"Color de fondo",mandatory:!1,example_value:"#2134F1"},{name:"borderColor",type:"text",help:"Color del borde del botón (1px sólido). Acepta nombre CSS o código hex. NO cambia en hover",label:"Color del borde",mandatory:!1,example_value:"#2134F1"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2025_Barcelona",category:"Cabecera",name:"Breadcrumb 2025",description:"Breadcrumb para el directorio en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["breadcrumb","genial"],fields:[{name:"text",type:"text",help:"Texto del último nivel del breadcrumb (el actual). Admite HTML. Si se deja vacío, el nivel aparecerá sin texto",label:"Texto del breadcrumb",mandatory:!1,example_value:"Guía de fiscalidad para autónomos"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se usa para construir el enlace al inicio y la URL absoluta del breadcrumb en el structured data SEO. Déjalo vacío si el breadcrumb parte de la raíz',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"link",type:"text",help:'URL de destino del último nivel del breadcrumb. Por defecto "#" (sin destino)',label:"Enlace del breadcrumb",mandatory:!1,example_value:"/genia-l/guia-fiscalidad-autonomos"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2025_Madrid",category:"Cabecera",name:"Header GenIA-L 2025",description:"Header para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["header","navegación"],fields:[{name:"label",type:"text",help:"Texto del botón CTA principal que aparece en la esquina superior derecha de la cabecera",label:"Texto del botón CTA",mandatory:!1,example_value:"Pruébalo ya"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena a todos los enlaces del menú (inicio, categorías, subcategorías) y a la URL del structured data SEO. Déjalo vacío si el menú parte de la raíz',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"url",type:"text",help:'URL de destino del botón CTA. Por defecto "#"',label:"Enlace del botón CTA",mandatory:!1,example_value:"/genia-l/pruebalo"},{name:"loading",type:"select",help:'Tipo de carga del logo de la cabecera. Usa "eager" si el logo está above the fold (recomendado en páginas con cabecera visible al cargar); "lazy" si el componente se renderiza fuera del viewport inicial',label:"Carga del logo",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"eager"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2026_Madrid",category:"Cabecera",name:"Header GenIA-L 2026",description:"Header para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["header","navegación"],fields:[{name:"label",type:"text",help:"Texto del botón CTA principal que aparece en la esquina superior derecha de la cabecera",label:"Texto del botón CTA",mandatory:!1,example_value:"Pruébalo ya"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena al enlace del logo y a las rutas del menú por defecto, y se usa en la URL del structured data SEO. Si se pasa un menú custom en "categories", este valor NO se aplica a esos enlaces — debes incluir la ruta completa en cada ítem',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"url",type:"text",help:'URL de destino del botón CTA. Por defecto "#"',label:"Enlace del botón CTA",mandatory:!1,example_value:"/genia-l/pruebalo"},{name:"loading",type:"select",help:'Tipo de carga del logo de la cabecera. Usa "eager" si el logo está above the fold (recomendado en páginas con cabecera visible al cargar); "lazy" si el componente se renderiza fuera del viewport inicial',label:"Carga del logo",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"eager"},{name:"categories",type:"list",help:'Ítems del menú principal de navegación. Si se deja vacío o no se pasa, se muestra el menú por defecto (Cómo funciona, Seguridad, Casos reales, Contacto, Blog). Si defines este listado, debes incluir la ruta completa en cada "link" — el campo "subdirectory" NO se concatena',label:"Ítems del menú (opcional)",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Texto visible del ítem del menú principal",label:"Texto del ítem",example_value:"Cómo funciona"},{name:"link",type:"text",help:'URL de destino del ítem. Debe ser la ruta completa (no se le concatena "subdirectory")',label:"URL del ítem",example_value:"/genia-l/conoce-genia-l/"},{name:"target",type:"select",help:'Cómo se abre el enlace: "_self" en la misma pestaña, "_blank" en una pestaña nueva',label:"Apertura del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],example_value:"_self"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Card_2025_Malta",category:"Contenido",name:"Grid de cards con título y enlace 2025",description:"Grid de cards con título y enlace para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","card","grid","genial"],fields:[{name:"items",type:"list",help:"Listado de cards que se muestran en un grid responsive: 1 columna en móvil, 2 en tablet (sm) y 4 en escritorio (lg)",label:"Listado de cards",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Texto visible de la card. Es el único contenido que se muestra (no hay imagen ni descripción en este componente)",label:"Texto del título",example_value:"Guía de contratos digitales"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. Si se deja vacío, la card apunta a "#" (no navega a ningún sitio pero conserva el estilo clicable)',label:"URL de enlace",example_value:"/genia-l/guia-contratos-digitales"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Alcorcon",category:"Contenido",name:"Contenido de vídeo GenIA-L 2025",description:"Contenido de vídeo para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","video","genial"],fields:[{name:"title",type:"text",help:"Título principal (h2) que aparece superpuesto sobre la imagen o vídeo de fondo. Si se deja vacío, no se muestra",label:"Texto del título",mandatory:!1,example_value:"Prueba GenIA-L gratis durante 30 días"},{name:"subtitle",type:"text",help:"Subtítulo que aparece debajo del título. Si se deja vacío, no se muestra",label:"Texto del subtítulo",mandatory:!1,example_value:"La plataforma de IA jurídica para profesionales del Derecho"},{name:"description",type:"text",help:"Descripción que aparece debajo del subtítulo. Admite HTML. Si se deja vacía, no se muestra",label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza tareas, redacta documentos y encuentra jurisprudencia relevante en segundos"},{name:"txtBtn",type:"text",help:'Texto del botón CTA. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"alt",type:"text",help:"Texto alternativo de la imagen de fondo para accesibilidad. Solo aplica cuando se usa imagen (no vídeo)",label:"Texto alternativo de la imagen",mandatory:!1,example_value:"Imagen de fondo de la sección promocional de GenIA-L"},{name:"src",type:"image",help:'URL de la imagen de fondo. Mutuamente exclusivo con el vídeo: si se rellena "URL del video", este campo se ignora',label:"Imagen de fondo",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"iframeSrc",type:"video",help:"URL del vídeo embebido de fondo (se reproduce con autoplay, muted y loop). Tiene prioridad sobre la imagen: si se rellena, la imagen de fondo se ignora",label:"URL del video",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://player.vimeo.com/video/1087114916?controls=0&autoplay=1&muted=1&loop=1&badge=0&autopause=0&player_id=0&app_id=58479"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"loading",type:"select",help:'Tipo de carga de la imagen de fondo (solo aplica a imagen, no a vídeo). "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Cordoba",category:"Contenido",name:"Contenido con icono grande GenIA-L 2025",description:"Contenido con icono grande para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"title",type:"text",help:'Título del contenido. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título" (h1-h6 o span). No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Se muestra siempre centrada y como texto plano (no admite HTML)",label:"Texto de la descripción",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"tipo",type:"select",help:'Etiqueta HTML y tamaño del título. Cada opción aplica estilos distintos: "h1" 56px alineado a la izquierda, "h2" 40px izquierda, "h3" 2xl semibold izquierda, "h3-center" 2xl semibold centrado, "h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 centrado","H4","H5","H6","Span"],example_value:"h2"},{name:"showBigIco",type:"boolean",help:'Si está activado, muestra el icono grande seleccionado en el campo "Icono". Si está desactivado, NO se muestra nada en el hueco del icono (se renderiza un espacio vacío)',label:"Mostrar icono grande",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"bigIcon",type:"select",help:'Icono grande que se muestra junto al contenido (solo si "Mostrar icono grande" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["bigIA","bigIso1","bigIso2","bigGDPR","bigIso3"],options_labels:["IA","Iso1","Iso2","GDPR","Iso3"],example_value:"bigIso2"},{name:"positionFlex",type:"select",help:'Alineación vertical del icono respecto al bloque de texto. "Principio" alinea ambos arriba, "Centrado" los centra verticalmente',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto. "Horizontal" coloca el icono al lado del texto y el item ocupa todo el ancho disponible. "Vertical" apila el icono encima del texto y el item ocupa un ancho reducido (50% en móvil, 20% en desktop)',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Granada",category:"Contenido",name:"Contenido con muestra de icono GenIA-L 2025",description:"Contenido con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"title",type:"text",help:'Título del contenido. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título" (h1-h6 o span). No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Alineada a la izquierda",label:"Texto de la descripción",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"tipo",type:"select",help:'Etiqueta HTML y tamaño del título. "h1" 56px izquierda, "h2" 40px izquierda, "h3"/"h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"showIco",type:"boolean",help:'Si está activado, muestra el icono seleccionado en el campo "Icono" con fondo gris claro. Si está desactivado, no se renderiza el bloque del icono',label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"icon",type:"select",help:'Icono que se muestra junto al contenido (solo si "Mostrar icono" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["more","shop","correct","formation","case","medal","medal2","search-text","checklist","certificate","ico-ok","shield","edit","ia","users","graphic","balance","calendar-check","documents","compliance","library","support","defendant"],options_labels:["Más","Tienda","Correcto","Formación","Caso","Medalla","Medalla 2","Buscar texto","Checklist","Certificado","OK","Escudo","Editar","IA","Usuarios","Gráfico","Balanza","Calendario check","Documentos","Compliance","Librería","Soporte","Demandado"],example_value:"more"},{name:"positionFlex",type:"select",help:'Alineación vertical del icono respecto al bloque de texto. "Principio" alinea ambos arriba, "Centrado" los centra verticalmente',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto. "Horizontal" coloca el icono al lado del texto y el item ocupa todo el ancho disponible (en este modo el campo "Tamaño del bloque" no se aplica). "Vertical" apila el icono encima del texto y el item ocupa el ancho definido en "Tamaño del bloque"',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"widthBlock",type:"select",help:'Ancho del bloque cuando se usa orientación vertical (solo aplica si "Flex del item" está en Vertical; en Horizontal se ignora). "1/4" → 50% en tablet y 25% en desktop. "1/3" → 33% en desktop',label:"Tamaño del bloque (solo en orientación Vertical)",options:["lg:w-1/4 md:w-2/4","lg:w-1/3"],options_labels:["1/4","1/3"],example_value:"lg:w-1/4 md:w-2/4"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Malaga",category:"Contenido",name:"Contenido con imagen izquierda o derecha GenIA-L 2025",description:"Contenido con imagen para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","genial"],fields:[{name:"showIco",type:"boolean",help:'Si está activado, muestra un icono SVG circular (un "+" dentro de un círculo) junto al texto. Si está desactivado, el bloque se renderiza sin icono (con un layout de padding distinto)',label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"title",type:"text",help:"Título superior (pequeña etiqueta con fondo gris). Admite HTML. Si se deja vacío, NO se muestra",label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"subtitle",type:"text",help:'Subtítulo principal del bloque (h2). Admite HTML. Su tamaño lo controla el campo "Tamaño del h2"',label:"Texto del subtítulo",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"description",type:"text",help:'Descripción que aparece debajo del subtítulo. Admite HTML. Su tamaño de fuente lo controla el campo "Tamaño de fuente del texto"',label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza la gestión de riesgos, documenta controles y audita el cumplimiento normativo desde una única plataforma"},{name:"paddingLeft",type:"text",help:'Padding horizontal (en píxeles) entre el icono y el texto. Se aplica a la izquierda si "Alineación del contenido" es "Izquierda", o a la derecha si es "Derecha". Si se deja vacío, no se aplica padding',label:"Padding del texto (en px)",mandatory:!1,example_value:"24"},{name:"fontSize",type:"select",help:"Tamaño de fuente del bloque de descripción (no afecta al título ni al subtítulo)",label:"Tamaño de fuente del texto",options:["sm","base","lg","xl"],options_labels:["Pequeño","Base","Grande","Extra grande"],example_value:"base"},{name:"alignItems",type:"select",help:'Alineación vertical del contenedor principal. "Centro" alinea texto e imagen al centro vertical; "Inicio" los alinea arriba; "Fin" los alinea abajo',label:"Alineación vertical de los elementos",options:["center","start","end"],options_labels:["Centro","Inicio","Fin"],example_value:"center"},{name:"h2Size",type:"select",help:'Tamaño del subtítulo h2 en desktop. "Por defecto" = 56px (o 46px si "Mostrar icono" + "Mostrar imagen" están ambos activados). "40px" = 40px fijo. En móvil siempre 36px',label:"Tamaño del h2",options:["default","40px"],options_labels:["Por defecto","40px"],example_value:"default"},{name:"flexOrientation",type:"select",help:'Orientación del icono respecto al texto dentro del bloque. "Fila" coloca el icono al lado del texto; "Columna" apila el icono encima del texto. Solo aplica si "Mostrar icono" está activado',label:"Orientación del contenido",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y aplica padding-left al texto; "Derecha" coloca la imagen a la derecha (flex invertido) y aplica padding-right al texto',label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"width",type:"select",help:'Ancho del bloque de contenido. "Ancho completo" ocupa el 100% del contenedor padre; "3/5" ocupa el 60%; "7xl" aplica max-width de 7xl de Tailwind (1280px)',label:"Ancho del contenido",options:["full","3/5","7xl"],options_labels:["Ancho completo","Ancho 3/5","Ancho 7xl"],example_value:"full"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"showImage",type:"boolean",help:"Si está activado, se renderiza el layout con imagen (texto + imagen). Si está desactivado, se renderiza un layout alternativo solo con texto (con más padding)",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:'URL de la imagen principal. Solo se renderiza si "Mostrar imagen" está activado',label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"loading",type:"select",help:'Tipo de carga de la imagen principal. "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtnModal",type:"boolean",help:"Si está activado, muestra un segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón de modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón de modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'URL de la imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón de modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo se usa si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L mostrando el panel de cumplimiento normativo"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"Cumplimiento normativo ISO 27001"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Descubre cómo GenIA-L te ayuda a automatizar auditorías, documentar controles y mantener el cumplimiento de la norma ISO 27001"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-contacto-iso27001"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Montevideo",category:"Contenido",name:"Contenido card con etiqueta GenIA-L 2025",description:"Contenido card con imagen y etiqueta para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","card","imagen","genial"],fields:[{name:"title",type:"text",help:"Título de la card, se renderiza como h3. Si se deja vacío, aparece el h3 vacío (no se oculta automáticamente)",label:"Texto del título",mandatory:!1,example_value:"Automatización de contratos con GenIA-L"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen de la card para accesibilidad",label:"Texto alternativo de la imagen",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"},{name:"description",type:"text",help:"Descripción de la card, se renderiza como párrafo debajo del título. Si se deja vacía, aparece el párrafo vacío (no se oculta automáticamente)",label:"Texto de la descripción",mandatory:!1,example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. TODA la card es clicable (no solo un botón). Si se deja vacío, apunta a "#" (no navega pero conserva el estilo clicable)',label:"Url del enlace",mandatory:!1,example_value:"/genia-l/blog/automatizacion-contratos"},{name:"image",type:"image",help:"URL de la imagen de la card (aparece en la parte superior). Se renderiza siempre, por lo que conviene no dejarla vacía o se mostrará una imagen rota",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"tag",type:"text",help:"Etiqueta que aparece sobre el título (tipo badge). Si se deja vacía, NO se muestra",label:"Etiqueta del contenido",mandatory:!1,example_value:"Legaltech"},{name:"author",type:"text",help:'Nombre del autor del contenido. Se muestra como "Por [nombre]" debajo de la descripción. Si se deja vacío, la línea de autor NO se muestra',label:"Nombre del autor",mandatory:!1,example_value:"María García López"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Cabra",category:"Contenido",name:"Contenido con tabs GenIA-L 2026",description:"Contenido con pestañas (tabs) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","tabs","genial"],fields:[{name:"items",type:"list",help:'Listado de pestañas del tab. Cada pestaña tiene su nombre, contenido (items internos con icono y texto) e imagen. La pestaña marcada como "default" es la que se muestra al cargar; las demás arrancan ocultas y se activan al hacer click en su botón',label:"Listado de pestañas",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Nombre de la pestaña que aparece en el botón superior y como título dentro del panel. También se usa como alt de la imagen si no hay otro texto",label:"Nombre de la pestaña",example_value:"Automatización jurídica"},{name:"default",type:"boolean",help:'Si está activado, esta pestaña se muestra al cargar la página y su botón aparece resaltado. Solo debería haber UNA pestaña con "default: true"; si hay varias, se mostrarán todas a la vez al inicio',label:"¿Pestaña por defecto?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"buttonUrl",type:"text",help:'URL de destino del botón "Ver experiencias de uso" que aparece dentro del panel de la pestaña. Si se deja vacía, el botón no tiene destino',label:"URL del botón",example_value:"/genia-l/experiencias/automatizacion"},{name:"image",type:"image",help:"URL de la imagen que se muestra a la derecha del contenido de la pestaña. Si se deja vacía, aparece imagen rota",label:"Imagen de la pestaña",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"items",type:"list",help:"Sub-listado de elementos con icono y texto que se muestran dentro de la pestaña. Cada elemento se pasa al componente Repetidor_2025_Menorca para renderizarse con el formato estándar de listado con iconos",label:"Items de la pestaña",items:{type:"object",fields:[{name:"title",type:"text",help:"Título del elemento (h4)",label:"Título",example_value:"Redacción de contratos"},{name:"description",type:"textArea",help:"Descripción del elemento",label:"Descripción",example_value:"Genera borradores de contratos a partir de plantillas personalizables en segundos"},{name:"icon",type:"text",help:"Nombre del icono a mostrar junto al elemento. Consulta los valores aceptados en el componente Repetidor_2025_Menorca",label:"Icono",example_value:"edit"}]}}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Dubai",category:"Contenido",name:"Contenido título, descripción, botón y carrusel GenIA-L 2026",description:"Contenido con título, descripción y botón + carrusel de vídeos/imágenes para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","carrusel","genial"],fields:[{name:"title",type:"text",help:"Título principal (h2) que aparece sobre el carrusel. Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Experiencias reales con GenIA-L"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo profesionales del Derecho están transformando su día a día con inteligencia artificial"},{name:"buttonText",type:"text",help:'Texto del botón que aparece debajo del carrusel. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todos los casos de uso"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/casos-reales"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón debajo del carrusel. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:'Listado de ítems del carrusel. Cada ítem puede ser un VÍDEO (si se rellena "Url iframe") o una IMAGEN (si se deja el iframe vacío y se rellena "Imagen"). Los dos tipos pueden coexistir en el mismo carrusel. Algunos subcampos aplican solo a un tipo u otro',label:"Listado de items del carrusel",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:'URL del iframe del vídeo (p. ej. Vimeo/YouTube). Si tiene valor, el ítem se renderiza como VÍDEO (con thumbnail "Url imagen" hasta que se reproduzca). Si se deja vacío, el ítem se renderiza como IMAGEN',label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"text",help:'Thumbnail/preview del vídeo que se muestra antes de reproducirlo. Solo aplica a ítems tipo VÍDEO (cuando "Url iframe" tiene valor)',label:"Url imagen (thumbnail del vídeo)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura usada en el structured data SEO del vídeo. Solo aplica a ítems tipo VÍDEO",label:"Url miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"image",type:"image",help:'Imagen del ítem. Solo aplica cuando el ítem es tipo IMAGEN (es decir, cuando "Url iframe" está vacío)',label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad. Solo aplica a ítems tipo IMAGEN",label:"Alt Imagen",example_value:"Captura del dashboard de GenIA-L mostrando el editor de contratos"},{name:"descriptionImage",type:"textArea",help:"Descripción de la imagen para el structured data SEO. Solo aplica a ítems tipo IMAGEN",label:"Descripción de imagen",example_value:"Captura del dashboard de GenIA-L mostrando el editor de contratos"},{name:"description",type:"textArea",help:"Descripción del ítem (testimonio o comentario). Se muestra junto al autor en los ítems tipo VÍDEO",label:"Descripción",example_value:"GenIA-L nos ha reducido el tiempo de redacción de contratos en un 70%"},{name:"uploadDate",type:"text",help:"Fecha de publicación del vídeo (formato ISO YYYY-MM-DD). Se usa en el structured data SEO. Solo aplica a ítems tipo VÍDEO",label:"Fecha de publicación",example_value:"2026-01-15"},{name:"author",type:"text",help:"Nombre del autor del testimonio. Se muestra junto a la descripción en los ítems tipo VÍDEO",label:"Nombre del autor",example_value:"María García López"},{name:"positionCompany",type:"text",help:"Cargo del autor en su empresa. Aparece debajo del nombre. Solo aplica a ítems tipo VÍDEO",label:"Cargo del autor",example_value:"Socia directora de Derecho Fiscal en Despacho García"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Estocolmo",category:"Contenido",name:"Grid de cards con imagen GenIA-L 2026",description:"Grid de cards con imagen, título, descripción y autor para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","card","grid","genial"],fields:[{name:"items",type:"list",help:"Listado de cards que se muestran en un grid responsive: 1 columna en móvil, 2 en tablet (máx 400px cada una) y 3 en escritorio (máx 400px cada una). Cada card es clicable y se renderiza con el componente Contenido_2025_Montevideo",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título de la card (h3). Se muestra siempre; si se deja vacío, aparece el h3 vacío",label:"Título",example_value:"Automatización de contratos con GenIA-L"},{name:"description",type:"textArea",help:"Descripción de la card. Se muestra siempre como párrafo; si se deja vacía, aparece el párrafo vacío",label:"Descripción",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"link",type:"text",help:'URL de destino al hacer click en la card (toda la card es clicable). Si se deja vacío, apunta a "#" (no navega)',label:"Url del enlace",example_value:"/genia-l/blog/automatizacion-contratos"},{name:"tag",type:"text",help:"Etiqueta (badge) que aparece sobre el título. Si se deja vacía, NO se muestra",label:"Etiqueta",example_value:"Legaltech"},{name:"image",type:"image",help:"Imagen de la card (aparece en la parte superior). Se renderiza siempre; si se deja vacía aparece una imagen rota",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad",label:"Alt de la imagen",example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"},{name:"author",type:"text",help:'Nombre del autor del contenido. Se muestra como "Por [nombre]" debajo de la descripción. Si se deja vacío, la línea de autor NO se muestra',label:"Nombre del autor",example_value:"María García López"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Jaen",category:"Contenido",name:"Cabecera de blog con autor, descripción, imagen y RRSS GenIA-L 2026",description:"Cabecera de blog con título, subtítulo, número de colegiado, descripción, imagen lateral y botones de redes sociales para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","blog","cabecera","rrss","genial"],fields:[{name:"title",type:"text",help:'Título principal. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". Admite HTML',label:"Texto del título",mandatory:!1,example_value:"Inteligencia artificial en el despacho: casos reales"},{name:"subtitle",type:"text",help:"Subtítulo opcional que aparece junto al número de colegiado. Admite HTML. Si se deja vacío, NO se muestra",label:"Texto del subtítulo",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"number",type:"text",help:'Número de colegiado del autor. Se muestra como "Nº colegiado: [valor]". Si se deja vacío, NO se muestra',label:"Número de colegiado",mandatory:!1,example_value:"12345"},{name:"description",type:"text",help:'Descripción que aparece debajo del título y subtítulo. Admite HTML. Su tipografía y tamaño los controla el campo "Estilo de la descripción"',label:"Texto de la descripción",mandatory:!1,example_value:"Tres experiencias reales de profesionales del Derecho que han incorporado GenIA-L en su día a día"},{name:"image",type:"image",help:"Imagen lateral. Si tiene valor, el layout se convierte en dos columnas (texto + imagen). Si se deja vacía, NO se muestra imagen y el texto ocupa todo el ancho",label:"Imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAlt",type:"text",help:'Texto alternativo de la imagen para accesibilidad. Solo aplica si "Imagen" tiene valor',label:"Alt de la imagen",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"tipo",type:"select",help:'Etiqueta HTML y estilo del título. Cada opción aplica estilos distintos: "h1 categoría blog" 40px centrado normal, "h1 autor blog" 40px izquierda semibold, "h1 post blog" 40px centrado semibold, "h1 post enriquecido" 40px izquierda semibold, "h2 blog" 28px/32px izquierda normal, "h2" 36px/40px centrado normal, "h3" 20px/24px izquierda semibold, "h4" xl izquierda semibold. Si se elige un valor fuera de la lista, el título se renderiza como párrafo simple',label:"Etiqueta del título",options:["h1-blog-categoria","h1-blog-autor","h1-blog-post","h1-blog-postenriquecido","h2-blog","h2","h3","h4"],options_labels:["H1 categoría blog","H1 autor blog","H1 post blog","H1 post enriquecido blog","H2 blog","H2","H3","H4"],example_value:"h1-blog-autor"},{name:"flexJustify",type:"select",help:'Justificación horizontal del bloque de texto. "Centrado" centra el contenido en su columna; "Inicio" lo alinea a la izquierda',label:"Justificación del contenido",options:["justify-center","justify-start"],options_labels:["Centrado","Inicio"],example_value:"justify-center"},{name:"textAlign",type:"select",help:"Alineación del texto dentro del párrafo de descripción",label:"Alineación del texto",options:["center","left","right"],options_labels:["Centro","Izquierda","Derecha"],example_value:"center"},{name:"descriptionStyle",type:"select",help:'Tipografía y tamaño del párrafo de descripción. "Poppins" aplica Poppins xl con leading 7 y margen inferior grande (para descripciones destacadas); "Inter" aplica Inter base sin margen (para descripciones compactas)',label:"Estilo de la descripción",options:["poppins","inter"],options_labels:["Poppins (grande)","Inter (compacto)"],example_value:"poppins"},{name:"imagePosition",type:"select",help:'Posición de la imagen respecto al texto (solo aplica si "Imagen" tiene valor). "Derecha" coloca la imagen a la derecha del texto; "Izquierda" la coloca a la izquierda',label:"Posición de la imagen",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"items",type:"list",help:"Listado de bloques de redes sociales y opciones de compartir. Cada bloque se renderiza con el componente RRSS_2025_Pisa. Habitualmente se configura UN solo bloque con todos los enlaces rellenos; si hay varios se mostrarán en fila. Si se deja vacío, el bloque de RRSS NO se muestra",label:"Items de redes sociales",mandatory:!1,items:{type:"object",fields:[{name:"facebook",type:"text",help:"URL del perfil de Facebook. Si se deja vacía, el icono de Facebook NO aparece",label:"URL de Facebook",example_value:"https://facebook.com/lefebvre.es"},{name:"twitter",type:"text",help:"URL del perfil de Twitter/X. Si se deja vacía, el icono de X NO aparece",label:"URL de Twitter/X",example_value:"https://x.com/lefebvre_es"},{name:"linkedin",type:"text",help:"URL del perfil de LinkedIn. Si se deja vacía, el icono de LinkedIn NO aparece",label:"URL de LinkedIn",example_value:"https://linkedin.com/company/lefebvre-es"},{name:"whatsapp",type:"text",help:"URL/enlace de WhatsApp (p. ej. https://wa.me/...). Si se deja vacía, el icono de WhatsApp NO aparece",label:"URL de WhatsApp",example_value:"https://wa.me/34600000000"},{name:"instagram",type:"text",help:"URL del perfil de Instagram. Si se deja vacía, el icono de Instagram NO aparece",label:"URL de Instagram",example_value:"https://instagram.com/lefebvre_es"},{name:"youtube",type:"text",help:"URL del canal de YouTube. Si se deja vacía, el icono de YouTube NO aparece",label:"URL de YouTube",example_value:"https://youtube.com/@lefebvre"},{name:"email",type:"text",help:"Dirección de email de contacto. Si se deja vacía, el icono de email NO aparece",label:"Email",example_value:"contacto@lefebvre.es"},{name:"print",type:"boolean",help:"Activa el botón de imprimir que ejecuta window.print() en la página actual",label:"Mostrar botón imprimir",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"copyLink",type:"boolean",help:"Activa el botón de copiar enlace que copia la URL actual al portapapeles",label:"Mostrar botón copiar enlace",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Leon",category:"Contenido",name:"Contenido de prueba Paco 2026",description:'Componente de prueba que renderiza un saludo simple "Hola, soy [nombre]". Uso interno / testing',framework:"Astro",priority:1,tags:["contenido","prueba","genial"],fields:[{name:"nombre",type:"text",help:'Nombre que se mostrará en el saludo. Se inserta en el texto como "Hola, soy [nombre]". Si se deja vacío, aparece el valor por defecto "#"',label:"Nombre",mandatory:!1,example_value:"Paco"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Mallorca",category:"Contenido",name:"Contenido con icono GenIA-L 2026",description:"Contenido con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"positionFlex",type:"select",help:'Alineación vertical del contenedor principal. "Centrado" centra verticalmente los items; "Principio" los alinea arriba',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:'Alineación horizontal del botón CTA inferior. "Centrado" sitúa el botón en el centro; "Principio" lo alinea a la izquierda. Solo aplica si "Mostrar botón" está activado',label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono grande respecto al texto DENTRO de cada item. "Horizontal" coloca el icono al lado del texto; "Vertical" apila el icono encima',label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:'Orientación del conjunto de items entre sí. "Horizontal" coloca los items en fila (con flex-wrap); "Vertical" los apila en columna',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:'Etiqueta HTML y estilo del título de cada item. "h1" 56px izquierda, "h2" 40px izquierda, "h3" 2xl semibold izquierda, "h3-center" 2xl semibold centrado, "h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 centrado","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:'Texto del botón CTA inferior. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las certificaciones"},{name:"buttonUrl",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/certificaciones"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA inferior. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:"Listado de items de contenido con icono grande, título y descripción. Cada item se renderiza con el componente Repetidor_2025_Cordoba",label:"Items de contenido",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:'Título del item. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". No admite HTML',label:"Título",example_value:"Certificación ISO 27001"},{name:"description",type:"textArea",help:"Descripción del item. Se muestra debajo del título centrada y como texto plano (no admite HTML)",label:"Descripción",example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"showBigIco",type:"boolean",help:"Si está activado, muestra el icono grande seleccionado junto al contenido del item. Si está desactivado, NO se muestra icono (el hueco queda vacío)",label:"Mostrar icono grande",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"bigIcon",type:"select",help:'Icono grande que se muestra junto al item (solo si "Mostrar icono grande" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono grande",options:["bigIA","bigIso1","bigIso2","bigGDPR","bigIso3"],options_labels:["IA","Iso1","Iso2","GDPR","Iso3"],example_value:"bigIso2"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Marruecos",category:"Contenido",name:"Caja con borde degradado, items con icono y botón GenIA-L 2026",description:"Caja con borde degradado que contiene título, listado de items (icono + subtítulo + descripción) y botón CTA en la esquina inferior para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","icono","card","genial"],fields:[{name:"title",type:"text",help:"Título principal del bloque (h2) que aparece en la parte superior de la caja. Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Título",mandatory:!1,example_value:"Ventajas de GenIA-L para tu despacho"},{name:"buttonText",type:"text",help:'Texto del botón CTA en la esquina inferior. ATENCIÓN: este componente NO tiene prop "Mostrar botón" — el botón aparece SIEMPRE. Si se deja vacío, aparecerá un botón sin texto',label:"Texto del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"buttonHref",type:"text",help:'URL de destino del botón CTA. Por defecto "#". Recuerda que el botón se renderiza siempre; si dejas esta URL vacía, apuntará a "#" (no navegará)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"items",type:"list",help:"Listado de items de la caja. Cada item tiene un icono (de 3 opciones fijas), un subtítulo y una descripción. Los items se apilan verticalmente con un gap",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"icon",type:"select",help:'Icono del item (SVG con gradiente de color). Solo se reconocen 3 valores: "chat" (burbuja de chat), "book" (libro) y "check" (marca de verificación). Si se elige cualquier otro valor, no aparece ningún icono y el hueco queda vacío',label:"Icono",options:["chat","book","check"],options_labels:["Chat","Libro","Check"],example_value:"chat"},{name:"subtitle",type:"text",help:"Subtítulo del item (h3). Se renderiza siempre; si se deja vacío, aparece el h3 vacío. No admite HTML",label:"Subtítulo",example_value:"Asistente conversacional"},{name:"description",type:"textArea",help:"Descripción del item. Se renderiza siempre como párrafo; si se deja vacía, aparece el párrafo vacío. No admite HTML",label:"Descripción",example_value:"Consulta jurisprudencia y doctrina en lenguaje natural, sin necesidad de construir queries complejas"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Menorca",category:"Contenido",name:"Contenido con iconos pequeños GenIA-L 2026",description:"Contenedor de items con iconos pequeños (23 variantes) + botón CTA opcional para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"positionFlex",type:"select",help:'Alineación vertical del contenedor principal. "Centrado" centra verticalmente los items; "Principio" los alinea arriba',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:'Alineación horizontal del botón CTA inferior. "Centrado" sitúa el botón en el centro; "Principio" lo alinea a la izquierda. Solo aplica si "Mostrar botón" está activado',label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto DENTRO de cada item. "Horizontal" coloca el icono al lado del texto; "Vertical" apila el icono encima',label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:'Orientación del conjunto de items entre sí. "Horizontal" coloca los items en fila (con flex-wrap); "Vertical" los apila en columna',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:'Etiqueta HTML y estilo del título de cada item. "h1" 56px izquierda, "h2" 40px izquierda, "h3"/"h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:'Texto del botón CTA inferior. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las funcionalidades"},{name:"buttonUrl",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/funcionalidades"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA inferior. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"widthArticle",type:"select",help:'Ancho del contenedor principal. Actualmente solo está soportado "w-full" (100%)',label:"Ancho del Article",options:["w-full"],options_labels:["Ancho completo"],example_value:"w-full"},{name:"items",type:"list",help:"Listado de items de contenido con icono pequeño, título y descripción. Cada item se renderiza con el componente Contenido_2025_Granada",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:'Título del item. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". No admite HTML',label:"Título",example_value:"Búsqueda semántica"},{name:"description",type:"textArea",help:"Descripción del item. Se muestra debajo del título y admite HTML",label:"Descripción",example_value:"Encuentra jurisprudencia y doctrina relevante con consultas en lenguaje natural"},{name:"showIco",type:"boolean",help:"Si está activado, muestra el icono seleccionado con fondo gris claro. Si está desactivado, no se renderiza el bloque del icono",label:"¿Mostrar icono?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"icon",type:"select",help:'Icono que se muestra junto al item (solo si "Mostrar icono" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["more","shop","correct","formation","case","medal","medal2","search-text","checklist","certificate","ico-ok","shield","edit","ia","users","graphic","balance","calendar-check","documents","compliance","library","support","defendant"],options_labels:["Más","Tienda","Correcto","Formación","Caso","Medalla","Medalla 2","Buscar texto","Checklist","Certificado","OK","Escudo","Editar","IA","Usuarios","Gráfico","Balanza","Calendario check","Documentos","Compliance","Librería","Soporte","Demandado"],example_value:"search-text"},{name:"widthBlock",type:"select",help:'Ancho del item cuando se usa orientación vertical en "Flex del item" (Vertical). "1/4" = 50% tablet / 25% desktop. "1/3" = 33% desktop. En orientación horizontal este campo se ignora',label:"Ancho del bloque (solo en orientación Vertical)",options:["lg:w-1/4 md:w-2/4","lg:w-1/3"],options_labels:["1/4","1/3"],example_value:"lg:w-1/4 md:w-2/4"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Michigan",category:"Contenido",name:"Contenido múltiples artículos con texto, imagen y modal GenIA-L 2026",description:"Listado de artículos con título, descripción, imagen y modal opcional para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","imagen","modal","genial"],fields:[{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto en CADA artículo. "Izquierda" coloca la imagen a la izquierda en todos los artículos; "Derecha" a la derecha. Esta orientación es GLOBAL — se aplica a todos los ítems por igual',label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario en TODOS los artículos. Los botones primarios son globales: todos los artículos comparten el mismo texto y enlace. Recuerda: también requiere "Enlace del botón" relleno',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:'Texto del botón primario (global para todos los artículos). Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario (global para todos los artículos). Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/saber-mas"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva el botón que abre el modal en TODOS los artículos. El modal se rellena con los datos específicos de cada ítem (imagen/título/descripción del modal)",label:"Mostrar botón Modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal (global para todos los artículos). Se muestra solo si "Mostrar botón Modal" está activado',label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en pdf"},{name:"items",type:"list",help:"Listado de artículos. Cada artículo se renderiza con el componente Formulario_2025_Teruel. Todos los artículos llevan borde inferior separador EXCEPTO el último. Los datos del modal son específicos por ítem",label:"Listado de artículos",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título del artículo. Se renderiza siempre; si se deja vacío, aparece el título vacío",label:"Título",example_value:"Automatización de contratos con IA"},{name:"description",type:"textArea",help:"Descripción del artículo. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Descripción",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas y sugerencias basadas en jurisprudencia"},{name:"image",type:"image",help:"Imagen principal del artículo. Se muestra al lado del texto según la orientación global",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón Modal" está activado',label:"Imagen del modal",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"titleModal",type:"text",help:'Título que aparece dentro del modal. Solo se usa si "Mostrar botón Modal" está activado',label:"Título del modal",example_value:"Guía completa de automatización jurídica"},{name:"subtitleModal",type:"text",help:'Subtítulo que aparece dentro del modal, debajo del título. Solo se usa si "Mostrar botón Modal" está activado',label:"Subtítulo del modal",example_value:"Descarga el whitepaper de 40 páginas"},{name:"descriptionModal",type:"textArea",help:'Descripción que aparece dentro del modal. Admite HTML. Solo se usa si "Mostrar botón Modal" está activado',label:"Descripción del modal",example_value:"Descubre cómo reducir el tiempo de redacción de contratos en un 70% con técnicas de IA aplicadas al ámbito jurídico"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",example_value:"Portada de la guía de automatización jurídica con IA"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",example_value:"formulario-descarga-guia-automatizacion"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Mostoles",category:"Contenido",name:"Banner CTA con imagen de fondo o logo GenIA-L 2026",description:"Banner CTA con dos variantes: con imagen de fondo cover, o con borde degradado + logo grande de GenIA-L. Incluye botón primario y modal opcional. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","banner","cta","genial"],fields:[{name:"title",type:"text",help:"Título principal del banner (h3). Si se deja vacío, NO se muestra. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Prueba GenIA-L gratis"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Si se deja vacía, NO se muestra. Si tanto título como descripción están vacíos, el contenido se centra verticalmente con el botón",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo la IA jurídica transforma tu día a día"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"showImage",type:"boolean",help:'Activa/desactiva la imagen de fondo. Si ESTÁ ACTIVADO y "Imagen" tiene valor → layout con imagen de fondo cover (SIN borde degradado). Si ESTÁ DESACTIVADO o "Imagen" vacía → layout alternativo con borde degradado de color y logo grande de GenIA-L como marca de agua',label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"src",type:"image",help:'URL de la imagen de fondo. Solo se usa cuando "Mostrar imagen" está activado. Si se deja vacía, se activa el layout alternativo con borde degradado y logo de GenIA-L',label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva el segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L con el panel de automatización"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"Más sobre GenIA-L"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal",label:"Descripción del modal",mandatory:!1,example_value:"Descubre todas las funcionalidades de la plataforma de IA jurídica para despachos"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-contacto-genial"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Orcasitas",category:"Contenido",name:"Carrusel de vídeos e imágenes GenIA-L 2026",description:"Carrusel responsive (Glider.js) con slides de vídeo (abren en popup) o imagen (con descripción debajo) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","carrusel","video","genial"],fields:[{name:"slidesToShow",type:"text",help:"Número de slides visibles a la vez en desktop. Se ajusta automáticamente en tamaños menores (breakpoints responsive: 5→4→3→2→1 según anchura). Default 5",label:"Número de slides a mostrar",mandatory:!1,example_value:"3"},{name:"slidesToScroll",type:"text",help:"Número de slides que se desplazan al pulsar las flechas o arrastrar. Default 1 (scroll suave uno a uno)",label:"Número de slides a desplazar",mandatory:!1,example_value:"1"},{name:"loadScript",type:"boolean",help:"Si está activado, el componente carga CSS y JS de Glider.js desde el CDN. Actívalo si el carrusel es el único componente de la página que necesita Glider; desactívalo si Glider ya está cargado globalmente en la página para evitar duplicados",label:"Cargar dependencias",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:'Slides del carrusel. Cada slide puede ser un VÍDEO (si se rellena "Url iframe" — abre en popup al hacer click) o una IMAGEN (si se deja el iframe vacío y se rellena "URL Imagen" — aparece con descripción debajo). Los dos tipos pueden coexistir en el mismo carrusel',label:"Listado de slides",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"URL del vídeo embebido (Vimeo, YouTube, etc.). Si tiene valor, el slide se renderiza como VÍDEO: muestra un thumbnail clicable que abre el vídeo en un popup. Si se deja vacío, el slide se renderiza como IMAGEN",label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"image",help:"Thumbnail del vídeo que se muestra en el slide antes de abrir el popup. Solo aplica a slides tipo VÍDEO",label:"Thumbnail del vídeo",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura para el structured data SEO del vídeo. Solo aplica a slides tipo VÍDEO",label:"Url miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:'En slides tipo VÍDEO: testimonio/cita del autor (se muestra con su nombre y cargo). En slides tipo IMAGEN: no se muestra, se usa "Descripción de imagen"',label:"Descripción (testimonio)",example_value:"GenIA-L nos ha reducido el tiempo de redacción de contratos en un 70%"},{name:"author",type:"text",help:"Nombre del autor del testimonio. Se muestra en slides tipo VÍDEO junto a la descripción",label:"Nombre del autor",example_value:"María García López"},{name:"positionCompany",type:"text",help:"Cargo del autor en su empresa. Aparece debajo del nombre. Solo aplica a slides tipo VÍDEO",label:"Cargo del autor",example_value:"Socia directora de Derecho Fiscal"},{name:"uploadDate",type:"text",help:"Fecha de publicación del vídeo (formato ISO YYYY-MM-DD). Se usa en el structured data SEO. Solo aplica a slides tipo VÍDEO",label:"Fecha de publicación",example_value:"2026-01-15"},{name:"image",type:"image",help:'Imagen del slide. Solo aplica a slides tipo IMAGEN (cuando "Url iframe" está vacío). El ancho se adapta automáticamente según cuántas imágenes haya (1→600px, 2→400px, 3 o más→250px)',label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad. Solo aplica a slides tipo IMAGEN",label:"Alt Imagen",example_value:"Logo de corporación colaboradora de GenIA-L"},{name:"descriptionImage",type:"textArea",help:"Descripción que aparece debajo de la imagen del slide. Solo aplica a slides tipo IMAGEN",label:"Descripción de la imagen",example_value:"Colaborador destacado del ecosistema legaltech español"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Oslo",category:"Contenido",name:"Grid de vídeos con popup GenIA-L 2026",description:"Grid de 3 columnas con thumbnails de vídeos que se reproducen en un popup iframe al hacer click. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","popup","video","grid","genial"],fields:[{name:"items",type:"list",help:"Listado de vídeos que se muestran como grid (3 columnas en desktop, 1 en móvil). Cada thumbnail abre el vídeo en un popup al hacer click. Campo obligatorio: si no se pasa, el componente falla al renderizar",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"URL del vídeo embebido (Vimeo, YouTube, etc.) que se abrirá en el popup al hacer click en el thumbnail. Si se deja vacío, el popup abre sin contenido",label:"Url del vídeo (iframe)",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"image",help:"Thumbnail que se muestra en el grid antes de abrir el popup. Si se deja vacío, aparece una imagen rota",label:"Thumbnail del vídeo",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:'Descripción que aparece debajo del thumbnail (centrada, pequeña, semibold). Admite HTML. También se usa como alt de la imagen y en el structured data SEO. Si se deja vacía, el alt será "Video thumbnail" por defecto',label:"Descripción",example_value:"Automatización de contratos con IA"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Quito",category:"Contenido",name:"Datos de contacto con iconos GenIA-L 2026",description:"Bloque de datos de contacto con título y listado de items con iconos (teléfono, email, localización) para el directorio de GenIA-L en la corporativa de Lefebvre. Genera structured data SEO tipo ContactPoint",framework:"Astro",priority:1,tags:["texto","contacto","icono","genial"],fields:[{name:"title",type:"text",help:"Título del bloque de contacto (h2). Se usa también como nombre del ContactPoint en el structured data SEO. Se renderiza siempre; si se deja vacío, aparece el h2 vacío",label:"Título del bloque",mandatory:!1,example_value:"Contacto comercial"},{name:"items",type:"list",help:'Listado de datos de contacto. Cada item tiene un icono (teléfono, email o localización) y un texto. El structured data SEO extrae el PRIMER item con icono "phone" como teléfono, el PRIMER con "email" como email, y el PRIMER con "locator" como localidad. Además, el ÚLTIMO item del listado se resalta en azul',label:"Listado de items de contacto",mandatory:!1,items:{type:"object",fields:[{name:"icon",type:"select",help:"Icono del item. Los 3 valores válidos renderizan un SVG específico. Además, el icono determina qué tipo de dato (teléfono/email/localidad) se usa en el structured data SEO",label:"Icono",options:["phone","email","locator"],options_labels:["Teléfono","Email","Localización"],example_value:"phone"},{name:"text",type:"text",help:"Texto del item (número de teléfono, dirección de email, dirección postal, etc.). Admite HTML (útil para enlaces mailto: o tel:)",label:"Texto",example_value:"+34 91 210 80 00"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Sevilla",category:"Contenido",name:"Contenido texto bloque con imagen, icono y modal GenIA-L 2026",description:"Bloque de contenido con título, descripción, imagen lateral opcional, icono opcional y botones primario/modal para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","popup","texto","imagen","genial"],fields:[{name:"showIco",type:"boolean",help:"Si está activado, muestra un icono SVG junto al texto. Si está desactivado, el bloque se renderiza sin icono",label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"title",type:"text",help:"Título principal del bloque (h1, 56px en desktop). Admite HTML. Se renderiza siempre; si se deja vacío, aparece el h1 vacío",label:"Texto del título",mandatory:!1,example_value:"Transforma tu despacho con IA"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo GenIA-L automatiza la redacción de contratos y la búsqueda jurisprudencial"},{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y el texto a la derecha; "Derecha" invierte el orden (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"flexOrientation",type:"select",help:'Orientación del icono respecto al texto dentro del bloque. "Fila" coloca el icono al lado del texto; "Columna" apila el icono encima. Solo aplica si "Mostrar icono" está activado',label:"Orientación del icono y texto",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"showImage",type:"boolean",help:"Si está activado, se renderiza el layout con imagen al lado del texto. Si está desactivado, se renderiza un layout alternativo solo con texto (sin imagen y con más padding)",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:'URL de la imagen principal. Solo se renderiza si "Mostrar imagen" está activado',label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"loading",type:"select",help:'Tipo de carga de la imagen. "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva un segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de GenIA-L mostrando el panel de asistente jurídico"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"GenIA-L Asistente"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Consulta jurisprudencia y doctrina en lenguaje natural, con citas contextuales y exportación a Word"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-demo-genial"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Tokyo",category:"Contenido",name:"Bloque con escudo de fondo, texto y grid de imágenes GenIA-L 2026",description:"Bloque con imagen de escudo de fondo, título, descripción, botón tipo enlace con flecha y grid lateral de logos/imágenes clicables para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","genial"],fields:[{name:"title",type:"text",help:"Título principal del bloque (h2). Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Plataforma certificada y segura"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"GenIA-L cumple con las principales certificaciones de seguridad y protección de datos del sector"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón tipo enlace (texto + flecha). ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"buttonText",type:"text",help:'Texto del botón tipo enlace. Aparece seguido de una flecha SVG. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las certificaciones"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. Rellena siempre esta URL si activas "Mostrar botón" (el componente no valida esta dependencia)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/certificaciones"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l") que se concatena a la URL de la imagen de fondo del bloque (el escudo). Si se deja vacío, la imagen de fondo se carga desde la raíz del sitio: "/images/genial/ico-shield.webp"',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"items",type:"list",help:"Listado de logos/imágenes que se muestran en el grid lateral del bloque. Cada ítem se renderiza con el componente Imagen_2025_Fukushima. El ancho del bloque de texto se adapta automáticamente al número de ítems: 1 ítem → texto a 2/3, 2 ítems → texto a 1/2, 3 o más → texto a 1/3",label:"Items del grid",mandatory:!1,items:{type:"object",fields:[{name:"link",type:"text",help:"URL de destino al hacer click en el logo/imagen. Si se deja vacío, la imagen no es clicable",label:"Enlace",example_value:"/genia-l/certificaciones/iso-27001"},{name:"image",type:"image",help:"URL de la imagen/logo del ítem. Si se deja vacía aparece imagen rota",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad",label:"Alt Imagen",example_value:"Logo de certificación ISO 27001"},{name:"descriptionImage",type:"textArea",help:"Descripción que aparece debajo de la imagen. Admite HTML",label:"Descripción de la imagen",example_value:"Certificación ISO 27001 de seguridad de la información"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Ubeda",category:"Contenido",name:"Bloque destacado de 3 columnas con cifras y descripción GenIA-L 2026",description:"Bloque con fondo azul translúcido que muestra hasta 3 items (títulos grandes y descripciones) en fila en desktop, en columna en móvil, con separadores visuales entre ellos. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","texto","destacado","genial"],fields:[{name:"items",type:"list",help:"Listado de bloques con cifras/títulos destacados y descripción. Layout responsive: 1 columna en móvil, 3 columnas en desktop (ancho 1/3 cada una). Diseñado para EXACTAMENTE 3 items (o menos). El ítem del medio tiene bordes separadores laterales en desktop y horizontales en móvil; si hay más de 3 ítems los extras no llevarán separadores visuales",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Cifra o texto destacado del bloque (aparece en tamaño grande, 40px móvil / 56px desktop, semibold). No admite HTML",label:"Título destacado",example_value:"70%"},{name:"description",type:"textArea",help:"Descripción que aparece debajo del título destacado (tamaño xl, centrada). Admite HTML",label:"Descripción",example_value:"Reducción del tiempo de redacción de contratos"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Yakarta",category:"Contenido",name:"Acordeón de vídeos con pestañas y rotación automática GenIA-L 2026",description:"Acordeón con botones tipo pestaña en la parte superior: al hacer click en cada pestaña se muestra su vídeo MP4 con título y descripción. Incluye rotación automática entre pestañas. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["acordeon","tabs","video","genial"],fields:[{name:"items",type:"list",help:"Listado de vídeos del acordeón. Cada vídeo tiene su botón de pestaña superior, título, descripción y archivo .mp4. Solo se muestra UNO a la vez; al hacer click en otra pestaña, el contenido cambia. También hay rotación automática entre pestañas cada pocos segundos",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Texto del botón tipo pestaña (aparece en la barra superior). Se muestra también en móvil como icono con texto oculto salvo al hacer hover/active",label:"Nombre o tag de la pestaña",example_value:"Redacción"},{name:"title",type:"text",help:"Título del vídeo (h3) que aparece sobre la descripción dentro del panel",label:"Título del vídeo",example_value:"Redacción automática de contratos"},{name:"description",type:"textArea",help:"Descripción del vídeo que aparece debajo del título. Admite HTML",label:"Descripción",example_value:"Genera borradores de contratos en segundos a partir de plantillas personalizables"},{name:"iframeSrc",type:"text",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como src de una etiqueta <video><source src="..." type="video/mp4">. Ejemplos válidos: .mp4, .webm alojados en CDN',label:"URL del archivo de vídeo (MP4)",example_value:"https://assets.lefebvre.es/media/videos/genial/redaccion-demo.mp4"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura del vídeo usada en el structured data SEO (VideoObject)",label:"URL de la miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageSrc",type:"text",help:'URL alternativa de miniatura (fallback de "URL de la miniatura" en el structured data SEO). Si "URL de la miniatura" tiene valor, este campo se ignora',label:"URL alternativa de miniatura (fallback SEO)",example_value:""},{name:"duration",type:"text",help:'Duración del vídeo en formato ISO 8601 (p. ej. "PT2M30S" para 2 min 30 s). Se usa en el structured data SEO. Default "PT2M" si se deja vacío',label:"Duración del vídeo (ISO 8601)",example_value:"PT2M"},{name:"default",type:"boolean",help:'Si está activado, esta pestaña se muestra al cargar la página y su botón aparece resaltado como "active". Solo debería haber UN ítem con default=true; si hay varios se mostrarán todos a la vez al inicio',label:"¿Es el vídeo por defecto?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CorpFooter",category:"Footer",name:"Footer Corporativo Lefebvre.es",description:"Footer marca 2025 Lefebvre.es",framework:"Astro",priority:1,tags:["footer","lefebvre.es"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CorpHero",category:"Call to Action",name:"Hero Corporativo Lefebvre.es",description:"Hero marca 2025 Lefebvre.es",framework:"Astro",priority:1,tags:["hero","video","lefebvre.es"],fields:[{name:"text",type:"textArea",label:"Contenido HTML",mandatory:!1,example_value:"<p><b>Es más que una imagen renovada. Es una nueva forma de avanzar.</b><br />En Lefebvre evolucionamos contigo. Nos adaptamos a ti.</p>"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Enlace_2025_Venecia",category:"Texto",name:"Enlace con icono de flecha o play GenIA-L 2025",description:"Enlace estilizado en color azul con un icono (flecha a la derecha o play a la izquierda) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["enlace","link","genial"],fields:[{name:"text",type:"text",help:"Texto visible del enlace. También se usa como aria-label para accesibilidad. Si se deja vacío, el enlace queda sin texto ni etiqueta accesible",label:"Texto del enlace",mandatory:!1,example_value:"Ver todos los casos de uso"},{name:"url",type:"text",help:'URL de destino del enlace. Si se deja vacío, por defecto apunta a "#" (no navega)',label:"URL de destino",mandatory:!1,example_value:"/genia-l/casos-reales"},{name:"target",type:"select",help:'Cómo se abre el enlace. "Misma pestaña" abre en la misma ventana; "Nueva pestaña" abre en otra pestaña y además añade automáticamente rel="noopener noreferrer" por seguridad',label:"Destino del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],mandatory:!1,example_value:"_blank"},{name:"icon",type:"select",help:'Icono que acompaña al texto del enlace. "Flecha" coloca un icono de flecha a la DERECHA del texto (estilo "saber más"). "Play" coloca un icono de play a la IZQUIERDA del texto y además aplica subrayado permanente al texto (estilo "ver vídeo")',label:"Icono del enlace",options:["arrow","play"],options_labels:["Flecha (derecha)","Play (izquierda)"],mandatory:!1,example_value:"arrow"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"FAQ_2025_Hiroshima",category:"Texto",name:"FAQ acordeón GenIA-L 2025",description:"Listado de preguntas frecuentes en acordeón exclusivo (solo una respuesta visible a la vez) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","faq","acordeon","genial"],fields:[{name:"title",type:"text",help:'Título de la sección de FAQ (h2). Si se deja vacío, por defecto muestra "Preguntas frecuentes"',label:"Texto del título",mandatory:!1,example_value:"Preguntas frecuentes sobre GenIA-L"},{name:"items",type:"list",help:"Listado de preguntas y respuestas. Cada pregunta se muestra como un botón expandible. Al hacer click en una pregunta se abre su respuesta y se cierran las demás automáticamente (comportamiento exclusivo, solo una visible a la vez). Un segundo click en la pregunta abierta la cierra",label:"Listado de FAQs",mandatory:!1,items:{type:"object",fields:[{name:"question",type:"text",help:"Texto de la pregunta (aparece como botón). No admite HTML",label:"Texto de la pregunta",example_value:"¿Qué es GenIA-L y para qué sirve?"},{name:"answer",type:"text",help:"Texto de la respuesta que aparece al abrir la pregunta. NO admite HTML (se renderiza como texto plano dentro de un <p>)",label:"Texto de la respuesta",example_value:"GenIA-L es la plataforma de inteligencia artificial jurídica de Lefebvre que automatiza la redacción de contratos, la búsqueda de jurisprudencia y el análisis de documentos legales"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"FooterCorporativo",category:"Footer",name:"Footer Corporativo",description:"Footer de prueba en Astro",framework:"Astro",priority:1,tags:["footer"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Footer_2025_Napoles",category:"Footer",name:"Footer corporativo Lefebvre GenIA-L 2025",description:"Footer corporativo con 4 columnas de enlaces (Lefebvre, Explora GenIA-L, Portales, Tienda), logo, textos legales, 5 iconos de redes sociales y separador final. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["footer","genial"],fields:[{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena ÚNICAMENTE a los enlaces de la columna "Explora GenIA-L" (Casos reales, Conoce GenIA-L, Contacto). El resto de enlaces (Lefebvre, Portales Lefebvre, Tienda Online, RRSS y legales) están hardcodeados a dominios absolutos y no dependen de este campo. Déjalo vacío si los enlaces GenIA-L deben partir de la raíz del sitio',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Nara",category:"Formulario",name:"Formulario de suscripción al blog GenIA-L 2025",description:"Formulario de suscripción con título, descripción, campo de email y botón para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","formulario","suscripcion","genial"],fields:[{name:"title",type:"text",help:'Título del formulario (h2). Si se deja vacío, por defecto muestra "Suscríbete ahora". No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Suscríbete al blog de GenIA-L"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. Si se deja vacía, por defecto muestra "Recibe novedades de artículos que se publican en el blog". No admite HTML',label:"Texto de la descripción",mandatory:!1,example_value:"Recibe mensualmente los últimos artículos sobre legaltech, IA jurídica y transformación digital en el sector legal"},{name:"placeholder",type:"text",help:'Texto placeholder del campo de email (desaparece al escribir). Por defecto "Email"',label:"Placeholder del campo",mandatory:!1,example_value:"Tu correo electrónico"},{name:"buttonText",type:"text",help:'Texto del botón de envío. Por defecto "Suscríbete". También se usa como aria-label del botón',label:"Texto del botón",mandatory:!1,example_value:"Suscríbete"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Seul",category:"Formulario",name:"Formulario LF2 con imagen lateral GenIA-L 2025",description:"Formulario de contacto o captación de leads integrado con la plataforma LF2 de Lefebvre. El formulario se inyecta dinámicamente en el componente. Incluye imagen lateral opcional para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","formulario","lf2","genial"],fields:[{name:"title",type:"text",help:'Título (h2) del bloque. IMPORTANTE: solo se muestra si "Mostrar imagen" está desactivado. Con imagen activada, el título NO aparece. No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Solicita información sobre GenIA-L"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. IMPORTANTE: igual que el título, solo se muestra si "Mostrar imagen" está desactivado. No admite HTML',label:"Texto de la descripción",mandatory:!1,example_value:"Uno de nuestros comerciales se pondrá en contacto contigo en menos de 24 horas"},{name:"imageSrc",type:"image",help:'URL de la imagen lateral. Solo se renderiza si "Mostrar imagen" está activado',label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-3-4.png"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2 (incluye normalmente un código numérico + nombre). Este valor se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto. Si es erróneo, el formulario no se renderizará",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Solicita info GenIA-L"},{name:"businessAction",type:"text",help:"Identificador de acción comercial de LF2 que se asociará al lead. Si se deja vacío, no se envía acción comercial (el formulario funciona pero sin tracking de acción específica)",label:"businessAction del formulario en LF2",mandatory:!1,example_value:"27925"},{name:"orientation",type:"select",help:'Posición del formulario respecto a la imagen/texto. "Izquierda" coloca el formulario a la izquierda (flex-row); "Derecha" lo coloca a la derecha (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"loading",type:"select",help:'Tipo de carga de la imagen lateral (solo aplica si "Mostrar imagen" está activado). "eager" si el formulario está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showImage",type:"boolean",help:"Alterna entre dos layouts. ACTIVADO: muestra una imagen lateral grande junto al formulario (sin título ni descripción visibles). DESACTIVADO: muestra título y descripción (columna 1/3) + formulario (columna 1/2), sin imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Teruel",category:"Formulario",name:"Tarjeta con formulario LF2 en popup GenIA-L 2025",description:"Tarjeta horizontal con imagen + texto + botones. El botón secundario abre un popup con título, imagen, descripción y formulario LF2 inyectado dinámicamente. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","card","imagen","popup","formulario","lf2","genial"],fields:[{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y el texto a la derecha (flex-row). "Derecha" invierte el orden (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],mandatory:!1,example_value:"left"},{name:"bottomBorder",type:"boolean",help:"Activa/desactiva el borde inferior separador. Útil cuando se usan varias tarjetas seguidas (p. ej. dentro de Contenido_2026_Michigan) para poner borde en todas excepto la última",label:"Mostrar borde inferior",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"title",type:"text",help:"Título de la tarjeta (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML. También se usa como alt de la imagen principal",label:"Texto del título",mandatory:!1,example_value:"Automatización de contratos con IA"},{name:"description",type:"text",help:"Descripción de la tarjeta. Admite HTML (útil para listas, negritas, etc.). Se renderiza siempre",label:"Texto de la descripción",mandatory:!1,example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas"},{name:"imageSrc",type:"image",help:"URL de la imagen principal de la tarjeta (lateral al texto)",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"showBtn",type:"boolean",help:'Activa/desactiva el botón primario (enlace externo). Recuerda: también requiere "Url del enlace" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:'Texto del botón primario (enlace). Solo se muestra si "Mostrar botón" está activado Y "Url del enlace" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario (se abre en la misma pestaña). Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Url del enlace",mandatory:!1,example_value:"/genia-l/automatizacion-contratos"},{name:"showBtnModal",type:"boolean",help:"Activa/desactiva el botón que abre el popup con el formulario LF2. Si está activado, al hacer click se abre un modal con título, imagen, descripción y formulario LF2 inyectado dinámicamente",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el popup. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en PDF"},{name:"titleModal",type:"text",help:"Título (h2) que aparece dentro del popup, junto al formulario LF2",label:"Texto del título modal",mandatory:!1,example_value:"Descarga la guía de automatización jurídica"},{name:"subtitleModal",type:"text",help:'Subtítulo del modal. AVISO: este campo está DECLARADO en el carbin pero en el .astro está comentado (L76), por lo que NO se renderiza actualmente. Déjalo vacío o usa "Descripción del modal"',label:"Texto del subtítulo modal (no se usa)",mandatory:!1,example_value:""},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del popup, antes del formulario LF2. Admite HTML",label:"Texto de la descripción modal",mandatory:!1,example_value:"Déjanos tus datos y te enviaremos el whitepaper de 40 páginas con los casos de uso más relevantes"},{name:"imageModal",type:"image",help:"Imagen que aparece en la columna izquierda del popup (la portada de la guía, por ejemplo)",label:"Src de la imagen modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del popup para accesibilidad",label:"Alt de la imagen modal",mandatory:!1,example_value:"Portada de la guía de automatización jurídica"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2. Se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto dentro del popup. Si es erróneo, el formulario no se renderizará",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Descarga Guía Automatización"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2026_Wichita",category:"Formulario",name:"Formulario de GenIA-L 2026",description:"Formulario para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","video","genial"],fields:[{name:"title",type:"text",help:"Introduce el título del formulario",label:"Texto del título",mandatory:!1,example_value:"Pruébalo ya"},{name:"description",type:"text",help:"Introduce la descripción del formulario",label:"Texto de la descripción",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"imageSrc",type:"image",help:"Introduce la URL de la imagen del formulario",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-3-4.png"},{name:"lf2FormTitle",type:"text",help:"Introduce el título del formulario en LF2",label:"Título del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Vamos Más Allá"},{name:"businessAction",type:"text",help:"Introduce el identificador businessAction del formulario en LF2",label:"businessAction del formulario en LF2",mandatory:!1,example_value:"27925"},{name:"orientation",type:"select",help:"Selecciona la posición de la imagen respecto al formulario",label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"loading",type:"select",help:"Selecciona el tipo de carga de la imagen: diferida o inmediata",label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showImage",type:"boolean",help:"Indica si se debe mostrar la imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"GeometricShapeCard",category:"Imagen",name:"Tarjeta con figura geométrica",description:"Tarjeta con figura geométrica y botón de leer más.",framework:"Astro",tags:["card","interactivo"],fields:[{name:"title",type:"text",label:"Título",mandatory:!0,example_value:"Título de la tarjeta"},{name:"mainContent",type:"textArea",label:"Contenido principal (HTML)",mandatory:!0,example_value:"<p>Este es el <b>contenido</b> principal.</p>"},{name:"secondaryContent",type:"textArea",label:"Contenido secundario (HTML) que aparece al leer más",mandatory:!1,example_value:"<p>Este es el contenido secundario.</p>"},{name:"imageSrc",type:"image",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"figure",type:"select",label:"Tipo de figura",options:["Trapeze","Trapeze2","Leaf","Sphere"],options_labels:["Trapecio","Trapecio II","Hoja de parra","Esfera"],example_value:"Trapeze"},{name:"orientation",type:"select",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"gradiantIndex",type:"select",label:"Gradiante",options:[0,1,2,3,4],options_labels:["Lefebvre España","Lefebvre Sarrut","Lefebvre Italia","Lefebvre Toovalu","Bandera de España"],example_value:0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"HeaderCorporativo",category:"Cabecera",name:"Header Corporativo",description:"Header de prueba en Astro",framework:"Astro",priority:1,tags:["header","navegación"],fields:[{name:"logo",type:"text",label:"URL del logo",mandatory:!1,example_value:"https://espacioasesoria.com/wp-content/themes/lf-espacioasesoria-theme/src/images/logo-espacio-asesoria.png"},{name:"alt",type:"text",label:"Texto alternativo",mandatory:!1,example_value:"https://lefebvre.es"},{name:"showLefebvreLogo",type:"boolean",label:"Mostrar logo de Lefebvre",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Hero_2025_Benidorm",category:"Contenido",name:"Hero de artículo de blog GenIA-L 2025",description:"Cabecera de artículo con fecha, título, descripción, imagen grande, autor y tags. Tiene dos variantes de layout (enriquecido horizontal o estándar vertical) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["banner","imagen","contenido","blog","hero","genial"],fields:[{name:"title",type:"text",help:"Título principal del artículo (h1). Admite HTML (se pasa al componente Repetidor_2025_Jaen)",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal: de la teoría a la práctica"},{name:"description",type:"text",help:"Descripción o entradilla del artículo. Admite HTML. Aparece debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Analizamos los casos reales en los que la IA generativa está transformando la labor diaria de los despachos de abogados"},{name:"image",type:"image",help:"Imagen principal del hero. Se usa como background-image con background-size: cover",label:"Imagen de fondo",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"date",type:"text",help:'Fecha de publicación del artículo. Se muestra en mayúsculas con espaciado entre letras (tracking wide). Acepta cualquier formato de texto (p. ej. "15 enero 2026" o "2026-01-15")',label:"Fecha de publicación",mandatory:!1,example_value:"15 enero 2026"},{name:"nameAuthor",type:"text",help:"Nombre del autor del artículo. Se pasa al componente Author_2025_Algarve",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Cargo o profesión del autor que aparece debajo del nombre",label:"Cargo del autor",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"imageAuthor",type:"image",help:"Foto de perfil del autor (imagen cuadrada, se mostrará con el borde que defina Author_2025_Algarve)",label:"Imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la foto del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"enriquecido",type:"boolean",help:"Alterna entre dos layouts del hero. ACTIVADO (enriquecido): layout horizontal con texto a la izquierda (fecha, título h1-blog-postenriquecido alineado a la izquierda, autor a ancho completo y tags) e imagen de fondo a la derecha (mitad del ancho). DESACTIVADO (estándar): layout vertical con texto centrado arriba (fecha, título h1-blog-post centrado, autor compacto y tags) e imagen de fondo grande debajo (530px de alto)",label:"Layout enriquecido",mandatory:!1,options:["false","true"],options_labels:["Estándar (vertical)","Enriquecido (horizontal)"],example_value:!0},{name:"minutes",type:"text",help:"Minutos estimados de lectura del artículo (sin unidades, solo el número). Se pasa al componente Tiempo_2025_Londres a través de Author_2025_Algarve. Si se deja vacío, el indicador de tiempo de lectura NO se muestra",label:"Minutos de lectura",mandatory:!1,example_value:"8"},{name:"itemsTagPost",type:"list",help:"Listado de tags/etiquetas del artículo. Cada tag se renderiza como una pastilla con el componente Tag_2025_Bolonia. Si se deja vacío, no aparecen tags",label:"Tags del artículo",mandatory:!1,items:{type:"object",fields:[{name:"tag",type:"text",help:"Nombre del tag (texto corto, típicamente una categoría jurídica o temática)",label:"Nombre del tag",example_value:"IA Jurídica"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Hero_2026_Benidorm",category:"Contenido",name:"Hero de artículo de blog GenIA-L 2026",description:"Cabecera de artículo con fecha, título, descripción, imagen grande, autor y tags. Tiene dos variantes de layout (enriquecido horizontal o estándar vertical) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["banner","imagen","contenido","blog","hero","genial"],fields:[{name:"title",type:"text",help:"Título principal del artículo (h1). Admite HTML (se pasa al componente Contenido_2026_Jaen)",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal: de la teoría a la práctica"},{name:"description",type:"text",help:"Descripción o entradilla del artículo. Admite HTML. Aparece debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Analizamos los casos reales en los que la IA generativa está transformando la labor diaria de los despachos de abogados"},{name:"image",type:"image",help:"Imagen principal del hero. Se usa como background-image con background-size: cover",label:"Imagen de fondo",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"date",type:"text",help:'Fecha de publicación del artículo. Se muestra en mayúsculas con espaciado entre letras (tracking wide). Acepta cualquier formato de texto (p. ej. "15 enero 2026" o "2026-01-15")',label:"Fecha de publicación",mandatory:!1,example_value:"15 enero 2026"},{name:"nameAuthor",type:"text",help:"Nombre del autor del artículo. Se pasa al componente Author_2025_Algarve",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Cargo o profesión del autor que aparece debajo del nombre",label:"Cargo del autor",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"imageAuthor",type:"image",help:"Foto de perfil del autor. En layout enriquecido se muestra a 48px (fijo); en layout estándar usa el tamaño por defecto del componente Author_2025_Algarve (240px)",label:"Imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la foto del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"enriquecido",type:"boolean",help:"Alterna entre dos layouts del hero. ACTIVADO (enriquecido): layout horizontal con texto a la izquierda (fecha, título h1-blog-postenriquecido alineado a la izquierda, autor a ancho completo con imagen de 48px y tags) e imagen de fondo a la derecha (mitad del ancho). DESACTIVADO (estándar): layout vertical con texto centrado arriba (fecha, título h1-blog-post centrado, autor compacto y tags) e imagen de fondo grande debajo (530px de alto con esquinas redondeadas)",label:"Layout enriquecido",mandatory:!1,options:["false","true"],options_labels:["Estándar (vertical)","Enriquecido (horizontal)"],example_value:!0},{name:"minutes",type:"text",help:"Minutos estimados de lectura del artículo (sin unidades, solo el número). Se pasa al componente Tiempo_2025_Londres a través de Author_2025_Algarve. Si se deja vacío, el indicador de tiempo de lectura NO se muestra",label:"Minutos de lectura",mandatory:!1,example_value:"8"},{name:"itemsTagPost",type:"list",help:"Listado de tags/etiquetas del artículo. Cada tag se renderiza como una pastilla con el componente Tag_2025_Bolonia. Si se deja vacío, no aparecen tags",label:"Tags del artículo",mandatory:!1,items:{type:"object",fields:[{name:"tag",type:"text",help:"Nombre del tag (texto corto, típicamente una categoría jurídica o temática)",label:"Nombre del tag",example_value:"IA Jurídica"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"ImageTextSimple",category:"Imagen",name:"Contenido con imagen/video simple",description:"Contenido con imagen/video simple, título y texto",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",label:"Título",mandatory:!0,example_value:"Soluciones felinas para un mundo mejor"},{name:"description",type:"textArea",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p>En Lefebvre buscamos ofrecer a nuestros gatos una <b>vida mejor</b>.
|
|
30
|
+
**/let W6;const zk=typeof window<"u"&&window.trustedTypes;if(zk)try{W6=zk.createPolicy("vue",{createHTML:t=>t})}catch{}const Vk=W6?t=>W6.createHTML(t):t=>t,MH="http://www.w3.org/2000/svg",$H="http://www.w3.org/1998/Math/MathML",xs=typeof document<"u"?document:null,Zk=xs&&xs.createElement("template"),Bk={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,o)=>{const r=e==="svg"?xs.createElementNS(MH,t):e==="mathml"?xs.createElementNS($H,t):n?xs.createElement(t,{is:n}):xs.createElement(t);return t==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:t=>xs.createTextNode(t),createComment:t=>xs.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>xs.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,o,r,a){const i=n?n.previousSibling:e.lastChild;if(r&&(r===a||r.nextSibling))for(;e.insertBefore(r.cloneNode(!0),n),!(r===a||!(r=r.nextSibling)););else{Zk.innerHTML=Vk(o==="svg"?`<svg>${t}</svg>`:o==="mathml"?`<math>${t}</math>`:t);const l=Zk.content;if(o==="svg"||o==="mathml"){const s=l.firstChild;for(;s.firstChild;)l.appendChild(s.firstChild);l.removeChild(s)}e.insertBefore(l,n)}return[i?i.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}},T0="transition",tm="animation",_d=Symbol("_vtc"),Fk={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Hk=O0({},f6,Fk),LH=(t=>(t.displayName="Transition",t.props=Hk,t))((t,{slots:e})=>_3(AS,Xk(t),e)),i1=(t,e=[])=>{q2(t)?t.forEach(n=>n(...e)):t&&t(...e)},Uk=t=>t?q2(t)?t.some(e=>e.length>1):t.length>1:!1;function Xk(t){const e={};for(const U in t)U in Fk||(e[U]=t[U]);if(t.css===!1)return e;const{name:n="v",type:o,duration:r,enterFromClass:a=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=a,appearActiveClass:u=i,appearToClass:p=l,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=t,C=AH(r),k=C&&C[0],M=C&&C[1],{onBeforeEnter:L,onEnter:P,onEnterCancelled:w,onLeave:A,onLeaveCancelled:N,onBeforeAppear:F=L,onAppear:Z=P,onAppearCancelled:K=w}=e,X=(U,te,de,Ve)=>{U._enterCancelled=Ve,E0(U,te?p:l),E0(U,te?u:i),de&&de()},ne=(U,te)=>{U._isLeaving=!1,E0(U,m),E0(U,v),E0(U,b),te&&te()},Y=U=>(te,de)=>{const Ve=U?Z:P,ge=()=>X(te,U,de);i1(Ve,[te,ge]),Wk(()=>{E0(te,U?s:a),$l(te,U?p:l),Uk(Ve)||qk(te,o,k,ge)})};return O0(e,{onBeforeEnter(U){i1(L,[U]),$l(U,a),$l(U,i)},onBeforeAppear(U){i1(F,[U]),$l(U,s),$l(U,u)},onEnter:Y(!1),onAppear:Y(!0),onLeave(U,te){U._isLeaving=!0;const de=()=>ne(U,te);$l(U,m),U._enterCancelled?($l(U,b),G6(U)):(G6(U),$l(U,b)),Wk(()=>{U._isLeaving&&(E0(U,m),$l(U,v),Uk(A)||qk(U,o,M,de))}),i1(A,[U,de])},onEnterCancelled(U){X(U,!1,void 0,!0),i1(w,[U])},onAppearCancelled(U){X(U,!0,void 0,!0),i1(K,[U])},onLeaveCancelled(U){ne(U),i1(N,[U])}})}function AH(t){if(t==null)return null;if(B6(t))return[q6(t.enter),q6(t.leave)];{const e=q6(t);return[e,e]}}function q6(t){return X6(t)}function $l(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t[_d]||(t[_d]=new Set)).add(e)}function E0(t,e){e.split(/\s+/).forEach(o=>o&&t.classList.remove(o));const n=t[_d];n&&(n.delete(e),n.size||(t[_d]=void 0))}function Wk(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let PH=0;function qk(t,e,n,o){const r=t._endId=++PH,a=()=>{r===t._endId&&o()};if(n!=null)return setTimeout(a,n);const{type:i,timeout:l,propCount:s}=Gk(t,e);if(!i)return o();const u=i+"end";let p=0;const m=()=>{t.removeEventListener(u,b),a()},b=v=>{v.target===t&&++p>=s&&m()};setTimeout(()=>{p<s&&m()},l+1),t.addEventListener(u,b)}function Gk(t,e){const n=window.getComputedStyle(t),o=C=>(n[C]||"").split(", "),r=o(`${T0}Delay`),a=o(`${T0}Duration`),i=Yk(r,a),l=o(`${tm}Delay`),s=o(`${tm}Duration`),u=Yk(l,s);let p=null,m=0,b=0;e===T0?i>0&&(p=T0,m=i,b=a.length):e===tm?u>0&&(p=tm,m=u,b=s.length):(m=Math.max(i,u),p=m>0?i>u?T0:tm:null,b=p?p===T0?a.length:s.length:0);const v=p===T0&&/\b(?:transform|all)(?:,|$)/.test(o(`${T0}Property`).toString());return{type:p,timeout:m,propCount:b,hasTransform:v}}function Yk(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max(...e.map((n,o)=>Kk(n)+Kk(t[o])))}function Kk(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function G6(t){return(t?t.ownerDocument:document).body.offsetHeight}function NH(t,e,n){const o=t[_d];o&&(e=(e?[e,...o]:[...o]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}const R3=Symbol("_vod"),Jk=Symbol("_vsh"),nm={name:"show",beforeMount(t,{value:e},{transition:n}){t[R3]=t.style.display==="none"?"":t.style.display,n&&e?n.beforeEnter(t):om(t,e)},mounted(t,{value:e},{transition:n}){n&&e&&n.enter(t)},updated(t,{value:e,oldValue:n},{transition:o}){!e!=!n&&(o?e?(o.beforeEnter(t),om(t,!0),o.enter(t)):o.leave(t,()=>{om(t,!1)}):om(t,e))},beforeUnmount(t,{value:e}){om(t,e)}};function om(t,e){t.style.display=e?t[R3]:"none",t[Jk]=!e}function _H(){nm.getSSRProps=({value:t})=>{if(!t)return{style:{display:"none"}}}}const eT=Symbol("");function jH(t){const e=$2();if(!e)return;const n=e.ut=(r=t(e.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${e.uid}"]`)).forEach(a=>Q3(a,r))},o=()=>{const r=t(e.proxy);e.ce?Q3(e.ce,r):Y6(e.subTree,r),n(r)};y6(()=>{Ip(o)}),Ci(()=>{vi(o,fH,{flush:"post"});const r=new MutationObserver(o);r.observe(e.subTree.el.parentNode,{childList:!0}),Ld(()=>r.disconnect())})}function Y6(t,e){if(t.shapeFlag&128){const n=t.suspense;t=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Y6(n.activeBranch,e)})}for(;t.component;)t=t.component.subTree;if(t.shapeFlag&1&&t.el)Q3(t.el,e);else if(t.type===dn)t.children.forEach(n=>Y6(n,e));else if(t.type===o1){let{el:n,anchor:o}=t;for(;n&&(Q3(n,e),n!==o);)n=n.nextSibling}}function Q3(t,e){if(t.nodeType===1){const n=t.style;let o="";for(const r in e){const a=EH(e[r]);n.setProperty(`--${r}`,a),o+=`--${r}: ${a};`}n[eT]=o}}const IH=/(?:^|;)\s*display\s*:/;function RH(t,e,n){const o=t.style,r=Nd(n);let a=!1;if(n&&!r){if(e)if(Nd(e))for(const i of e.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&D3(o,l,"")}else for(const i in e)n[i]==null&&D3(o,i,"");for(const i in n)i==="display"&&(a=!0),D3(o,i,n[i])}else if(r){if(e!==n){const i=o[eT];i&&(n+=";"+i),o.cssText=n,a=IH.test(n)}}else e&&t.removeAttribute("style");R3 in t&&(t[R3]=a?o.display:"",t[Jk]&&(o.display="none"))}const tT=/\s*!important$/;function D3(t,e,n){if(q2(n))n.forEach(o=>D3(t,e,o));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const o=QH(t,e);tT.test(n)?t.setProperty(S0(o),n.replace(tT,""),"important"):t[o]=n}}const nT=["Webkit","Moz","ms"],K6={};function QH(t,e){const n=K6[e];if(n)return n;let o=X2(e);if(o!=="filter"&&o in t)return K6[e]=o;o=OH(o);for(let r=0;r<nT.length;r++){const a=nT[r]+o;if(a in t)return K6[e]=a}return e}const oT="http://www.w3.org/1999/xlink";function rT(t,e,n,o,r,a=kH(e)){o&&e.startsWith("xlink:")?n==null?t.removeAttributeNS(oT,e.slice(6,e.length)):t.setAttributeNS(oT,e,n):n==null||a&&!Dk(n)?t.removeAttribute(e):t.setAttribute(e,a?"":Z6(n)?String(n):n)}function aT(t,e,n,o,r){if(e==="innerHTML"||e==="textContent"){n!=null&&(t[e]=e==="innerHTML"?Vk(n):n);return}const a=t.tagName;if(e==="value"&&a!=="PROGRESS"&&!a.includes("-")){const l=a==="OPTION"?t.getAttribute("value")||"":t.value,s=n==null?t.type==="checkbox"?"on":"":String(n);(l!==s||!("_value"in t))&&(t.value=s),n==null&&t.removeAttribute(e),t._value=n;return}let i=!1;if(n===""||n==null){const l=typeof t[e];l==="boolean"?n=Dk(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{t[e]=n}catch{}i&&t.removeAttribute(r||e)}function ws(t,e,n,o){t.addEventListener(e,n,o)}function DH(t,e,n,o){t.removeEventListener(e,n,o)}const iT=Symbol("_vei");function zH(t,e,n,o,r=null){const a=t[iT]||(t[iT]={}),i=a[e];if(o&&i)i.value=o;else{const[l,s]=VH(e);if(o){const u=a[e]=FH(o,r);ws(t,l,u,s)}else i&&(DH(t,l,i,s),a[e]=void 0)}}const lT=/(?:Once|Passive|Capture)$/;function VH(t){let e;if(lT.test(t)){e={};let o;for(;o=t.match(lT);)t=t.slice(0,t.length-o[0].length),e[o[0].toLowerCase()]=!0}return[t[2]===":"?t.slice(3):S0(t.slice(2)),e]}let J6=0;const ZH=Promise.resolve(),BH=()=>J6||(ZH.then(()=>J6=0),J6=Date.now());function FH(t,e){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;gi(HH(o,n.value),e,5,[o])};return n.value=t,n.attached=BH(),n}function HH(t,e){if(q2(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(o=>r=>!r._stopped&&o&&o(r))}else return e}const sT=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,cT=(t,e,n,o,r,a)=>{const i=r==="svg";e==="class"?NH(t,o,i):e==="style"?RH(t,n,o):bH(e)?gH(e)||zH(t,e,n,o,a):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):UH(t,e,o,i))?(aT(t,e,o),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&rT(t,e,o,i,a,e!=="value")):t._isVueCE&&(/[A-Z]/.test(e)||!Nd(o))?aT(t,j3(e),o,a,e):(e==="true-value"?t._trueValue=o:e==="false-value"&&(t._falseValue=o),rT(t,e,o,i))};function UH(t,e,n,o){if(o)return!!(e==="innerHTML"||e==="textContent"||e in t&&sT(e)&&Rk(n));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const r=t.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return sT(e)&&Nd(n)?!1:e in t}const dT={};function uT(t,e,n){let o=T2(t,e);Qk(o)&&(o=O0({},o,e));class r extends z3{constructor(i){super(o,i,n)}}return r.def=o,r}const XH=((t,e)=>uT(t,e,$T)),WH=typeof HTMLElement<"u"?HTMLElement:class{};class z3 extends WH{constructor(e,n={},o=lm){super(),this._def=e,this._props=n,this._createApp=o,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&o!==lm?this._root=this.shadowRoot:e.shadowRoot!==!1?(this.attachShadow(O0({},e.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let e=this;for(;e=e&&(e.parentNode||e.host);)if(e instanceof z3){this._parent=e;break}this._instance||(this._resolved?this._mount(this._def):e&&e._pendingResolve?this._pendingResolve=e._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(e=this._parent){e&&(this._instance.parent=e._instance,this._inheritParentContext(e))}_inheritParentContext(e=this._parent){e&&this._app&&Object.setPrototypeOf(this._app._context.provides,e._instance.provides)}disconnectedCallback(){this._connected=!1,Sd(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(e){for(const n of e)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let o=0;o<this.attributes.length;o++)this._setAttr(this.attributes[o].name);this._ob=new MutationObserver(this._processMutations.bind(this)),this._ob.observe(this,{attributes:!0});const e=(o,r=!1)=>{this._resolved=!0,this._pendingResolve=void 0;const{props:a,styles:i}=o;let l;if(a&&!q2(a))for(const s in a){const u=a[s];(u===Number||u&&u.type===Number)&&(s in this._props&&(this._props[s]=X6(this._props[s])),(l||(l=Object.create(null)))[j3(s)]=!0)}this._numberProps=l,this._resolveProps(o),this.shadowRoot&&this._applyStyles(i),this._mount(o)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(o=>{o.configureApp=this._def.configureApp,e(this._def=o,!0)}):e(this._def)}_mount(e){this._app=this._createApp(e),this._inheritParentContext(),e.configureApp&&e.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const o in n)yH(this,o)||Object.defineProperty(this,o,{get:()=>la(n[o])})}_resolveProps(e){const{props:n}=e,o=q2(n)?n:Object.keys(n||{});for(const r of Object.keys(this))r[0]!=="_"&&o.includes(r)&&this._setProp(r,this[r]);for(const r of o.map(j3))Object.defineProperty(this,r,{get(){return this._getProp(r)},set(a){this._setProp(r,a,!0,!this._patching)}})}_setAttr(e){if(e.startsWith("data-v-"))return;const n=this.hasAttribute(e);let o=n?this.getAttribute(e):dT;const r=j3(e);n&&this._numberProps&&this._numberProps[r]&&(o=X6(o)),this._setProp(r,o,!1,!0)}_getProp(e){return this._props[e]}_setProp(e,n,o=!0,r=!1){if(n!==this._props[e]&&(this._dirty=!0,n===dT?delete this._props[e]:(this._props[e]=n,e==="key"&&this._app&&(this._app._ceVNode.key=n)),r&&this._instance&&this._update(),o)){const a=this._ob;a&&(this._processMutations(a.takeRecords()),a.disconnect()),n===!0?this.setAttribute(S0(e),""):typeof n=="string"||typeof n=="number"?this.setAttribute(S0(e),n+""):n||this.removeAttribute(S0(e)),a&&a.observe(this,{attributes:!0})}}_update(){const e=this._createVNode();this._app&&(e.appContext=this._app._context),MT(e,this._root)}_createVNode(){const e={};this.shadowRoot||(e.onVnodeMounted=e.onVnodeUpdated=this._renderSlots.bind(this));const n=Kn(this._def,O0(e,this._props));return this._instance||(n.ce=o=>{this._instance=o,o.ce=this,o.isCE=!0;const r=(a,i)=>{this.dispatchEvent(new CustomEvent(a,Qk(i[0])?O0({detail:i},i[0]):{detail:i}))};o.emit=(a,...i)=>{r(a,i),S0(a)!==a&&r(S0(a),i)},this._setParent()}),n}_applyStyles(e,n){if(!e)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const o=this._nonce;for(let r=e.length-1;r>=0;r--){const a=document.createElement("style");o&&a.setAttribute("nonce",o),a.textContent=e[r],this.shadowRoot.prepend(a)}}_parseSlots(){const e=this._slots={};let n;for(;n=this.firstChild;){const o=n.nodeType===1&&n.getAttribute("slot")||"default";(e[o]||(e[o]=[])).push(n),this.removeChild(n)}}_renderSlots(){const e=this._getSlots(),n=this._instance.type.__scopeId;for(let o=0;o<e.length;o++){const r=e[o],a=r.getAttribute("name")||"default",i=this._slots[a],l=r.parentNode;if(i)for(const s of i){if(n&&s.nodeType===1){const u=n+"-s",p=document.createTreeWalker(s,1);s.setAttribute(u,"");let m;for(;m=p.nextNode();)m.setAttribute(u,"")}l.insertBefore(s,r)}else for(;r.firstChild;)l.insertBefore(r.firstChild,r);l.removeChild(r)}}_getSlots(){const e=[this];this._teleportTargets&&e.push(...this._teleportTargets);const n=new Set;for(const o of e){const r=o.querySelectorAll("slot");for(let a=0;a<r.length;a++)n.add(r[a])}return Array.from(n)}_injectChildStyle(e){this._applyStyles(e.styles,e)}_beginPatch(){this._patching=!0,this._dirty=!1}_endPatch(){this._patching=!1,this._dirty&&this._instance&&this._update()}_hasShadowRoot(){return this._def.shadowRoot!==!1}_removeChildStyle(e){}}function pT(t){const e=$2(),n=e&&e.ce;return n||null}function qH(){const t=pT();return t&&t.shadowRoot}function GH(t="$style"){{const e=$2();if(!e)return V6;const n=e.type.__cssModules;if(!n)return V6;const o=n[t];return o||V6}}const mT=new WeakMap,hT=new WeakMap,V3=Symbol("_moveCb"),fT=Symbol("_enterCb"),YH=(t=>(delete t.props.mode,t))({name:"TransitionGroup",props:O0({},Hk,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=$2(),o=h6();let r,a;return O3(()=>{if(!r.length)return;const i=t.moveClass||`${t.name||"v"}-move`;if(!tU(r[0].el,n.vnode.el,i)){r=[];return}r.forEach(KH),r.forEach(JH);const l=r.filter(eU);G6(n.vnode.el),l.forEach(s=>{const u=s.el,p=u.style;$l(u,i),p.transform=p.webkitTransform=p.transitionDuration="";const m=u[V3]=b=>{b&&b.target!==u||(!b||b.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",m),u[V3]=null,E0(u,i))};u.addEventListener("transitionend",m)}),r=[]}),()=>{const i=po(t),l=Xk(i);let s=i.tag||dn;if(r=[],a)for(let u=0;u<a.length;u++){const p=a[u];p.el&&p.el instanceof Element&&(r.push(p),bs(p,Td(p,l,o,n)),mT.set(p,bT(p.el)))}a=e.default?b3(e.default()):[];for(let u=0;u<a.length;u++){const p=a[u];p.key!=null&&bs(p,Td(p,l,o,n))}return Kn(s,null,a)}}});function KH(t){const e=t.el;e[V3]&&e[V3](),e[fT]&&e[fT]()}function JH(t){hT.set(t,bT(t.el))}function eU(t){const e=mT.get(t),n=hT.get(t),o=e.left-n.left,r=e.top-n.top;if(o||r){const a=t.el,i=a.style,l=a.getBoundingClientRect();let s=1,u=1;return a.offsetWidth&&(s=l.width/a.offsetWidth),a.offsetHeight&&(u=l.height/a.offsetHeight),(!Number.isFinite(s)||s===0)&&(s=1),(!Number.isFinite(u)||u===0)&&(u=1),Math.abs(s-1)<.01&&(s=1),Math.abs(u-1)<.01&&(u=1),i.transform=i.webkitTransform=`translate(${o/s}px,${r/u}px)`,i.transitionDuration="0s",t}}function bT(t){const e=t.getBoundingClientRect();return{left:e.left,top:e.top}}function tU(t,e,n){const o=t.cloneNode(),r=t[_d];r&&r.forEach(l=>{l.split(/\s+/).forEach(s=>s&&o.classList.remove(s))}),n.split(/\s+/).forEach(l=>l&&o.classList.add(l)),o.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(o);const{hasTransform:i}=Gk(o);return a.removeChild(o),i}const M0=t=>{const e=t.props["onUpdate:modelValue"]||!1;return q2(e)?n=>SH(e,n):e};function nU(t){t.target.composing=!0}function gT(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const xi=Symbol("_assign");function vT(t,e,n){return e&&(t=t.trim()),n&&(t=U6(t)),t}const d2={created(t,{modifiers:{lazy:e,trim:n,number:o}},r){t[xi]=M0(r);const a=o||r.props&&r.props.type==="number";ws(t,e?"change":"input",i=>{i.target.composing||t[xi](vT(t.value,n,a))}),(n||a)&&ws(t,"change",()=>{t.value=vT(t.value,n,a)}),e||(ws(t,"compositionstart",nU),ws(t,"compositionend",gT),ws(t,"change",gT))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,oldValue:n,modifiers:{lazy:o,trim:r,number:a}},i){if(t[xi]=M0(i),t.composing)return;const l=(a||t.type==="number")&&!/^0\d/.test(t.value)?U6(t.value):t.value,s=e??"";l!==s&&(document.activeElement===t&&t.type!=="range"&&(o&&e===n||r&&t.value.trim()===s)||(t.value=s))}},l1={deep:!0,created(t,e,n){t[xi]=M0(n),ws(t,"change",()=>{const o=t._modelValue,r=jd(t),a=t.checked,i=t[xi];if(q2(o)){const l=I3(o,r),s=l!==-1;if(a&&!s)i(o.concat(r));else if(!a&&s){const u=[...o];u.splice(l,1),i(u)}}else if(em(o)){const l=new Set(o);a?l.add(r):l.delete(r),i(l)}else i(xT(t,a))})},mounted:yT,beforeUpdate(t,e,n){t[xi]=M0(n),yT(t,e,n)}};function yT(t,{value:e,oldValue:n},o){t._modelValue=e;let r;if(q2(e))r=I3(e,o.props.value)>-1;else if(em(e))r=e.has(o.props.value);else{if(e===n)return;r=k0(e,xT(t,!0))}t.checked!==r&&(t.checked=r)}const rm={created(t,{value:e},n){t.checked=k0(e,n.props.value),t[xi]=M0(n),ws(t,"change",()=>{t[xi](jd(t))})},beforeUpdate(t,{value:e,oldValue:n},o){t[xi]=M0(o),e!==n&&(t.checked=k0(e,o.props.value))}},G2={deep:!0,created(t,{value:e,modifiers:{number:n}},o){const r=em(e);ws(t,"change",()=>{const a=Array.prototype.filter.call(t.options,i=>i.selected).map(i=>n?U6(jd(i)):jd(i));t[xi](t.multiple?r?new Set(a):a:a[0]),t._assigning=!0,Sd(()=>{t._assigning=!1})}),t[xi]=M0(o)},mounted(t,{value:e}){CT(t,e)},beforeUpdate(t,e,n){t[xi]=M0(n)},updated(t,{value:e}){t._assigning||CT(t,e)}};function CT(t,e){const n=t.multiple,o=q2(e);if(!(n&&!o&&!em(e))){for(let r=0,a=t.options.length;r<a;r++){const i=t.options[r],l=jd(i);if(n)if(o){const s=typeof l;s==="string"||s==="number"?i.selected=e.some(u=>String(u)===String(l)):i.selected=I3(e,l)>-1}else i.selected=e.has(l);else if(k0(jd(i),e)){t.selectedIndex!==r&&(t.selectedIndex=r);return}}!n&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function jd(t){return"_value"in t?t._value:t.value}function xT(t,e){const n=e?"_trueValue":"_falseValue";return n in t?t[n]:e}const wT={created(t,e,n){Z3(t,e,n,null,"created")},mounted(t,e,n){Z3(t,e,n,null,"mounted")},beforeUpdate(t,e,n,o){Z3(t,e,n,o,"beforeUpdate")},updated(t,e,n,o){Z3(t,e,n,o,"updated")}};function OT(t,e){switch(t){case"SELECT":return G2;case"TEXTAREA":return d2;default:switch(e){case"checkbox":return l1;case"radio":return rm;default:return d2}}}function Z3(t,e,n,o,r){const i=OT(t.tagName,n.props&&n.props.type)[r];i&&i(t,e,n,o)}function oU(){d2.getSSRProps=({value:t})=>({value:t}),rm.getSSRProps=({value:t},e)=>{if(e.props&&k0(e.props.value,t))return{checked:!0}},l1.getSSRProps=({value:t},e)=>{if(q2(t)){if(e.props&&I3(t,e.props.value)>-1)return{checked:!0}}else if(em(t)){if(e.props&&t.has(e.props.value))return{checked:!0}}else if(t)return{checked:!0}},wT.getSSRProps=(t,e)=>{if(typeof e.type!="string")return;const n=OT(e.type.toUpperCase(),e.props&&e.props.type);if(n.getSSRProps)return n.getSSRProps(t,e)}}const rU=["ctrl","shift","alt","meta"],aU={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>rU.some(n=>t[`${n}Key`]&&!e.includes(n))},am=(t,e)=>{if(!t)return t;const n=t._withMods||(t._withMods={}),o=e.join(".");return n[o]||(n[o]=((r,...a)=>{for(let i=0;i<e.length;i++){const l=aU[e[i]];if(l&&l(r,e))return}return t(r,...a)}))},iU={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},lU=(t,e)=>{const n=t._withKeys||(t._withKeys={}),o=e.join(".");return n[o]||(n[o]=(r=>{if(!("key"in r))return;const a=S0(r.key);if(e.some(i=>i===a||iU[i]===a))return t(r)}))},ST=O0({patchProp:cT},Bk);let im,kT=!1;function TT(){return im||(im=hk(ST))}function ET(){return im=kT?im:fk(ST),kT=!0,im}const MT=((...t)=>{TT().render(...t)}),sU=((...t)=>{ET().hydrate(...t)}),lm=((...t)=>{const e=TT().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=AT(o);if(!r)return;const a=e._component;!Rk(a)&&!a.render&&!a.template&&(a.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,LT(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},e}),$T=((...t)=>{const e=ET().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=AT(o);if(r)return n(r,!0,LT(r))},e});function LT(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function AT(t){return Nd(t)?document.querySelector(t):t}let PT=!1;const cU=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:AS,BaseTransitionPropsValidators:f6,Comment:Nr,DeprecationTypes:mH,EffectScope:q8,ErrorCodes:SB,ErrorTypeStrings:lH,Fragment:dn,KeepAlive:KB,ReactiveEffect:kp,Static:o1,Suspense:VF,Teleport:MS,Text:w0,TrackOpTypes:GZ,Transition:LH,TransitionGroup:YH,TriggerOpTypes:YZ,VueElement:z3,assertNumber:OB,callWithAsyncErrorHandling:gi,callWithErrorHandling:Jc,camelize:X2,capitalize:s3,cloneVNode:Ml,compatUtils:pH,computed:sa,createApp:lm,createBlock:El,createCommentVNode:ln,createElementBlock:we,createElementVNode:V,createHydrationRenderer:fk,createPropsRestProxy:vF,createRenderer:hk,createSSRApp:$T,createSlots:oF,createStaticVNode:Ek,createTextVNode:wo,createVNode:Kn,customRef:JO,defineAsyncComponent:YB,defineComponent:T2,defineCustomElement:uT,defineEmits:sF,defineExpose:cF,defineModel:pF,defineOptions:dF,defineProps:lF,defineSSRCustomElement:XH,defineSlots:uF,devtools:sH,effect:vZ,effectScope:fZ,getCurrentInstance:$2,getCurrentScope:PO,getCurrentWatcher:KZ,getTransitionRawChildren:b3,guardReactiveProps:Tk,h:_3,handleError:e1,hasInjectionContext:AB,hydrate:sU,hydrateOnIdle:HB,hydrateOnInteraction:qB,hydrateOnMediaQuery:WB,hydrateOnVisible:XB,initCustomFormatter:rH,initDirectivesForSSR:()=>{PT||(PT=!0,oU(),_H())},inject:zp,isMemoSame:_k,isProxy:Ap,isReactive:hs,isReadonly:wl,isRef:Lr,isRuntimeOnly:JF,isShallow:k2,isVNode:ys,markRaw:YO,mergeDefaults:bF,mergeModels:gF,mergeProps:I6,nextTick:Sd,nodeOps:Bk,normalizeClass:Fo,normalizeProps:fB,normalizeStyle:W2,onActivated:QS,onBeforeMount:VS,onBeforeUnmount:Up,onBeforeUpdate:y6,onDeactivated:DS,onErrorCaptured:HS,onMounted:Ci,onRenderTracked:FS,onRenderTriggered:BS,onScopeDispose:bZ,onServerPrefetch:ZS,onUnmounted:Ld,onUpdated:O3,onWatcherCleanup:tS,openBlock:ve,patchProp:cT,popScopeId:$B,provide:gS,proxyRefs:i6,pushScopeId:MB,queuePostFlushCb:Ip,reactive:vd,readonly:n3,ref:rn,registerRuntimeCompiler:KF,render:MT,renderList:Vo,renderSlot:rF,resolveComponent:US,resolveDirective:nF,resolveDynamicComponent:tF,resolveFilter:uH,resolveTransitionHooks:Td,setBlockTracking:Kp,setDevtoolsHook:cH,setTransitionHooks:bs,shallowReactive:GO,shallowReadonly:QZ,shallowRef:a6,ssrContextKey:vS,ssrUtils:dH,stop:yZ,toDisplayString:Wt,toHandlerKey:_p,toHandlers:aF,toRaw:po,toRef:XZ,toRefs:FZ,toValue:VZ,transformVNodeArgs:XF,triggerRef:zZ,unref:la,useAttrs:fF,useCssModule:GH,useCssVars:jH,useHost:pT,useId:RB,useModel:EF,useSSRContext:yS,useShadowRoot:qH,useSlots:hF,useTemplateRef:QB,useTransitionState:h6,vModelCheckbox:l1,vModelDynamic:wT,vModelRadio:rm,vModelSelect:G2,vModelText:d2,vShow:nm,version:jk,warn:iH,watch:vi,watchEffect:PB,watchPostEffect:NB,watchSyncEffect:CS,withAsyncContext:yF,withCtx:Dp,withDefaults:mF,withDirectives:So,withKeys:lU,withMemo:aH,withModifiers:am,withScopeId:LB},Symbol.toStringTag,{value:"Module"})),dU=[{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Button",category:"Call to Action",name:"Botón en Astro",description:"Botón de prueba en Astro",framework:"Astro",priority:1,tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",label:"Texto del botón",mandatory:!0,example_value:"Botón en Astro"},{name:"href",type:"text",label:"Url de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}],repeat_data:null}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Author_2025_Algarve",category:"Contenido",name:"Contenido con imagen a la izquierda 2025",description:"Contenido con imagen para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","genial"],fields:[{name:"nameAuthor",type:"text",help:"Introduce el nombre del autor, no debería ocupar más de una línea",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Introduce la profesión del autor, no debería ocupar más de una línea",label:"Descripción del autor",mandatory:!1,example_value:"Abogada especialista en Derecho Fiscal con 15 años de experiencia"},{name:"imageAuthor",type:"image",help:"Introduce la URL de la imagen del autor",label:"Src de la imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAuthorAlt",type:"text",help:"Introduce la descripción alternativa (alt) de la imagen del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"minutes",type:"text",help:"Minutos de lectura del artículo. Si se deja vacío, no se muestra el componente de tiempo de lectura",label:"Minutos de lectura",mandatory:!1,example_value:"20"},{name:"borderRadius",type:"text",help:'Redondeo de la imagen. Valores admitidos: "sm", "md", "lg", "full", "48px". Si se deja vacío, no se aplica redondeo',label:"Border radius de la imagen",mandatory:!1,example_value:"full"},{name:"full",type:"boolean",help:"Si es true, el contenedor no lleva padding horizontal en móvil. Si es false, añade padding horizontal y un ancho mínimo de 48px a la imagen",label:"Modo ancho completo",mandatory:!1,example_value:!0},{name:"imageSize",type:"number",help:"Tamaño máximo (ancho y alto) de la imagen en píxeles. Valores admitidos: 24, 48, 60, 120, 160, 180, 200, 240. Por defecto 240",label:"Tamaño de la imagen (px)",mandatory:!1,example_value:240}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CTA_2025_Formentera",category:"Call to Action",name:"Botón CTA con colores personalizables GenIA-L 2025",description:"Botón de Call To Action con colores personalizables (texto, fondo, borde). En hover invierte los colores automáticamente. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["boton","cta","genial"],fields:[{name:"buttonText",type:"text",help:"Texto visible del botón. Se ajusta al ancho del contenido (w-fit). No admite HTML",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. Si se deja vacío, por defecto apunta a "#" (no navega)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"frontColor",type:"text",help:'Color del texto en reposo (y del fondo al hacer hover). Acepta nombre CSS (ej. "white", "black") o código hex (ej. "#2134F1"). En hover, este valor y "Color de fondo" se intercambian',label:"Color del texto (frontal)",mandatory:!1,example_value:"#ffffff"},{name:"backColor",type:"text",help:'Color de fondo en reposo (y del texto al hacer hover). Acepta nombre CSS o código hex. En hover, este valor y "Color del texto" se intercambian',label:"Color de fondo",mandatory:!1,example_value:"#2134F1"},{name:"borderColor",type:"text",help:"Color del borde del botón (1px sólido). Acepta nombre CSS o código hex. NO cambia en hover",label:"Color del borde",mandatory:!1,example_value:"#2134F1"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2025_Barcelona",category:"Cabecera",name:"Breadcrumb 2025",description:"Breadcrumb para el directorio en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["breadcrumb","genial"],fields:[{name:"text",type:"text",help:"Texto del último nivel del breadcrumb (el actual). Admite HTML. Si se deja vacío, el nivel aparecerá sin texto",label:"Texto del breadcrumb",mandatory:!1,example_value:"Guía de fiscalidad para autónomos"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se usa para construir el enlace al inicio y la URL absoluta del breadcrumb en el structured data SEO. Déjalo vacío si el breadcrumb parte de la raíz',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"link",type:"text",help:'URL de destino del último nivel del breadcrumb. Por defecto "#" (sin destino)',label:"Enlace del breadcrumb",mandatory:!1,example_value:"/genia-l/guia-fiscalidad-autonomos"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2025_Madrid",category:"Cabecera",name:"Header GenIA-L 2025",description:"Header para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["header","navegación"],fields:[{name:"label",type:"text",help:"Texto del botón CTA principal que aparece en la esquina superior derecha de la cabecera",label:"Texto del botón CTA",mandatory:!1,example_value:"Pruébalo ya"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena a todos los enlaces del menú (inicio, categorías, subcategorías) y a la URL del structured data SEO. Déjalo vacío si el menú parte de la raíz',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"url",type:"text",help:'URL de destino del botón CTA. Por defecto "#"',label:"Enlace del botón CTA",mandatory:!1,example_value:"/genia-l/pruebalo"},{name:"loading",type:"select",help:'Tipo de carga del logo de la cabecera. Usa "eager" si el logo está above the fold (recomendado en páginas con cabecera visible al cargar); "lazy" si el componente se renderiza fuera del viewport inicial',label:"Carga del logo",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"eager"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2026_Bilbao",category:"Cabecera",name:"Cabecera con logo Lefebvre 2026",description:"Cabecera minimalista solo con el logo de Lefebvre, alineado a la izquierda o al centro",framework:"Astro",priority:1,tags:["cabecera","logo","lefebvre"],fields:[{name:"logoAlign",type:"select",help:"Posición del logo",label:"Alineación del logo",options:["left","center"],options_labels:["Izquierda","Centro"],example_value:""},{name:"subdirectory",type:"text",help:"Prefijo de la URL del sitio",label:"Subdirectorio",mandatory:!1,example_value:""},{name:"loading",type:"select",help:"Carga de la imagen del logo",label:"Carga de la imagen",options:["eager","lazy"],options_labels:["Inmediata","Diferida"],example_value:"eager"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2026_Madrid",category:"Cabecera",name:"Header GenIA-L 2026",description:"Header para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["header","navegación"],fields:[{name:"label",type:"text",help:"Texto del botón CTA principal que aparece en la esquina superior derecha de la cabecera",label:"Texto del botón CTA",mandatory:!1,example_value:"Pruébalo ya"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena al enlace del logo y a las rutas del menú por defecto, y se usa en la URL del structured data SEO. Si se pasa un menú custom en "categories", este valor NO se aplica a esos enlaces — debes incluir la ruta completa en cada ítem',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"url",type:"text",help:'URL de destino del botón CTA. Por defecto "#"',label:"Enlace del botón CTA",mandatory:!1,example_value:"/genia-l/pruebalo"},{name:"loading",type:"select",help:'Tipo de carga del logo de la cabecera. Usa "eager" si el logo está above the fold (recomendado en páginas con cabecera visible al cargar); "lazy" si el componente se renderiza fuera del viewport inicial',label:"Carga del logo",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"eager"},{name:"categories",type:"list",help:'Ítems del menú principal de navegación. Si se deja vacío o no se pasa, se muestra el menú por defecto (Cómo funciona, Seguridad, Casos reales, Contacto, Blog). Si defines este listado, debes incluir la ruta completa en cada "link" — el campo "subdirectory" NO se concatena',label:"Ítems del menú (opcional)",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Texto visible del ítem del menú principal",label:"Texto del ítem",example_value:"Cómo funciona"},{name:"link",type:"text",help:'URL de destino del ítem. Debe ser la ruta completa (no se le concatena "subdirectory")',label:"URL del ítem",example_value:"/genia-l/conoce-genia-l/"},{name:"target",type:"select",help:'Cómo se abre el enlace: "_self" en la misma pestaña, "_blank" en una pestaña nueva',label:"Apertura del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],example_value:"_self"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Card_2025_Malta",category:"Contenido",name:"Grid de cards con título y enlace 2025",description:"Grid de cards con título y enlace para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","card","grid","genial"],fields:[{name:"items",type:"list",help:"Listado de cards que se muestran en un grid responsive: 1 columna en móvil, 2 en tablet (sm) y 4 en escritorio (lg)",label:"Listado de cards",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Texto visible de la card. Es el único contenido que se muestra (no hay imagen ni descripción en este componente)",label:"Texto del título",example_value:"Guía de contratos digitales"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. Si se deja vacío, la card apunta a "#" (no navega a ningún sitio pero conserva el estilo clicable)',label:"URL de enlace",example_value:"/genia-l/guia-contratos-digitales"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Alcorcon",category:"Contenido",name:"Contenido de vídeo GenIA-L 2025",description:"Contenido de vídeo para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","video","genial"],fields:[{name:"title",type:"text",help:"Título principal (h2) que aparece superpuesto sobre la imagen o vídeo de fondo. Si se deja vacío, no se muestra",label:"Texto del título",mandatory:!1,example_value:"Prueba GenIA-L gratis durante 30 días"},{name:"subtitle",type:"text",help:"Subtítulo que aparece debajo del título. Si se deja vacío, no se muestra",label:"Texto del subtítulo",mandatory:!1,example_value:"La plataforma de IA jurídica para profesionales del Derecho"},{name:"description",type:"text",help:"Descripción que aparece debajo del subtítulo. Admite HTML. Si se deja vacía, no se muestra",label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza tareas, redacta documentos y encuentra jurisprudencia relevante en segundos"},{name:"txtBtn",type:"text",help:'Texto del botón CTA. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"alt",type:"text",help:"Texto alternativo de la imagen de fondo para accesibilidad. Solo aplica cuando se usa imagen (no vídeo)",label:"Texto alternativo de la imagen",mandatory:!1,example_value:"Imagen de fondo de la sección promocional de GenIA-L"},{name:"src",type:"image",help:'URL de la imagen de fondo. Mutuamente exclusivo con el vídeo: si se rellena "URL del video", este campo se ignora',label:"Imagen de fondo",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"iframeSrc",type:"video",help:"URL del vídeo embebido de fondo (se reproduce con autoplay, muted y loop). Tiene prioridad sobre la imagen: si se rellena, la imagen de fondo se ignora",label:"URL del video",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://player.vimeo.com/video/1087114916?controls=0&autoplay=1&muted=1&loop=1&badge=0&autopause=0&player_id=0&app_id=58479"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"loading",type:"select",help:'Tipo de carga de la imagen de fondo (solo aplica a imagen, no a vídeo). "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Cordoba",category:"Contenido",name:"Contenido con icono grande GenIA-L 2025",description:"Contenido con icono grande para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"title",type:"text",help:'Título del contenido. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título" (h1-h6 o span). No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Se muestra siempre centrada y como texto plano (no admite HTML)",label:"Texto de la descripción",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"tipo",type:"select",help:'Etiqueta HTML y tamaño del título. Cada opción aplica estilos distintos: "h1" 56px alineado a la izquierda, "h2" 40px izquierda, "h3" 2xl semibold izquierda, "h3-center" 2xl semibold centrado, "h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 centrado","H4","H5","H6","Span"],example_value:"h2"},{name:"showBigIco",type:"boolean",help:'Si está activado, muestra el icono grande seleccionado en el campo "Icono". Si está desactivado, NO se muestra nada en el hueco del icono (se renderiza un espacio vacío)',label:"Mostrar icono grande",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"bigIcon",type:"select",help:'Icono grande que se muestra junto al contenido (solo si "Mostrar icono grande" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["bigIA","bigIso1","bigIso2","bigGDPR","bigIso3"],options_labels:["IA","Iso1","Iso2","GDPR","Iso3"],example_value:"bigIso2"},{name:"positionFlex",type:"select",help:'Alineación vertical del icono respecto al bloque de texto. "Principio" alinea ambos arriba, "Centrado" los centra verticalmente',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto. "Horizontal" coloca el icono al lado del texto y el item ocupa todo el ancho disponible. "Vertical" apila el icono encima del texto y el item ocupa un ancho reducido (50% en móvil, 20% en desktop)',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Granada",category:"Contenido",name:"Contenido con muestra de icono GenIA-L 2025",description:"Contenido con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"title",type:"text",help:'Título del contenido. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título" (h1-h6 o span). No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Alineada a la izquierda",label:"Texto de la descripción",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"tipo",type:"select",help:'Etiqueta HTML y tamaño del título. "h1" 56px izquierda, "h2" 40px izquierda, "h3"/"h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"showIco",type:"boolean",help:'Si está activado, muestra el icono seleccionado en el campo "Icono" con fondo gris claro. Si está desactivado, no se renderiza el bloque del icono',label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"icon",type:"select",help:'Icono que se muestra junto al contenido (solo si "Mostrar icono" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["more","shop","correct","formation","case","medal","medal2","search-text","checklist","certificate","ico-ok","shield","edit","ia","users","graphic","balance","calendar-check","documents","compliance","library","support","defendant"],options_labels:["Más","Tienda","Correcto","Formación","Caso","Medalla","Medalla 2","Buscar texto","Checklist","Certificado","OK","Escudo","Editar","IA","Usuarios","Gráfico","Balanza","Calendario check","Documentos","Compliance","Librería","Soporte","Demandado"],example_value:"more"},{name:"positionFlex",type:"select",help:'Alineación vertical del icono respecto al bloque de texto. "Principio" alinea ambos arriba, "Centrado" los centra verticalmente',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto. "Horizontal" coloca el icono al lado del texto y el item ocupa todo el ancho disponible (en este modo el campo "Tamaño del bloque" no se aplica). "Vertical" apila el icono encima del texto y el item ocupa el ancho definido en "Tamaño del bloque"',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"widthBlock",type:"select",help:'Ancho del bloque cuando se usa orientación vertical (solo aplica si "Flex del item" está en Vertical; en Horizontal se ignora). "1/4" → 50% en tablet y 25% en desktop. "1/3" → 33% en desktop',label:"Tamaño del bloque (solo en orientación Vertical)",options:["lg:w-1/4 md:w-2/4","lg:w-1/3"],options_labels:["1/4","1/3"],example_value:"lg:w-1/4 md:w-2/4"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Malaga",category:"Contenido",name:"Contenido con imagen izquierda o derecha GenIA-L 2025",description:"Contenido con imagen para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","genial"],fields:[{name:"showIco",type:"boolean",help:'Si está activado, muestra un icono SVG circular (un "+" dentro de un círculo) junto al texto. Si está desactivado, el bloque se renderiza sin icono (con un layout de padding distinto)',label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"title",type:"text",help:"Título superior (pequeña etiqueta con fondo gris). Admite HTML. Si se deja vacío, NO se muestra",label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"subtitle",type:"text",help:'Subtítulo principal del bloque (h2). Admite HTML. Su tamaño lo controla el campo "Tamaño del h2"',label:"Texto del subtítulo",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"description",type:"text",help:'Descripción que aparece debajo del subtítulo. Admite HTML. Su tamaño de fuente lo controla el campo "Tamaño de fuente del texto"',label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza la gestión de riesgos, documenta controles y audita el cumplimiento normativo desde una única plataforma"},{name:"paddingLeft",type:"text",help:'Padding horizontal (en píxeles) entre el icono y el texto. Se aplica a la izquierda si "Alineación del contenido" es "Izquierda", o a la derecha si es "Derecha". Si se deja vacío, no se aplica padding',label:"Padding del texto (en px)",mandatory:!1,example_value:"24"},{name:"fontSize",type:"select",help:"Tamaño de fuente del bloque de descripción (no afecta al título ni al subtítulo)",label:"Tamaño de fuente del texto",options:["sm","base","lg","xl"],options_labels:["Pequeño","Base","Grande","Extra grande"],example_value:"base"},{name:"alignItems",type:"select",help:'Alineación vertical del contenedor principal. "Centro" alinea texto e imagen al centro vertical; "Inicio" los alinea arriba; "Fin" los alinea abajo',label:"Alineación vertical de los elementos",options:["center","start","end"],options_labels:["Centro","Inicio","Fin"],example_value:"center"},{name:"h2Size",type:"select",help:'Tamaño del subtítulo h2 en desktop. "Por defecto" = 56px (o 46px si "Mostrar icono" + "Mostrar imagen" están ambos activados). "40px" = 40px fijo. En móvil siempre 36px',label:"Tamaño del h2",options:["default","40px"],options_labels:["Por defecto","40px"],example_value:"default"},{name:"flexOrientation",type:"select",help:'Orientación del icono respecto al texto dentro del bloque. "Fila" coloca el icono al lado del texto; "Columna" apila el icono encima del texto. Solo aplica si "Mostrar icono" está activado',label:"Orientación del contenido",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y aplica padding-left al texto; "Derecha" coloca la imagen a la derecha (flex invertido) y aplica padding-right al texto',label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"width",type:"select",help:'Ancho del bloque de contenido. "Ancho completo" ocupa el 100% del contenedor padre; "3/5" ocupa el 60%; "7xl" aplica max-width de 7xl de Tailwind (1280px)',label:"Ancho del contenido",options:["full","3/5","7xl"],options_labels:["Ancho completo","Ancho 3/5","Ancho 7xl"],example_value:"full"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"showImage",type:"boolean",help:"Si está activado, se renderiza el layout con imagen (texto + imagen). Si está desactivado, se renderiza un layout alternativo solo con texto (con más padding)",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:'URL de la imagen principal. Solo se renderiza si "Mostrar imagen" está activado',label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"loading",type:"select",help:'Tipo de carga de la imagen principal. "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtnModal",type:"boolean",help:"Si está activado, muestra un segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón de modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón de modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'URL de la imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón de modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo se usa si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L mostrando el panel de cumplimiento normativo"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"Cumplimiento normativo ISO 27001"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Descubre cómo GenIA-L te ayuda a automatizar auditorías, documentar controles y mantener el cumplimiento de la norma ISO 27001"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-contacto-iso27001"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Montevideo",category:"Contenido",name:"Contenido card con etiqueta GenIA-L 2025",description:"Contenido card con imagen y etiqueta para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","card","imagen","genial"],fields:[{name:"title",type:"text",help:"Título de la card, se renderiza como h3. Si se deja vacío, aparece el h3 vacío (no se oculta automáticamente)",label:"Texto del título",mandatory:!1,example_value:"Automatización de contratos con GenIA-L"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen de la card para accesibilidad",label:"Texto alternativo de la imagen",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"},{name:"description",type:"text",help:"Descripción de la card, se renderiza como párrafo debajo del título. Si se deja vacía, aparece el párrafo vacío (no se oculta automáticamente)",label:"Texto de la descripción",mandatory:!1,example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. TODA la card es clicable (no solo un botón). Si se deja vacío, apunta a "#" (no navega pero conserva el estilo clicable)',label:"Url del enlace",mandatory:!1,example_value:"/genia-l/blog/automatizacion-contratos"},{name:"image",type:"image",help:"URL de la imagen de la card (aparece en la parte superior). Se renderiza siempre, por lo que conviene no dejarla vacía o se mostrará una imagen rota",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"tag",type:"text",help:"Etiqueta que aparece sobre el título (tipo badge). Si se deja vacía, NO se muestra",label:"Etiqueta del contenido",mandatory:!1,example_value:"Legaltech"},{name:"author",type:"text",help:'Nombre del autor del contenido. Se muestra como "Por [nombre]" debajo de la descripción. Si se deja vacío, la línea de autor NO se muestra',label:"Nombre del autor",mandatory:!1,example_value:"María García López"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Cabra",category:"Contenido",name:"Contenido con tabs GenIA-L 2026",description:"Contenido con pestañas (tabs) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","tabs","genial"],fields:[{name:"items",type:"list",help:'Listado de pestañas del tab. Cada pestaña tiene su nombre, contenido (items internos con icono y texto) e imagen. La pestaña marcada como "default" es la que se muestra al cargar; las demás arrancan ocultas y se activan al hacer click en su botón',label:"Listado de pestañas",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Nombre de la pestaña que aparece en el botón superior y como título dentro del panel. También se usa como alt de la imagen si no hay otro texto",label:"Nombre de la pestaña",example_value:"Automatización jurídica"},{name:"default",type:"boolean",help:'Si está activado, esta pestaña se muestra al cargar la página y su botón aparece resaltado. Solo debería haber UNA pestaña con "default: true"; si hay varias, se mostrarán todas a la vez al inicio',label:"¿Pestaña por defecto?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"buttonUrl",type:"text",help:'URL de destino del botón "Ver experiencias de uso" que aparece dentro del panel de la pestaña. Si se deja vacía, el botón no tiene destino',label:"URL del botón",example_value:"/genia-l/experiencias/automatizacion"},{name:"image",type:"image",help:"URL de la imagen que se muestra a la derecha del contenido de la pestaña. Si se deja vacía, aparece imagen rota",label:"Imagen de la pestaña",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"items",type:"list",help:"Sub-listado de elementos con icono y texto que se muestran dentro de la pestaña. Cada elemento se pasa al componente Repetidor_2025_Menorca para renderizarse con el formato estándar de listado con iconos",label:"Items de la pestaña",items:{type:"object",fields:[{name:"title",type:"text",help:"Título del elemento (h4)",label:"Título",example_value:"Redacción de contratos"},{name:"description",type:"textArea",help:"Descripción del elemento",label:"Descripción",example_value:"Genera borradores de contratos a partir de plantillas personalizables en segundos"},{name:"icon",type:"text",help:"Nombre del icono a mostrar junto al elemento. Consulta los valores aceptados en el componente Repetidor_2025_Menorca",label:"Icono",example_value:"edit"}]}}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Dubai",category:"Contenido",name:"Contenido título, descripción, botón y carrusel GenIA-L 2026",description:"Contenido con título, descripción y botón + carrusel de vídeos/imágenes para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","carrusel","genial"],fields:[{name:"title",type:"text",help:"Título principal (h2) que aparece sobre el carrusel. Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Experiencias reales con GenIA-L"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo profesionales del Derecho están transformando su día a día con inteligencia artificial"},{name:"buttonText",type:"text",help:'Texto del botón que aparece debajo del carrusel. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todos los casos de uso"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/casos-reales"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón debajo del carrusel. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:'Listado de ítems del carrusel. Cada ítem puede ser un VÍDEO (si se rellena "Url iframe") o una IMAGEN (si se deja el iframe vacío y se rellena "Imagen"). Los dos tipos pueden coexistir en el mismo carrusel. Algunos subcampos aplican solo a un tipo u otro',label:"Listado de items del carrusel",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:'URL del iframe del vídeo (p. ej. Vimeo/YouTube). Si tiene valor, el ítem se renderiza como VÍDEO (con thumbnail "Url imagen" hasta que se reproduzca). Si se deja vacío, el ítem se renderiza como IMAGEN',label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"text",help:'Thumbnail/preview del vídeo que se muestra antes de reproducirlo. Solo aplica a ítems tipo VÍDEO (cuando "Url iframe" tiene valor)',label:"Url imagen (thumbnail del vídeo)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura usada en el structured data SEO del vídeo. Solo aplica a ítems tipo VÍDEO",label:"Url miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"image",type:"image",help:'Imagen del ítem. Solo aplica cuando el ítem es tipo IMAGEN (es decir, cuando "Url iframe" está vacío)',label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad. Solo aplica a ítems tipo IMAGEN",label:"Alt Imagen",example_value:"Captura del dashboard de GenIA-L mostrando el editor de contratos"},{name:"descriptionImage",type:"textArea",help:"Descripción de la imagen para el structured data SEO. Solo aplica a ítems tipo IMAGEN",label:"Descripción de imagen",example_value:"Captura del dashboard de GenIA-L mostrando el editor de contratos"},{name:"description",type:"textArea",help:"Descripción del ítem (testimonio o comentario). Se muestra junto al autor en los ítems tipo VÍDEO",label:"Descripción",example_value:"GenIA-L nos ha reducido el tiempo de redacción de contratos en un 70%"},{name:"uploadDate",type:"text",help:"Fecha de publicación del vídeo (formato ISO YYYY-MM-DD). Se usa en el structured data SEO. Solo aplica a ítems tipo VÍDEO",label:"Fecha de publicación",example_value:"2026-01-15"},{name:"author",type:"text",help:"Nombre del autor del testimonio. Se muestra junto a la descripción en los ítems tipo VÍDEO",label:"Nombre del autor",example_value:"María García López"},{name:"positionCompany",type:"text",help:"Cargo del autor en su empresa. Aparece debajo del nombre. Solo aplica a ítems tipo VÍDEO",label:"Cargo del autor",example_value:"Socia directora de Derecho Fiscal en Despacho García"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Estocolmo",category:"Contenido",name:"Grid de cards con imagen GenIA-L 2026",description:"Grid de cards con imagen, título, descripción y autor para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","card","grid","genial"],fields:[{name:"items",type:"list",help:"Listado de cards que se muestran en un grid responsive: 1 columna en móvil, 2 en tablet (máx 400px cada una) y 3 en escritorio (máx 400px cada una). Cada card es clicable y se renderiza con el componente Contenido_2025_Montevideo",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título de la card (h3). Se muestra siempre; si se deja vacío, aparece el h3 vacío",label:"Título",example_value:"Automatización de contratos con GenIA-L"},{name:"description",type:"textArea",help:"Descripción de la card. Se muestra siempre como párrafo; si se deja vacía, aparece el párrafo vacío",label:"Descripción",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"link",type:"text",help:'URL de destino al hacer click en la card (toda la card es clicable). Si se deja vacío, apunta a "#" (no navega)',label:"Url del enlace",example_value:"/genia-l/blog/automatizacion-contratos"},{name:"tag",type:"text",help:"Etiqueta (badge) que aparece sobre el título. Si se deja vacía, NO se muestra",label:"Etiqueta",example_value:"Legaltech"},{name:"image",type:"image",help:"Imagen de la card (aparece en la parte superior). Se renderiza siempre; si se deja vacía aparece una imagen rota",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad",label:"Alt de la imagen",example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"},{name:"author",type:"text",help:'Nombre del autor del contenido. Se muestra como "Por [nombre]" debajo de la descripción. Si se deja vacío, la línea de autor NO se muestra',label:"Nombre del autor",example_value:"María García López"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Jaen",category:"Contenido",name:"Cabecera de blog con autor, descripción, imagen y RRSS GenIA-L 2026",description:"Cabecera de blog con título, subtítulo, número de colegiado, descripción, imagen lateral y botones de redes sociales para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","blog","cabecera","rrss","genial"],fields:[{name:"title",type:"text",help:'Título principal. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". Admite HTML',label:"Texto del título",mandatory:!1,example_value:"Inteligencia artificial en el despacho: casos reales"},{name:"subtitle",type:"text",help:"Subtítulo opcional que aparece junto al número de colegiado. Admite HTML. Si se deja vacío, NO se muestra",label:"Texto del subtítulo",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"number",type:"text",help:'Número de colegiado del autor. Se muestra como "Nº colegiado: [valor]". Si se deja vacío, NO se muestra',label:"Número de colegiado",mandatory:!1,example_value:"12345"},{name:"description",type:"text",help:'Descripción que aparece debajo del título y subtítulo. Admite HTML. Su tipografía y tamaño los controla el campo "Estilo de la descripción"',label:"Texto de la descripción",mandatory:!1,example_value:"Tres experiencias reales de profesionales del Derecho que han incorporado GenIA-L en su día a día"},{name:"image",type:"image",help:"Imagen lateral. Si tiene valor, el layout se convierte en dos columnas (texto + imagen). Si se deja vacía, NO se muestra imagen y el texto ocupa todo el ancho",label:"Imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAlt",type:"text",help:'Texto alternativo de la imagen para accesibilidad. Solo aplica si "Imagen" tiene valor',label:"Alt de la imagen",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"tipo",type:"select",help:'Etiqueta HTML y estilo del título. Cada opción aplica estilos distintos: "h1 categoría blog" 40px centrado normal, "h1 autor blog" 40px izquierda semibold, "h1 post blog" 40px centrado semibold, "h1 post enriquecido" 40px izquierda semibold, "h2 blog" 28px/32px izquierda normal, "h2" 36px/40px centrado normal, "h3" 20px/24px izquierda semibold, "h4" xl izquierda semibold. Si se elige un valor fuera de la lista, el título se renderiza como párrafo simple',label:"Etiqueta del título",options:["h1-blog-categoria","h1-blog-autor","h1-blog-post","h1-blog-postenriquecido","h2-blog","h2","h3","h4"],options_labels:["H1 categoría blog","H1 autor blog","H1 post blog","H1 post enriquecido blog","H2 blog","H2","H3","H4"],example_value:"h1-blog-autor"},{name:"flexJustify",type:"select",help:'Justificación horizontal del bloque de texto. "Centrado" centra el contenido en su columna; "Inicio" lo alinea a la izquierda',label:"Justificación del contenido",options:["justify-center","justify-start"],options_labels:["Centrado","Inicio"],example_value:"justify-center"},{name:"textAlign",type:"select",help:"Alineación del texto dentro del párrafo de descripción",label:"Alineación del texto",options:["center","left","right"],options_labels:["Centro","Izquierda","Derecha"],example_value:"center"},{name:"descriptionStyle",type:"select",help:'Tipografía y tamaño del párrafo de descripción. "Poppins" aplica Poppins xl con leading 7 y margen inferior grande (para descripciones destacadas); "Inter" aplica Inter base sin margen (para descripciones compactas)',label:"Estilo de la descripción",options:["poppins","inter"],options_labels:["Poppins (grande)","Inter (compacto)"],example_value:"poppins"},{name:"imagePosition",type:"select",help:'Posición de la imagen respecto al texto (solo aplica si "Imagen" tiene valor). "Derecha" coloca la imagen a la derecha del texto; "Izquierda" la coloca a la izquierda',label:"Posición de la imagen",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"items",type:"list",help:"Listado de bloques de redes sociales y opciones de compartir. Cada bloque se renderiza con el componente RRSS_2025_Pisa. Habitualmente se configura UN solo bloque con todos los enlaces rellenos; si hay varios se mostrarán en fila. Si se deja vacío, el bloque de RRSS NO se muestra",label:"Items de redes sociales",mandatory:!1,items:{type:"object",fields:[{name:"facebook",type:"text",help:"URL del perfil de Facebook. Si se deja vacía, el icono de Facebook NO aparece",label:"URL de Facebook",example_value:"https://facebook.com/lefebvre.es"},{name:"twitter",type:"text",help:"URL del perfil de Twitter/X. Si se deja vacía, el icono de X NO aparece",label:"URL de Twitter/X",example_value:"https://x.com/lefebvre_es"},{name:"linkedin",type:"text",help:"URL del perfil de LinkedIn. Si se deja vacía, el icono de LinkedIn NO aparece",label:"URL de LinkedIn",example_value:"https://linkedin.com/company/lefebvre-es"},{name:"whatsapp",type:"text",help:"URL/enlace de WhatsApp (p. ej. https://wa.me/...). Si se deja vacía, el icono de WhatsApp NO aparece",label:"URL de WhatsApp",example_value:"https://wa.me/34600000000"},{name:"instagram",type:"text",help:"URL del perfil de Instagram. Si se deja vacía, el icono de Instagram NO aparece",label:"URL de Instagram",example_value:"https://instagram.com/lefebvre_es"},{name:"youtube",type:"text",help:"URL del canal de YouTube. Si se deja vacía, el icono de YouTube NO aparece",label:"URL de YouTube",example_value:"https://youtube.com/@lefebvre"},{name:"email",type:"text",help:"Dirección de email de contacto. Si se deja vacía, el icono de email NO aparece",label:"Email",example_value:"contacto@lefebvre.es"},{name:"print",type:"boolean",help:"Activa el botón de imprimir que ejecuta window.print() en la página actual",label:"Mostrar botón imprimir",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"copyLink",type:"boolean",help:"Activa el botón de copiar enlace que copia la URL actual al portapapeles",label:"Mostrar botón copiar enlace",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Leon",category:"Contenido",name:"Contenido de prueba Paco 2026",description:'Componente de prueba que renderiza un saludo simple "Hola, soy [nombre]". Uso interno / testing',framework:"Astro",priority:1,tags:["contenido","prueba","genial"],fields:[{name:"nombre",type:"text",help:'Nombre que se mostrará en el saludo. Se inserta en el texto como "Hola, soy [nombre]". Si se deja vacío, aparece el valor por defecto "#"',label:"Nombre",mandatory:!1,example_value:"Paco"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Mallorca",category:"Contenido",name:"Contenido con icono GenIA-L 2026",description:"Contenido con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"positionFlex",type:"select",help:'Alineación vertical del contenedor principal. "Centrado" centra verticalmente los items; "Principio" los alinea arriba',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:'Alineación horizontal del botón CTA inferior. "Centrado" sitúa el botón en el centro; "Principio" lo alinea a la izquierda. Solo aplica si "Mostrar botón" está activado',label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono grande respecto al texto DENTRO de cada item. "Horizontal" coloca el icono al lado del texto; "Vertical" apila el icono encima',label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:'Orientación del conjunto de items entre sí. "Horizontal" coloca los items en fila (con flex-wrap); "Vertical" los apila en columna',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:'Etiqueta HTML y estilo del título de cada item. "h1" 56px izquierda, "h2" 40px izquierda, "h3" 2xl semibold izquierda, "h3-center" 2xl semibold centrado, "h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 centrado","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:'Texto del botón CTA inferior. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las certificaciones"},{name:"buttonUrl",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/certificaciones"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA inferior. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:"Listado de items de contenido con icono grande, título y descripción. Cada item se renderiza con el componente Repetidor_2025_Cordoba",label:"Items de contenido",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:'Título del item. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". No admite HTML',label:"Título",example_value:"Certificación ISO 27001"},{name:"description",type:"textArea",help:"Descripción del item. Se muestra debajo del título centrada y como texto plano (no admite HTML)",label:"Descripción",example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"showBigIco",type:"boolean",help:"Si está activado, muestra el icono grande seleccionado junto al contenido del item. Si está desactivado, NO se muestra icono (el hueco queda vacío)",label:"Mostrar icono grande",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"bigIcon",type:"select",help:'Icono grande que se muestra junto al item (solo si "Mostrar icono grande" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono grande",options:["bigIA","bigIso1","bigIso2","bigGDPR","bigIso3"],options_labels:["IA","Iso1","Iso2","GDPR","Iso3"],example_value:"bigIso2"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Marruecos",category:"Contenido",name:"Caja con borde degradado, items con icono y botón GenIA-L 2026",description:"Caja con borde degradado que contiene título, listado de items (icono + subtítulo + descripción) y botón CTA en la esquina inferior para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","icono","card","genial"],fields:[{name:"title",type:"text",help:"Título principal del bloque (h2) que aparece en la parte superior de la caja. Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Título",mandatory:!1,example_value:"Ventajas de GenIA-L para tu despacho"},{name:"buttonText",type:"text",help:'Texto del botón CTA en la esquina inferior. ATENCIÓN: este componente NO tiene prop "Mostrar botón" — el botón aparece SIEMPRE. Si se deja vacío, aparecerá un botón sin texto',label:"Texto del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"buttonHref",type:"text",help:'URL de destino del botón CTA. Por defecto "#". Recuerda que el botón se renderiza siempre; si dejas esta URL vacía, apuntará a "#" (no navegará)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"items",type:"list",help:"Listado de items de la caja. Cada item tiene un icono (de 3 opciones fijas), un subtítulo y una descripción. Los items se apilan verticalmente con un gap",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"icon",type:"select",help:'Icono del item (SVG con gradiente de color). Solo se reconocen 3 valores: "chat" (burbuja de chat), "book" (libro) y "check" (marca de verificación). Si se elige cualquier otro valor, no aparece ningún icono y el hueco queda vacío',label:"Icono",options:["chat","book","check"],options_labels:["Chat","Libro","Check"],example_value:"chat"},{name:"subtitle",type:"text",help:"Subtítulo del item (h3). Se renderiza siempre; si se deja vacío, aparece el h3 vacío. No admite HTML",label:"Subtítulo",example_value:"Asistente conversacional"},{name:"description",type:"textArea",help:"Descripción del item. Se renderiza siempre como párrafo; si se deja vacía, aparece el párrafo vacío. No admite HTML",label:"Descripción",example_value:"Consulta jurisprudencia y doctrina en lenguaje natural, sin necesidad de construir queries complejas"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Menorca",category:"Contenido",name:"Contenido con iconos pequeños GenIA-L 2026",description:"Contenedor de items con iconos pequeños (23 variantes) + botón CTA opcional para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"positionFlex",type:"select",help:'Alineación vertical del contenedor principal. "Centrado" centra verticalmente los items; "Principio" los alinea arriba',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:'Alineación horizontal del botón CTA inferior. "Centrado" sitúa el botón en el centro; "Principio" lo alinea a la izquierda. Solo aplica si "Mostrar botón" está activado',label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto DENTRO de cada item. "Horizontal" coloca el icono al lado del texto; "Vertical" apila el icono encima',label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:'Orientación del conjunto de items entre sí. "Horizontal" coloca los items en fila (con flex-wrap); "Vertical" los apila en columna',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:'Etiqueta HTML y estilo del título de cada item. "h1" 56px izquierda, "h2" 40px izquierda, "h3"/"h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:'Texto del botón CTA inferior. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las funcionalidades"},{name:"buttonUrl",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/funcionalidades"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA inferior. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"widthArticle",type:"select",help:'Ancho del contenedor principal. Actualmente solo está soportado "w-full" (100%)',label:"Ancho del Article",options:["w-full"],options_labels:["Ancho completo"],example_value:"w-full"},{name:"items",type:"list",help:"Listado de items de contenido con icono pequeño, título y descripción. Cada item se renderiza con el componente Contenido_2025_Granada",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:'Título del item. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". No admite HTML',label:"Título",example_value:"Búsqueda semántica"},{name:"description",type:"textArea",help:"Descripción del item. Se muestra debajo del título y admite HTML",label:"Descripción",example_value:"Encuentra jurisprudencia y doctrina relevante con consultas en lenguaje natural"},{name:"showIco",type:"boolean",help:"Si está activado, muestra el icono seleccionado con fondo gris claro. Si está desactivado, no se renderiza el bloque del icono",label:"¿Mostrar icono?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"icon",type:"select",help:'Icono que se muestra junto al item (solo si "Mostrar icono" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["more","shop","correct","formation","case","medal","medal2","search-text","checklist","certificate","ico-ok","shield","edit","ia","users","graphic","balance","calendar-check","documents","compliance","library","support","defendant"],options_labels:["Más","Tienda","Correcto","Formación","Caso","Medalla","Medalla 2","Buscar texto","Checklist","Certificado","OK","Escudo","Editar","IA","Usuarios","Gráfico","Balanza","Calendario check","Documentos","Compliance","Librería","Soporte","Demandado"],example_value:"search-text"},{name:"widthBlock",type:"select",help:'Ancho del item cuando se usa orientación vertical en "Flex del item" (Vertical). "1/4" = 50% tablet / 25% desktop. "1/3" = 33% desktop. En orientación horizontal este campo se ignora',label:"Ancho del bloque (solo en orientación Vertical)",options:["lg:w-1/4 md:w-2/4","lg:w-1/3"],options_labels:["1/4","1/3"],example_value:"lg:w-1/4 md:w-2/4"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Michigan",category:"Contenido",name:"Contenido múltiples artículos con texto, imagen y modal GenIA-L 2026",description:"Listado de artículos con título, descripción, imagen y modal opcional para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","imagen","modal","genial"],fields:[{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto en CADA artículo. "Izquierda" coloca la imagen a la izquierda en todos los artículos; "Derecha" a la derecha. Esta orientación es GLOBAL — se aplica a todos los ítems por igual',label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario en TODOS los artículos. Los botones primarios son globales: todos los artículos comparten el mismo texto y enlace. Recuerda: también requiere "Enlace del botón" relleno',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:'Texto del botón primario (global para todos los artículos). Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario (global para todos los artículos). Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/saber-mas"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva el botón que abre el modal en TODOS los artículos. El modal se rellena con los datos específicos de cada ítem (imagen/título/descripción del modal)",label:"Mostrar botón Modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal (global para todos los artículos). Se muestra solo si "Mostrar botón Modal" está activado',label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en pdf"},{name:"items",type:"list",help:"Listado de artículos. Cada artículo se renderiza con el componente Formulario_2025_Teruel. Todos los artículos llevan borde inferior separador EXCEPTO el último. Los datos del modal son específicos por ítem",label:"Listado de artículos",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título del artículo. Se renderiza siempre; si se deja vacío, aparece el título vacío",label:"Título",example_value:"Automatización de contratos con IA"},{name:"description",type:"textArea",help:"Descripción del artículo. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Descripción",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas y sugerencias basadas en jurisprudencia"},{name:"image",type:"image",help:"Imagen principal del artículo. Se muestra al lado del texto según la orientación global",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón Modal" está activado',label:"Imagen del modal",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"titleModal",type:"text",help:'Título que aparece dentro del modal. Solo se usa si "Mostrar botón Modal" está activado',label:"Título del modal",example_value:"Guía completa de automatización jurídica"},{name:"subtitleModal",type:"text",help:'Subtítulo que aparece dentro del modal, debajo del título. Solo se usa si "Mostrar botón Modal" está activado',label:"Subtítulo del modal",example_value:"Descarga el whitepaper de 40 páginas"},{name:"descriptionModal",type:"textArea",help:'Descripción que aparece dentro del modal. Admite HTML. Solo se usa si "Mostrar botón Modal" está activado',label:"Descripción del modal",example_value:"Descubre cómo reducir el tiempo de redacción de contratos en un 70% con técnicas de IA aplicadas al ámbito jurídico"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",example_value:"Portada de la guía de automatización jurídica con IA"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",example_value:"formulario-descarga-guia-automatizacion"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Mostoles",category:"Contenido",name:"Banner CTA con imagen de fondo o logo GenIA-L 2026",description:"Banner CTA con dos variantes: con imagen de fondo cover, o con borde degradado + logo grande de GenIA-L. Incluye botón primario y modal opcional. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","banner","cta","genial"],fields:[{name:"title",type:"text",help:"Título principal del banner (h3). Si se deja vacío, NO se muestra. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Prueba GenIA-L gratis"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Si se deja vacía, NO se muestra. Si tanto título como descripción están vacíos, el contenido se centra verticalmente con el botón",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo la IA jurídica transforma tu día a día"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"showImage",type:"boolean",help:'Activa/desactiva la imagen de fondo. Si ESTÁ ACTIVADO y "Imagen" tiene valor → layout con imagen de fondo cover (SIN borde degradado). Si ESTÁ DESACTIVADO o "Imagen" vacía → layout alternativo con borde degradado de color y logo grande de GenIA-L como marca de agua',label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"src",type:"image",help:'URL de la imagen de fondo. Solo se usa cuando "Mostrar imagen" está activado. Si se deja vacía, se activa el layout alternativo con borde degradado y logo de GenIA-L',label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva el segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L con el panel de automatización"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"Más sobre GenIA-L"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal",label:"Descripción del modal",mandatory:!1,example_value:"Descubre todas las funcionalidades de la plataforma de IA jurídica para despachos"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-contacto-genial"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Orcasitas",category:"Contenido",name:"Carrusel de vídeos e imágenes GenIA-L 2026",description:"Carrusel responsive (Glider.js) con slides de vídeo (abren en popup) o imagen (con descripción debajo) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","carrusel","video","genial"],fields:[{name:"slidesToShow",type:"text",help:"Número de slides visibles a la vez en desktop. Se ajusta automáticamente en tamaños menores (breakpoints responsive: 5→4→3→2→1 según anchura). Default 5",label:"Número de slides a mostrar",mandatory:!1,example_value:"3"},{name:"slidesToScroll",type:"text",help:"Número de slides que se desplazan al pulsar las flechas o arrastrar. Default 1 (scroll suave uno a uno)",label:"Número de slides a desplazar",mandatory:!1,example_value:"1"},{name:"loadScript",type:"boolean",help:"Si está activado, el componente carga CSS y JS de Glider.js desde el CDN. Actívalo si el carrusel es el único componente de la página que necesita Glider; desactívalo si Glider ya está cargado globalmente en la página para evitar duplicados",label:"Cargar dependencias",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:'Slides del carrusel. Cada slide puede ser un VÍDEO (si se rellena "Url iframe" — abre en popup al hacer click) o una IMAGEN (si se deja el iframe vacío y se rellena "URL Imagen" — aparece con descripción debajo). Los dos tipos pueden coexistir en el mismo carrusel',label:"Listado de slides",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"URL del vídeo embebido (Vimeo, YouTube, etc.). Si tiene valor, el slide se renderiza como VÍDEO: muestra un thumbnail clicable que abre el vídeo en un popup. Si se deja vacío, el slide se renderiza como IMAGEN",label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"image",help:"Thumbnail del vídeo que se muestra en el slide antes de abrir el popup. Solo aplica a slides tipo VÍDEO",label:"Thumbnail del vídeo",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura para el structured data SEO del vídeo. Solo aplica a slides tipo VÍDEO",label:"Url miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:'En slides tipo VÍDEO: testimonio/cita del autor (se muestra con su nombre y cargo). En slides tipo IMAGEN: no se muestra, se usa "Descripción de imagen"',label:"Descripción (testimonio)",example_value:"GenIA-L nos ha reducido el tiempo de redacción de contratos en un 70%"},{name:"author",type:"text",help:"Nombre del autor del testimonio. Se muestra en slides tipo VÍDEO junto a la descripción",label:"Nombre del autor",example_value:"María García López"},{name:"positionCompany",type:"text",help:"Cargo del autor en su empresa. Aparece debajo del nombre. Solo aplica a slides tipo VÍDEO",label:"Cargo del autor",example_value:"Socia directora de Derecho Fiscal"},{name:"uploadDate",type:"text",help:"Fecha de publicación del vídeo (formato ISO YYYY-MM-DD). Se usa en el structured data SEO. Solo aplica a slides tipo VÍDEO",label:"Fecha de publicación",example_value:"2026-01-15"},{name:"image",type:"image",help:'Imagen del slide. Solo aplica a slides tipo IMAGEN (cuando "Url iframe" está vacío). El ancho se adapta automáticamente según cuántas imágenes haya (1→600px, 2→400px, 3 o más→250px)',label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad. Solo aplica a slides tipo IMAGEN",label:"Alt Imagen",example_value:"Logo de corporación colaboradora de GenIA-L"},{name:"descriptionImage",type:"textArea",help:"Descripción que aparece debajo de la imagen del slide. Solo aplica a slides tipo IMAGEN",label:"Descripción de la imagen",example_value:"Colaborador destacado del ecosistema legaltech español"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Oslo",category:"Contenido",name:"Grid de vídeos con popup GenIA-L 2026",description:"Grid de 3 columnas con thumbnails de vídeos que se reproducen en un popup iframe al hacer click. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","popup","video","grid","genial"],fields:[{name:"items",type:"list",help:"Listado de vídeos que se muestran como grid (3 columnas en desktop, 1 en móvil). Cada thumbnail abre el vídeo en un popup al hacer click. Campo obligatorio: si no se pasa, el componente falla al renderizar",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"URL del vídeo embebido (Vimeo, YouTube, etc.) que se abrirá en el popup al hacer click en el thumbnail. Si se deja vacío, el popup abre sin contenido",label:"Url del vídeo (iframe)",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"image",help:"Thumbnail que se muestra en el grid antes de abrir el popup. Si se deja vacío, aparece una imagen rota",label:"Thumbnail del vídeo",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:'Descripción que aparece debajo del thumbnail (centrada, pequeña, semibold). Admite HTML. También se usa como alt de la imagen y en el structured data SEO. Si se deja vacía, el alt será "Video thumbnail" por defecto',label:"Descripción",example_value:"Automatización de contratos con IA"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Quito",category:"Contenido",name:"Datos de contacto con iconos GenIA-L 2026",description:"Bloque de datos de contacto con título y listado de items con iconos (teléfono, email, localización) para el directorio de GenIA-L en la corporativa de Lefebvre. Genera structured data SEO tipo ContactPoint",framework:"Astro",priority:1,tags:["texto","contacto","icono","genial"],fields:[{name:"title",type:"text",help:"Título del bloque de contacto (h2). Se usa también como nombre del ContactPoint en el structured data SEO. Se renderiza siempre; si se deja vacío, aparece el h2 vacío",label:"Título del bloque",mandatory:!1,example_value:"Contacto comercial"},{name:"items",type:"list",help:'Listado de datos de contacto. Cada item tiene un icono (teléfono, email o localización) y un texto. El structured data SEO extrae el PRIMER item con icono "phone" como teléfono, el PRIMER con "email" como email, y el PRIMER con "locator" como localidad. Además, el ÚLTIMO item del listado se resalta en azul',label:"Listado de items de contacto",mandatory:!1,items:{type:"object",fields:[{name:"icon",type:"select",help:"Icono del item. Los 3 valores válidos renderizan un SVG específico. Además, el icono determina qué tipo de dato (teléfono/email/localidad) se usa en el structured data SEO",label:"Icono",options:["phone","email","locator"],options_labels:["Teléfono","Email","Localización"],example_value:"phone"},{name:"text",type:"text",help:"Texto del item (número de teléfono, dirección de email, dirección postal, etc.). Admite HTML (útil para enlaces mailto: o tel:)",label:"Texto",example_value:"+34 91 210 80 00"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Sevilla",category:"Contenido",name:"Contenido texto bloque con imagen, icono y modal GenIA-L 2026",description:"Bloque de contenido con título, descripción, imagen lateral opcional, icono opcional y botones primario/modal para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","popup","texto","imagen","genial"],fields:[{name:"showIco",type:"boolean",help:"Si está activado, muestra un icono SVG junto al texto. Si está desactivado, el bloque se renderiza sin icono",label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"title",type:"text",help:"Título principal del bloque (h1, 56px en desktop). Admite HTML. Se renderiza siempre; si se deja vacío, aparece el h1 vacío",label:"Texto del título",mandatory:!1,example_value:"Transforma tu despacho con IA"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo GenIA-L automatiza la redacción de contratos y la búsqueda jurisprudencial"},{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y el texto a la derecha; "Derecha" invierte el orden (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"flexOrientation",type:"select",help:'Orientación del icono respecto al texto dentro del bloque. "Fila" coloca el icono al lado del texto; "Columna" apila el icono encima. Solo aplica si "Mostrar icono" está activado',label:"Orientación del icono y texto",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"showImage",type:"boolean",help:"Si está activado, se renderiza el layout con imagen al lado del texto. Si está desactivado, se renderiza un layout alternativo solo con texto (sin imagen y con más padding)",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:'URL de la imagen principal. Solo se renderiza si "Mostrar imagen" está activado',label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"loading",type:"select",help:'Tipo de carga de la imagen. "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva un segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de GenIA-L mostrando el panel de asistente jurídico"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"GenIA-L Asistente"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Consulta jurisprudencia y doctrina en lenguaje natural, con citas contextuales y exportación a Word"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-demo-genial"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Tokyo",category:"Contenido",name:"Bloque con escudo de fondo, texto y grid de imágenes GenIA-L 2026",description:"Bloque con imagen de escudo de fondo, título, descripción, botón tipo enlace con flecha y grid lateral de logos/imágenes clicables para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","genial"],fields:[{name:"title",type:"text",help:"Título principal del bloque (h2). Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Plataforma certificada y segura"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"GenIA-L cumple con las principales certificaciones de seguridad y protección de datos del sector"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón tipo enlace (texto + flecha). ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"buttonText",type:"text",help:'Texto del botón tipo enlace. Aparece seguido de una flecha SVG. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las certificaciones"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. Rellena siempre esta URL si activas "Mostrar botón" (el componente no valida esta dependencia)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/certificaciones"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l") que se concatena a la URL de la imagen de fondo del bloque (el escudo). Si se deja vacío, la imagen de fondo se carga desde la raíz del sitio: "/images/genial/ico-shield.webp"',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"items",type:"list",help:"Listado de logos/imágenes que se muestran en el grid lateral del bloque. Cada ítem se renderiza con el componente Imagen_2025_Fukushima. El ancho del bloque de texto se adapta automáticamente al número de ítems: 1 ítem → texto a 2/3, 2 ítems → texto a 1/2, 3 o más → texto a 1/3",label:"Items del grid",mandatory:!1,items:{type:"object",fields:[{name:"link",type:"text",help:"URL de destino al hacer click en el logo/imagen. Si se deja vacío, la imagen no es clicable",label:"Enlace",example_value:"/genia-l/certificaciones/iso-27001"},{name:"image",type:"image",help:"URL de la imagen/logo del ítem. Si se deja vacía aparece imagen rota",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad",label:"Alt Imagen",example_value:"Logo de certificación ISO 27001"},{name:"descriptionImage",type:"textArea",help:"Descripción que aparece debajo de la imagen. Admite HTML",label:"Descripción de la imagen",example_value:"Certificación ISO 27001 de seguridad de la información"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Ubeda",category:"Contenido",name:"Bloque destacado de 3 columnas con cifras y descripción GenIA-L 2026",description:"Bloque con fondo azul translúcido que muestra hasta 3 items (títulos grandes y descripciones) en fila en desktop, en columna en móvil, con separadores visuales entre ellos. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","texto","destacado","genial"],fields:[{name:"items",type:"list",help:"Listado de bloques con cifras/títulos destacados y descripción. Layout responsive: 1 columna en móvil, 3 columnas en desktop (ancho 1/3 cada una). Diseñado para EXACTAMENTE 3 items (o menos). El ítem del medio tiene bordes separadores laterales en desktop y horizontales en móvil; si hay más de 3 ítems los extras no llevarán separadores visuales",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Cifra o texto destacado del bloque (aparece en tamaño grande, 40px móvil / 56px desktop, semibold). No admite HTML",label:"Título destacado",example_value:"70%"},{name:"description",type:"textArea",help:"Descripción que aparece debajo del título destacado (tamaño xl, centrada). Admite HTML",label:"Descripción",example_value:"Reducción del tiempo de redacción de contratos"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Yakarta",category:"Contenido",name:"Acordeón de vídeos con pestañas y rotación automática GenIA-L 2026",description:"Acordeón con botones tipo pestaña en la parte superior: al hacer click en cada pestaña se muestra su vídeo MP4 con título y descripción. Incluye rotación automática entre pestañas. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["acordeon","tabs","video","genial"],fields:[{name:"items",type:"list",help:"Listado de vídeos del acordeón. Cada vídeo tiene su botón de pestaña superior, título, descripción y archivo .mp4. Solo se muestra UNO a la vez; al hacer click en otra pestaña, el contenido cambia. También hay rotación automática entre pestañas cada pocos segundos",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Texto del botón tipo pestaña (aparece en la barra superior). Se muestra también en móvil como icono con texto oculto salvo al hacer hover/active",label:"Nombre o tag de la pestaña",example_value:"Redacción"},{name:"title",type:"text",help:"Título del vídeo (h3) que aparece sobre la descripción dentro del panel",label:"Título del vídeo",example_value:"Redacción automática de contratos"},{name:"description",type:"textArea",help:"Descripción del vídeo que aparece debajo del título. Admite HTML",label:"Descripción",example_value:"Genera borradores de contratos en segundos a partir de plantillas personalizables"},{name:"iframeSrc",type:"text",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como src de una etiqueta <video><source src="..." type="video/mp4">. Ejemplos válidos: .mp4, .webm alojados en CDN',label:"URL del archivo de vídeo (MP4)",example_value:"https://assets.lefebvre.es/media/videos/genial/redaccion-demo.mp4"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura del vídeo usada en el structured data SEO (VideoObject)",label:"URL de la miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageSrc",type:"text",help:'URL alternativa de miniatura (fallback de "URL de la miniatura" en el structured data SEO). Si "URL de la miniatura" tiene valor, este campo se ignora',label:"URL alternativa de miniatura (fallback SEO)",example_value:""},{name:"duration",type:"text",help:'Duración del vídeo en formato ISO 8601 (p. ej. "PT2M30S" para 2 min 30 s). Se usa en el structured data SEO. Default "PT2M" si se deja vacío',label:"Duración del vídeo (ISO 8601)",example_value:"PT2M"},{name:"default",type:"boolean",help:'Si está activado, esta pestaña se muestra al cargar la página y su botón aparece resaltado como "active". Solo debería haber UN ítem con default=true; si hay varios se mostrarán todos a la vez al inicio',label:"¿Es el vídeo por defecto?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CorpFooter",category:"Footer",name:"Footer Corporativo Lefebvre.es",description:"Footer marca 2025 Lefebvre.es",framework:"Astro",priority:1,tags:["footer","lefebvre.es"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CorpHero",category:"Call to Action",name:"Hero Corporativo Lefebvre.es",description:"Hero marca 2025 Lefebvre.es",framework:"Astro",priority:1,tags:["hero","video","lefebvre.es"],fields:[{name:"text",type:"textArea",label:"Contenido HTML",mandatory:!1,example_value:"<p><b>Es más que una imagen renovada. Es una nueva forma de avanzar.</b><br />En Lefebvre evolucionamos contigo. Nos adaptamos a ti.</p>"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Enlace_2025_Venecia",category:"Texto",name:"Enlace con icono de flecha o play GenIA-L 2025",description:"Enlace estilizado en color azul con un icono (flecha a la derecha o play a la izquierda) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["enlace","link","genial"],fields:[{name:"text",type:"text",help:"Texto visible del enlace. También se usa como aria-label para accesibilidad. Si se deja vacío, el enlace queda sin texto ni etiqueta accesible",label:"Texto del enlace",mandatory:!1,example_value:"Ver todos los casos de uso"},{name:"url",type:"text",help:'URL de destino del enlace. Si se deja vacío, por defecto apunta a "#" (no navega)',label:"URL de destino",mandatory:!1,example_value:"/genia-l/casos-reales"},{name:"target",type:"select",help:'Cómo se abre el enlace. "Misma pestaña" abre en la misma ventana; "Nueva pestaña" abre en otra pestaña y además añade automáticamente rel="noopener noreferrer" por seguridad',label:"Destino del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],mandatory:!1,example_value:"_blank"},{name:"icon",type:"select",help:'Icono que acompaña al texto del enlace. "Flecha" coloca un icono de flecha a la DERECHA del texto (estilo "saber más"). "Play" coloca un icono de play a la IZQUIERDA del texto y además aplica subrayado permanente al texto (estilo "ver vídeo")',label:"Icono del enlace",options:["arrow","play"],options_labels:["Flecha (derecha)","Play (izquierda)"],mandatory:!1,example_value:"arrow"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"FAQ_2025_Hiroshima",category:"Texto",name:"FAQ acordeón GenIA-L 2025",description:"Listado de preguntas frecuentes en acordeón exclusivo (solo una respuesta visible a la vez) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","faq","acordeon","genial"],fields:[{name:"title",type:"text",help:'Título de la sección de FAQ (h2). Si se deja vacío, por defecto muestra "Preguntas frecuentes"',label:"Texto del título",mandatory:!1,example_value:"Preguntas frecuentes sobre GenIA-L"},{name:"items",type:"list",help:"Listado de preguntas y respuestas. Cada pregunta se muestra como un botón expandible. Al hacer click en una pregunta se abre su respuesta y se cierran las demás automáticamente (comportamiento exclusivo, solo una visible a la vez). Un segundo click en la pregunta abierta la cierra",label:"Listado de FAQs",mandatory:!1,items:{type:"object",fields:[{name:"question",type:"text",help:"Texto de la pregunta (aparece como botón). No admite HTML",label:"Texto de la pregunta",example_value:"¿Qué es GenIA-L y para qué sirve?"},{name:"answer",type:"text",help:"Texto de la respuesta que aparece al abrir la pregunta. NO admite HTML (se renderiza como texto plano dentro de un <p>)",label:"Texto de la respuesta",example_value:"GenIA-L es la plataforma de inteligencia artificial jurídica de Lefebvre que automatiza la redacción de contratos, la búsqueda de jurisprudencia y el análisis de documentos legales"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"FooterCorporativo",category:"Footer",name:"Footer Corporativo",description:"Footer de prueba en Astro",framework:"Astro",priority:1,tags:["footer"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Footer_2025_Napoles",category:"Footer",name:"Footer corporativo Lefebvre GenIA-L 2025",description:"Footer corporativo con 4 columnas de enlaces (Lefebvre, Explora GenIA-L, Portales, Tienda), logo, textos legales, 5 iconos de redes sociales y separador final. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["footer","genial"],fields:[{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena ÚNICAMENTE a los enlaces de la columna "Explora GenIA-L" (Casos reales, Conoce GenIA-L, Contacto). El resto de enlaces (Lefebvre, Portales Lefebvre, Tienda Online, RRSS y legales) están hardcodeados a dominios absolutos y no dependen de este campo. Déjalo vacío si los enlaces GenIA-L deben partir de la raíz del sitio',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Nara",category:"Formulario",name:"Formulario de suscripción al blog GenIA-L 2025",description:"Formulario de suscripción con título, descripción, campo de email y botón para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","formulario","suscripcion","genial"],fields:[{name:"title",type:"text",help:'Título del formulario (h2). Si se deja vacío, por defecto muestra "Suscríbete ahora". No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Suscríbete al blog de GenIA-L"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. Si se deja vacía, por defecto muestra "Recibe novedades de artículos que se publican en el blog". No admite HTML',label:"Texto de la descripción",mandatory:!1,example_value:"Recibe mensualmente los últimos artículos sobre legaltech, IA jurídica y transformación digital en el sector legal"},{name:"placeholder",type:"text",help:'Texto placeholder del campo de email (desaparece al escribir). Por defecto "Email"',label:"Placeholder del campo",mandatory:!1,example_value:"Tu correo electrónico"},{name:"buttonText",type:"text",help:'Texto del botón de envío. Por defecto "Suscríbete". También se usa como aria-label del botón',label:"Texto del botón",mandatory:!1,example_value:"Suscríbete"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Seul",category:"Formulario",name:"Formulario LF2 con imagen lateral GenIA-L 2025",description:"Formulario de contacto o captación de leads integrado con la plataforma LF2 de Lefebvre. El formulario se inyecta dinámicamente en el componente. Incluye imagen lateral opcional para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","formulario","lf2","genial"],fields:[{name:"title",type:"text",help:'Título (h2) del bloque. IMPORTANTE: solo se muestra si "Mostrar imagen" está desactivado. Con imagen activada, el título NO aparece. No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Solicita información sobre GenIA-L"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. IMPORTANTE: igual que el título, solo se muestra si "Mostrar imagen" está desactivado. No admite HTML',label:"Texto de la descripción",mandatory:!1,example_value:"Uno de nuestros comerciales se pondrá en contacto contigo en menos de 24 horas"},{name:"imageSrc",type:"image",help:'URL de la imagen lateral. Solo se renderiza si "Mostrar imagen" está activado',label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-3-4.png"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2 (incluye normalmente un código numérico + nombre). Este valor se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto. Si es erróneo, el formulario no se renderizará",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Solicita info GenIA-L"},{name:"businessAction",type:"text",help:"Identificador de acción comercial de LF2 que se asociará al lead. Si se deja vacío, no se envía acción comercial (el formulario funciona pero sin tracking de acción específica)",label:"businessAction del formulario en LF2",mandatory:!1,example_value:"27925"},{name:"orientation",type:"select",help:'Posición del formulario respecto a la imagen/texto. "Izquierda" coloca el formulario a la izquierda (flex-row); "Derecha" lo coloca a la derecha (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"loading",type:"select",help:'Tipo de carga de la imagen lateral (solo aplica si "Mostrar imagen" está activado). "eager" si el formulario está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showImage",type:"boolean",help:"Alterna entre dos layouts. ACTIVADO: muestra una imagen lateral grande junto al formulario (sin título ni descripción visibles). DESACTIVADO: muestra título y descripción (columna 1/3) + formulario (columna 1/2), sin imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Teruel",category:"Formulario",name:"Tarjeta con formulario LF2 en popup GenIA-L 2025",description:"Tarjeta horizontal con imagen + texto + botones. El botón secundario abre un popup con título, imagen, descripción y formulario LF2 inyectado dinámicamente. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","card","imagen","popup","formulario","lf2","genial"],fields:[{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y el texto a la derecha (flex-row). "Derecha" invierte el orden (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],mandatory:!1,example_value:"left"},{name:"bottomBorder",type:"boolean",help:"Activa/desactiva el borde inferior separador. Útil cuando se usan varias tarjetas seguidas (p. ej. dentro de Contenido_2026_Michigan) para poner borde en todas excepto la última",label:"Mostrar borde inferior",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"title",type:"text",help:"Título de la tarjeta (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML. También se usa como alt de la imagen principal",label:"Texto del título",mandatory:!1,example_value:"Automatización de contratos con IA"},{name:"description",type:"text",help:"Descripción de la tarjeta. Admite HTML (útil para listas, negritas, etc.). Se renderiza siempre",label:"Texto de la descripción",mandatory:!1,example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas"},{name:"imageSrc",type:"image",help:"URL de la imagen principal de la tarjeta (lateral al texto)",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"showBtn",type:"boolean",help:'Activa/desactiva el botón primario (enlace externo). Recuerda: también requiere "Url del enlace" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:'Texto del botón primario (enlace). Solo se muestra si "Mostrar botón" está activado Y "Url del enlace" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario (se abre en la misma pestaña). Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Url del enlace",mandatory:!1,example_value:"/genia-l/automatizacion-contratos"},{name:"showBtnModal",type:"boolean",help:"Activa/desactiva el botón que abre el popup con el formulario LF2. Si está activado, al hacer click se abre un modal con título, imagen, descripción y formulario LF2 inyectado dinámicamente",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el popup. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en PDF"},{name:"titleModal",type:"text",help:"Título (h2) que aparece dentro del popup, junto al formulario LF2",label:"Texto del título modal",mandatory:!1,example_value:"Descarga la guía de automatización jurídica"},{name:"subtitleModal",type:"text",help:'Subtítulo del modal. AVISO: este campo está DECLARADO en el carbin pero en el .astro está comentado (L76), por lo que NO se renderiza actualmente. Déjalo vacío o usa "Descripción del modal"',label:"Texto del subtítulo modal (no se usa)",mandatory:!1,example_value:""},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del popup, antes del formulario LF2. Admite HTML",label:"Texto de la descripción modal",mandatory:!1,example_value:"Déjanos tus datos y te enviaremos el whitepaper de 40 páginas con los casos de uso más relevantes"},{name:"imageModal",type:"image",help:"Imagen que aparece en la columna izquierda del popup (la portada de la guía, por ejemplo)",label:"Src de la imagen modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del popup para accesibilidad",label:"Alt de la imagen modal",mandatory:!1,example_value:"Portada de la guía de automatización jurídica"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2. Se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto dentro del popup. Si es erróneo, el formulario no se renderizará",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Descarga Guía Automatización"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2026_Wichita",category:"Formulario",name:"Formulario de GenIA-L 2026",description:"Formulario para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","video","genial"],fields:[{name:"title",type:"text",help:"Introduce el título del formulario",label:"Texto del título",mandatory:!1,example_value:"Pruébalo ya"},{name:"description",type:"text",help:"Introduce la descripción del formulario",label:"Texto de la descripción",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"mainContent",type:"textArea",help:"Introduce el texto principal del formulario",label:"Texto principal en HTML",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"imageSrc",type:"image",help:"Introduce la URL de la imagen del formulario",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-3-4.png"},{name:"lf2FormTitle",type:"text",help:"Introduce el título del formulario en LF2",label:"Título del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Vamos Más Allá"},{name:"businessAction",type:"text",help:"Introduce el identificador businessAction del formulario en LF2",label:"businessAction del formulario en LF2",mandatory:!1,example_value:"27925"},{name:"orientation",type:"select",help:"Selecciona la posición de la imagen respecto al formulario",label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"loading",type:"select",help:"Selecciona el tipo de carga de la imagen: diferida o inmediata",label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showImage",type:"boolean",help:"Indica si se debe mostrar la imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"GeometricShapeCard",category:"Imagen",name:"Tarjeta con figura geométrica",description:"Tarjeta con figura geométrica y botón de leer más.",framework:"Astro",tags:["card","interactivo"],fields:[{name:"title",type:"text",label:"Título",mandatory:!0,example_value:"Título de la tarjeta"},{name:"mainContent",type:"textArea",label:"Contenido principal (HTML)",mandatory:!0,example_value:"<p>Este es el <b>contenido</b> principal.</p>"},{name:"secondaryContent",type:"textArea",label:"Contenido secundario (HTML) que aparece al leer más",mandatory:!1,example_value:"<p>Este es el contenido secundario.</p>"},{name:"imageSrc",type:"image",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"figure",type:"select",label:"Tipo de figura",options:["Trapeze","Trapeze2","Leaf","Sphere"],options_labels:["Trapecio","Trapecio II","Hoja de parra","Esfera"],example_value:"Trapeze"},{name:"orientation",type:"select",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"gradiantIndex",type:"select",label:"Degradado",options:[0,1,2,3,4],options_labels:["Lefebvre España","Lefebvre Sarrut","Lefebvre Italia","Lefebvre Toovalu","Bandera de España"],example_value:0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"HeaderCorporativo",category:"Cabecera",name:"Header Corporativo",description:"Header de prueba en Astro",framework:"Astro",priority:1,tags:["header","navegación"],fields:[{name:"logo",type:"text",label:"URL del logo",mandatory:!1,example_value:"https://espacioasesoria.com/wp-content/themes/lf-espacioasesoria-theme/src/images/logo-espacio-asesoria.png"},{name:"alt",type:"text",label:"Texto alternativo",mandatory:!1,example_value:"https://lefebvre.es"},{name:"showLefebvreLogo",type:"boolean",label:"Mostrar logo de Lefebvre",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Hero_2025_Benidorm",category:"Contenido",name:"Hero de artículo de blog GenIA-L 2025",description:"Cabecera de artículo con fecha, título, descripción, imagen grande, autor y tags. Tiene dos variantes de layout (enriquecido horizontal o estándar vertical) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["banner","imagen","contenido","blog","hero","genial"],fields:[{name:"title",type:"text",help:"Título principal del artículo (h1). Admite HTML (se pasa al componente Repetidor_2025_Jaen)",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal: de la teoría a la práctica"},{name:"description",type:"text",help:"Descripción o entradilla del artículo. Admite HTML. Aparece debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Analizamos los casos reales en los que la IA generativa está transformando la labor diaria de los despachos de abogados"},{name:"image",type:"image",help:"Imagen principal del hero. Se usa como background-image con background-size: cover",label:"Imagen de fondo",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"date",type:"text",help:'Fecha de publicación del artículo. Se muestra en mayúsculas con espaciado entre letras (tracking wide). Acepta cualquier formato de texto (p. ej. "15 enero 2026" o "2026-01-15")',label:"Fecha de publicación",mandatory:!1,example_value:"15 enero 2026"},{name:"nameAuthor",type:"text",help:"Nombre del autor del artículo. Se pasa al componente Author_2025_Algarve",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Cargo o profesión del autor que aparece debajo del nombre",label:"Cargo del autor",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"imageAuthor",type:"image",help:"Foto de perfil del autor (imagen cuadrada, se mostrará con el borde que defina Author_2025_Algarve)",label:"Imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la foto del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"enriquecido",type:"boolean",help:"Alterna entre dos layouts del hero. ACTIVADO (enriquecido): layout horizontal con texto a la izquierda (fecha, título h1-blog-postenriquecido alineado a la izquierda, autor a ancho completo y tags) e imagen de fondo a la derecha (mitad del ancho). DESACTIVADO (estándar): layout vertical con texto centrado arriba (fecha, título h1-blog-post centrado, autor compacto y tags) e imagen de fondo grande debajo (530px de alto)",label:"Layout enriquecido",mandatory:!1,options:["false","true"],options_labels:["Estándar (vertical)","Enriquecido (horizontal)"],example_value:!0},{name:"minutes",type:"text",help:"Minutos estimados de lectura del artículo (sin unidades, solo el número). Se pasa al componente Tiempo_2025_Londres a través de Author_2025_Algarve. Si se deja vacío, el indicador de tiempo de lectura NO se muestra",label:"Minutos de lectura",mandatory:!1,example_value:"8"},{name:"itemsTagPost",type:"list",help:"Listado de tags/etiquetas del artículo. Cada tag se renderiza como una pastilla con el componente Tag_2025_Bolonia. Si se deja vacío, no aparecen tags",label:"Tags del artículo",mandatory:!1,items:{type:"object",fields:[{name:"tag",type:"text",help:"Nombre del tag (texto corto, típicamente una categoría jurídica o temática)",label:"Nombre del tag",example_value:"IA Jurídica"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Hero_2026_Benidorm",category:"Contenido",name:"Hero de artículo de blog GenIA-L 2026",description:"Cabecera de artículo con fecha, título, descripción, imagen grande, autor y tags. Tiene dos variantes de layout (enriquecido horizontal o estándar vertical) para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["banner","imagen","contenido","blog","hero","genial"],fields:[{name:"title",type:"text",help:"Título principal del artículo (h1). Admite HTML (se pasa al componente Contenido_2026_Jaen)",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal: de la teoría a la práctica"},{name:"description",type:"text",help:"Descripción o entradilla del artículo. Admite HTML. Aparece debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Analizamos los casos reales en los que la IA generativa está transformando la labor diaria de los despachos de abogados"},{name:"image",type:"image",help:"Imagen principal del hero. Se usa como background-image con background-size: cover",label:"Imagen de fondo",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"date",type:"text",help:'Fecha de publicación del artículo. Se muestra en mayúsculas con espaciado entre letras (tracking wide). Acepta cualquier formato de texto (p. ej. "15 enero 2026" o "2026-01-15")',label:"Fecha de publicación",mandatory:!1,example_value:"15 enero 2026"},{name:"nameAuthor",type:"text",help:"Nombre del autor del artículo. Se pasa al componente Author_2025_Algarve",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Cargo o profesión del autor que aparece debajo del nombre",label:"Cargo del autor",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"imageAuthor",type:"image",help:"Foto de perfil del autor. En layout enriquecido se muestra a 48px (fijo); en layout estándar usa el tamaño por defecto del componente Author_2025_Algarve (240px)",label:"Imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la foto del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"enriquecido",type:"boolean",help:"Alterna entre dos layouts del hero. ACTIVADO (enriquecido): layout horizontal con texto a la izquierda (fecha, título h1-blog-postenriquecido alineado a la izquierda, autor a ancho completo con imagen de 48px y tags) e imagen de fondo a la derecha (mitad del ancho). DESACTIVADO (estándar): layout vertical con texto centrado arriba (fecha, título h1-blog-post centrado, autor compacto y tags) e imagen de fondo grande debajo (530px de alto con esquinas redondeadas)",label:"Layout enriquecido",mandatory:!1,options:["false","true"],options_labels:["Estándar (vertical)","Enriquecido (horizontal)"],example_value:!0},{name:"minutes",type:"text",help:"Minutos estimados de lectura del artículo (sin unidades, solo el número). Se pasa al componente Tiempo_2025_Londres a través de Author_2025_Algarve. Si se deja vacío, el indicador de tiempo de lectura NO se muestra",label:"Minutos de lectura",mandatory:!1,example_value:"8"},{name:"itemsTagPost",type:"list",help:"Listado de tags/etiquetas del artículo. Cada tag se renderiza como una pastilla con el componente Tag_2025_Bolonia. Si se deja vacío, no aparecen tags",label:"Tags del artículo",mandatory:!1,items:{type:"object",fields:[{name:"tag",type:"text",help:"Nombre del tag (texto corto, típicamente una categoría jurídica o temática)",label:"Nombre del tag",example_value:"IA Jurídica"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"ImageTextSimple",category:"Imagen",name:"Contenido con imagen/video simple",description:"Contenido con imagen/video simple, título y texto",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",label:"Título",mandatory:!0,example_value:"Soluciones felinas para un mundo mejor"},{name:"description",type:"textArea",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p>En Lefebvre buscamos ofrecer a nuestros gatos una <b>vida mejor</b>.
|
|
31
31
|
Para ello, las adaptamos a las características y necesidades de cada empresa y sector, haciendo hincapié en los puntos críticos de cada uno de ellos para contribuir positivamente a su desarrollo. </p>
|
|
32
|
-
`},{name:"image",type:"image",label:"URL de la imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-1-1.png"},{name:"video",type:"video",label:"URL del video",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://www.youtube.com/embed/3gJIiEdYKR0"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Imagen_2025_Bogota",category:"Imagen",name:"Banner con imagen/vídeo de fondo y overlay GenIA-L 2025",description:"Banner con imagen o vídeo MP4 de fondo + overlay centrado con título, descripción y botón opcionales para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["banner","imagen","video","genial"],fields:[{name:"title",type:"text",help:'Título principal del banner (h3). Admite HTML. Se renderiza SIEMPRE (incluso cuando "Mostrar descripción" está desactivado)',label:"Texto del título",mandatory:!1,example_value:"GenIA-L, inteligencia artificial para tu despacho"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. Admite HTML. Solo se muestra si "Mostrar descripción" está activado',label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza tu trabajo diario con la primera plataforma de IA jurídica adaptada al Derecho español"},{name:"txtBtn",type:"text",help:'Texto del botón CTA. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"alt",type:"text",help:'Texto alternativo de la imagen de fondo para accesibilidad. Solo aplica si se usa imagen (no vídeo). Si se deja vacío, se usa el "Texto del título" como alt',label:"Alt de la imagen de fondo",mandatory:!1,example_value:"Imagen de fondo del banner de GenIA-L"},{name:"src",type:"image",help:"URL de la imagen de fondo. Mutuamente exclusivo con el vídeo en el editor, pero si se rellenan ambos en runtime, la IMAGEN tiene prioridad sobre el vídeo",label:"Imagen de fondo",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"iframeSrc",type:"video",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como <source type="video/mp4"> con autoplay, loop y muted. Solo se renderiza si "Imagen de fondo" está vacía',label:"URL del vídeo de fondo (MP4)",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/videos/genial/demo.mp4"},{name:"showBtn",type:"boolean",help:'Activa/desactiva el botón CTA superpuesto sobre la imagen. ATENCIÓN: no valida que "Enlace del botón" ni "Label del botón" tengan valor — si activas el botón sin texto/URL, aparece un botón vacío o con enlace inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"showDescription",type:"boolean",help:"Activa/desactiva la descripción bajo el título. ACTIVADO: muestra título + descripción. DESACTIVADO: muestra solo el título (con menos margen inferior)",label:"Mostrar descripción",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"color",type:"text",help:'Color del texto del título y descripción en formato hexadecimal (p. ej. "#ffffff", "#262626"). ATENCIÓN: Tailwind JIT no genera clases desde valores dinámicos, por lo que este valor requiere estar en la safelist del tailwind.config para que se aplique correctamente. Por defecto "#ffffff" (blanco)',label:"Color del texto (hex)",mandatory:!1,example_value:"#ffffff"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Imagen_2025_Fukushima",category:"Imagen",name:"Logo de certificación con descripción GenIA-L 2025",description:"Imagen de logotipo (certificaciones ISO, GDPR, etc.) con descripción breve, opcionalmente clicable. Pensado para usarse en grids dentro de otros componentes (p. ej. Contenido_2026_Tokyo). Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["imagen","genial","certificado","logo"],fields:[{name:"image",type:"image",help:"URL de la imagen del logotipo. Se renderiza a 80x80px con max-w-20 (el ancho real se ajusta al contenido). Si se deja vacía aparece imagen rota",label:"Imagen del logo",mandatory:!1,example_value:"https://lefebvre.es/genia-l/images/genial/img-iso4.webp"},{name:"altImage",type:"text",help:"Texto alternativo del logo para accesibilidad. Si se deja vacío, el atributo alt quedará sin valor",label:"Alt del logo",mandatory:!1,example_value:"Logo de certificación ISO 27001"},{name:"descriptionImage",type:"text",help:"Texto descriptivo que aparece debajo del logo (tamaño 14px, color gris). Admite HTML. Si se deja vacío, no aparece texto",label:"Texto bajo el logo",mandatory:!1,example_value:"ISO 27001 - Seguridad de la información"},{name:"link",type:"text",help:"URL de destino al hacer click. ACTIVADO (con URL): todo el bloque (imagen + texto) se envuelve en un <a> y es clicable. DESACTIVADO (vacío): el bloque se renderiza como divs separados sin navegación",label:"URL de destino (opcional)",mandatory:!1,example_value:"/genia-l/certificaciones/iso-27001"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Indice_2025_Taiwan",category:"Texto",name:"Índice de contenidos con enlaces ancla GenIA-L 2025",description:"Tabla de contenidos (TOC) con título y listado de enlaces ancla numerados automáticamente. Los enlaces navegan a ids internos de la misma página. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","indice","toc","genial"],fields:[{name:"titulo",type:"text",help:"Título del índice (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Índice de contenidos"},{name:"items",type:"list",help:'Listado de apartados del índice. Cada ítem se numera automáticamente (1., 2., 3...). El índice navega a los elementos de la misma página que tengan un id coincidente con el enlace (sin el "#")',label:"Listado de items del índice",mandatory:!1,items:{type:"object",fields:[{name:"titulo",type:"text",help:'Texto visible del ítem (se renderiza con su número ordinal: "1. Introducción", "2. ..."). No admite HTML',label:"Texto del ítem",example_value:"Introducción"},{name:"enlace",type:"text",help:'ID del elemento destino de la misma página, SIN el "#" (el componente lo añade automáticamente). Si se deja vacío, se GENERA automáticamente desde el título: minúsculas, sin acentos, espacios a guiones y sin caracteres especiales (p. ej. "Qué es GenIA-L" → "que-es-genial"). El elemento con ese id debe existir en la página',label:"ID del ancla (sin #)",example_value:"introduccion"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Modal_2025_Sagunto",category:"Formulario",name:"Botón CTA con modal y formulario LF2 GenIA-L 2025",description:"Botón CTA con colores personalizables que al pulsarse abre un modal (con backdrop blur) con imagen opcional, título, descripción HTML y formulario LF2 inyectado dinámicamente. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["boton","cta","modal","formulario","lf2","genial"],fields:[{name:"buttonText",type:"text",help:"Texto visible del botón CTA que abre el modal. Se ajusta al ancho del contenido (w-fit). No admite HTML",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"frontColor",type:"text",help:'Color del texto del botón. Acepta nombre CSS (ej. "white", "black") o código hex (ej. "#2134F1"). NO se invierte en hover (a diferencia de CTA_2025_Formentera)',label:"Color del texto (frontal)",mandatory:!1,example_value:"#ffffff"},{name:"backColor",type:"text",help:"Color de fondo del botón. Acepta nombre CSS o código hex",label:"Color de fondo",mandatory:!1,example_value:"#2134F1"},{name:"borderColor",type:"text",help:"Color del borde del botón (1px sólido). Acepta nombre CSS o código hex",label:"Color del borde",mandatory:!1,example_value:"#2134F1"},{name:"imageModal",type:"image",help:"Imagen que se muestra en la columna izquierda del modal. Si se deja vacía, el modal no incluye columna de imagen y el texto ocupa el ancho completo",label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura del dashboard de GenIA-L con el asistente IA"},{name:"titleModal",type:"text",help:"Título del modal (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Título del modal",mandatory:!1,example_value:"Descubre GenIA-L"},{name:"descriptionModal",type:"text",help:"Descripción del modal que aparece debajo del título, antes del formulario. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Déjanos tus datos y uno de nuestros comerciales se pondrá en contacto contigo para programar una demo personalizada"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2 (plataforma de leadforms de Lefebvre). Se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto. Si es erróneo, el formulario no se renderizará. Requiere que LeadformApiManagerClass y apiManager estén disponibles globalmente en la página",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Solicitar Demo GenIA-L"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Paginacion_2025_Paris",category:"Texto",name:"Paginación GenIA-L 2025",description:"Paginación para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"currentPage",type:"text",help:"Introduce el número de la página actual",label:"Página actual",mandatory:!1,example_value:"1"},{name:"totalPages",type:"text",help:"Introduce el número total de páginas",label:"Total de páginas",mandatory:!1,example_value:"10"},{name:"totalItems",type:"text",help:"Introduce el número total de elementos",label:"Total de elementos",mandatory:!1,example_value:"100"},{name:"itemsPerPage",type:"text",help:"Introduce el número de elementos por página",label:"Elementos por página",mandatory:!1,example_value:"10"},{name:"baseUrl",type:"text",help:"Introduce la URL base para la paginación",label:"URL base",mandatory:!1,example_value:"/blog"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"RRSS_2025_Pisa",category:"Imagen",name:"Iconos de redes sociales, email e imprimir/copiar GenIA-L 2025",description:"Bloque de iconos redondos con enlaces a redes sociales (Facebook, LinkedIn, X, WhatsApp, Instagram, YouTube), email y acciones de imprimir/copiar enlace. Cada icono aparece solo si su valor está relleno. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["rrss","redes sociales","genial"],fields:[{name:"facebook",type:"text",help:'URL del perfil de Facebook. Si se deja vacío, el icono de Facebook NO aparece. Se abre en nueva pestaña con rel="noopener noreferrer"',label:"URL del perfil de Facebook",mandatory:!1,example_value:"https://facebook.com/lefebvre.es"},{name:"linkedin",type:"text",help:"URL del perfil de LinkedIn. Si se deja vacío, el icono de LinkedIn NO aparece. Se abre en nueva pestaña",label:"URL del perfil de LinkedIn",mandatory:!1,example_value:"https://linkedin.com/company/lefebvre-es"},{name:"twitter",type:"text",help:"URL del perfil de Twitter/X. Si se deja vacío, el icono de X NO aparece. Se abre en nueva pestaña",label:"URL del perfil de X",mandatory:!1,example_value:"https://x.com/lefebvre_es"},{name:"whatsapp",type:"text",help:"URL/enlace de WhatsApp (formato wa.me/código+número o URL completa). Si se deja vacío, el icono de WhatsApp NO aparece. Se abre en nueva pestaña",label:"URL de WhatsApp",mandatory:!1,example_value:"https://wa.me/34600000000"},{name:"instagram",type:"text",help:"URL del perfil de Instagram. Si se deja vacío, el icono de Instagram NO aparece. Se abre en nueva pestaña",label:"URL del perfil de Instagram",mandatory:!1,example_value:"https://instagram.com/lefebvre_es"},{name:"youtube",type:"text",help:"URL del canal de YouTube. Si se deja vacío, el icono de YouTube NO aparece. Se abre en nueva pestaña",label:"URL del canal de YouTube",mandatory:!1,example_value:"https://youtube.com/@lefebvre"},{name:"email",type:"text",help:'Dirección de email SIN "mailto:" (el componente añade el prefijo automáticamente). Si se deja vacío, el icono de email NO aparece. Al hacer click abre el cliente de correo predeterminado',label:"Dirección de email",mandatory:!1,example_value:"contacto@lefebvre.es"},{name:"print",type:"boolean",help:"Si está activado, muestra un botón con icono de imprimir que ejecuta window.print() en la página actual. Si está desactivado, el botón NO aparece",label:"Mostrar botón de imprimir",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyLink",type:"boolean",help:'Si está activado, muestra un botón con icono de copiar enlace que copia la URL definida en "URL a copiar" al portapapeles (con tooltip de confirmación "Enlace copiado"). Si está desactivado, el botón NO aparece',label:"Mostrar botón de copiar enlace",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyUrl",type:"text",help:'URL que se copiará al portapapeles al pulsar el botón de copiar. Solo tiene efecto si "Mostrar botón de copiar enlace" está activado. Si se deja vacío, el botón copiará una cadena vacía',label:"URL a copiar al portapapeles",mandatory:!1,example_value:"https://lefebvre.es/genia-l/"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"ReactButton",category:"Call to Action",name:"Botón en React",description:"Botón de prueba en React",framework:"React",tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",label:"Texto del botón",mandatory:!0,example_value:"Botón en React"},{name:"href",type:"text",label:"Url de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Cabra",category:"Repetidor",name:"Repetidor de contenido con tabs GenIA-L 2025",description:"Repetidor de contenido con tabs para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"items",type:"list",help:"Introduce las pestañas del repetidor con su contenido",label:"Listado de pestañas",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Introduce el nombre de la pestaña",label:"Nombre de la pestaña",example_value:"Pestaña 1"},{name:"default",type:"boolean",help:"Indica si esta pestaña se muestra por defecto",label:"¿Pestaña por defecto?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"buttonUrl",type:"text",help:"Introduce la URL de destino del botón",label:"URL del botón",example_value:"https://lefebvre.es"},{name:"image",type:"image",help:"Introduce la URL de la imagen de la pestaña",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Dubai",category:"Repetidor",name:"Repetidor contenido titulo descripción y botón GenIA-L 2025",description:"Contenidos para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","carrusel","genial"],fields:[{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Texto del título",mandatory:!1,example_value:"Pruébalo ya"},{name:"description",type:"text",help:"Introduce la descripción del contenido",label:"Texto de la descripción",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"buttonText",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Label del botón",mandatory:!1,example_value:"Texto del botón"},{name:"buttonUrl",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"https://www.ejemplo.com"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Estocolmo",category:"Repetidor",name:"Repetidor de contenido GenIA-L sin campos 2025",description:"Repetidor de contenido para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"items",type:"list",help:"Introduce los items del repetidor de contenido",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Introduce el título del item",label:"Título",example_value:"Título de ejemplo"},{name:"description",type:"textArea",help:"Introduce la descripción del item",label:"Descripción",example_value:"Descripción de ejemplo"},{name:"link",type:"text",help:"Introduce la URL de destino del item",label:"Enlace",example_value:"https://lefebvre.es"},{name:"image",type:"image",help:"Introduce la URL de la imagen del item",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Introduce el texto alternativo de la imagen para accesibilidad",label:"Alt Imagen",example_value:"Imagen de ejemplo"},{name:"tag",type:"text",help:"Introduce la etiqueta del item",label:"Tag",example_value:"Lefebvre Preview"},{name:"author",type:"text",help:"Introduce el nombre del autor del contenido",label:"Nombre autor",example_value:"Juan Pérez"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Jaen",category:"Repetidor",name:"Repetidor de contenido con tabs e iconos GenIA-L 2025",description:"Repetidor de contenido con rrss y tags para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Texto del título",mandatory:!1,example_value:"Título del contenido"},{name:"subtitle",type:"text",help:"Introduce el subtítulo del contenido",label:"Texto del subtítulo",mandatory:!1,example_value:"Subtítulo de prueba"},{name:"number",type:"text",help:"Introduce el número de colegiado",label:"Número de colegiado",mandatory:!1,example_value:"1234"},{name:"description",type:"text",help:"Introduce la descripción del contenido",label:"Texto de la descripción",mandatory:!1,example_value:"Descripción de prueba"},{name:"image",type:"image",help:"Introduce la URL de la imagen",label:"Imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAlt",type:"text",help:"Introduce el texto alternativo de la imagen para accesibilidad",label:"Alt de la imagen",mandatory:!1,example_value:"Texto alternativo de la imagen"},{name:"tipo",type:"select",help:"Selecciona la etiqueta HTML del título",label:"Etiqueta del título",options:["h1-blog-categoria","h1-blog-autor","h1-blog-post","h1-blog-postenriquecido","h2-blog","h2","h3","h4"],options_labels:["H1 categoría blog","H1 autor blog","H1 post blog","H1 post enriquecido blog","H2 blog","H2","H3","H4"],example_value:"h2"},{name:"flexJustify",type:"select",help:"Selecciona la justificación horizontal del contenido",label:"Justificación del contenido",options:["justify-center","justify-start"],options_labels:["Centrado","Inicio"],example_value:"justify-center"},{name:"textAlign",type:"select",help:"Selecciona la alineación del texto",label:"Alineación del texto",options:["center","left","right"],options_labels:["Centro","Izquierda","Derecha"],example_value:"center"},{name:"descriptionStyle",type:"select",help:"Selecciona la tipografía de la descripción",label:"Estilo de la descripción",options:["poppins","inter"],options_labels:["Poppins","Inter"],example_value:"poppins"},{name:"imagePosition",type:"select",help:"Selecciona la posición de la imagen respecto al contenido",label:"Posición de la imagen",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"items",type:"list",help:"Introduce los enlaces de redes sociales y opciones de compartir",label:"Items de redes sociales",mandatory:!1,items:{type:"object",fields:[{name:"facebook",type:"text",help:"Introduce la URL del perfil de Facebook",label:"URL de Facebook",example_value:"https://facebook.com/usuario"},{name:"twitter",type:"text",help:"Introduce la URL del perfil de Twitter/X",label:"URL de Twitter/X",example_value:"https://x.com/usuario"},{name:"linkedin",type:"text",help:"Introduce la URL del perfil de LinkedIn",label:"URL de LinkedIn",example_value:"https://linkedin.com/in/usuario"},{name:"whatsapp",type:"text",help:"Introduce la URL de WhatsApp",label:"URL de WhatsApp",example_value:"https://wa.me/34600000000"},{name:"instagram",type:"text",help:"Introduce la URL del perfil de Instagram",label:"URL de Instagram",example_value:"https://instagram.com/usuario"},{name:"email",type:"text",help:"Introduce la dirección de email",label:"Email",example_value:"ejemplo@lefebvre.es"},{name:"print",type:"boolean",help:"Indica si se debe mostrar el botón de imprimir",label:"Mostrar botón imprimir",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"copyLink",type:"boolean",help:"Indica si se debe mostrar el botón de copiar enlace",label:"Mostrar botón copiar enlace",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Mallorca",category:"Repetidor",name:"Repetidor de contenido con icono GenIA-L 2025",description:"Repetidor de contenido con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"positionFlex",type:"select",help:"Selecciona la alineación vertical del contenido",label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:"Selecciona la posición horizontal del botón",label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:"Selecciona la orientación del icono respecto al texto",label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:"Selecciona la orientación del bloque de icono y texto",label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:"Selecciona la etiqueta HTML del título",label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 CENTER","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Label del botón",mandatory:!1,example_value:"Texto del botón"},{name:"buttonUrl",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"https://www.ejemplo.com"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Marruecos",category:"Repetidor",name:"Repetidor de contenido con icono GenIA-L sin campos 2025",description:"Repetidor de contenido para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","icono","genial"],fields:[{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Título",mandatory:!1,example_value:"Esto es un título"},{name:"buttonText",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Texto del botón",mandatory:!1,example_value:"Esto es un texto de botón"},{name:"buttonHref",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"#"},{name:"items",type:"list",help:"Introduce los items de contenido con icono",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"subtitle",type:"text",help:"Introduce el subtítulo del item",label:"Subtítulo",example_value:"Subtítulo de ejemplo"},{name:"description",type:"textArea",help:"Introduce la descripción del item",label:"Descripción",example_value:"Descripción de ejemplo"},{name:"icon",type:"select",help:"Selecciona el icono del item",label:"Icono",options:["chat","book","check"],options_labels:["Chat","Book","Check"],example_value:"chat"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Menorca",category:"Repetidor",name:"Otro repetidor de contenido con icono GenIA-L 2025",description:"Repetidor de contenido con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"positionFlex",type:"select",label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",label:"Label del botón",mandatory:!1,example_value:"Texto del botón"},{name:"buttonUrl",type:"text",label:"Enlace del botón",mandatory:!1,example_value:"https://www.ejemplo.com"},{name:"showBtn",type:"boolean",label:"Mostrar botón",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Michigan",category:"Repetidor",name:"Repetidor artículo con texto e imagen GenIA-L 2025",description:"Repetidor para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","imagen","genial"],fields:[{name:"orientation",type:"select",help:"Selecciona la posición de la imagen respecto al texto",label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"#"},{name:"showBtnModal",type:"boolean",help:"Indica si se debe mostrar el botón que abre el modal",label:"Mostrar botón Modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:"Introduce el texto del botón que abre el modal",label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en pdf"},{name:"items",type:"list",help:"Introduce el listado de artículos con texto e imagen",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Introduce el título del artículo",label:"Título",example_value:"Título de ejemplo"},{name:"description",type:"textArea",help:"Introduce la descripción del artículo",label:"Descripción",example_value:"Descripción de ejemplo"},{name:"image",type:"text",help:"Introduce la URL de la imagen del artículo",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageModal",type:"text",help:"Introduce la URL de la imagen del modal",label:"Imagen Modal",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"titleModal",type:"text",help:"Introduce el título del modal",label:"Título Modal",example_value:"Título del modal"},{name:"subtitleModal",type:"text",help:"Introduce el subtítulo del modal",label:"Subtítulo Modal",example_value:"Subtítulo del modal"},{name:"descriptionModal",type:"textArea",help:"Introduce la descripción del modal",label:"Descripción Modal",example_value:"Descripción del modal"},{name:"altModal",type:"text",help:"Introduce el texto alternativo de la imagen del modal para accesibilidad",label:"Alt Modal",example_value:"Imagen del modal"},{name:"lf2FormTitle",type:"text",help:"Introduce el nombre del formulario LF2 asociado",label:"Título Formulario LF2",example_value:"Nombre del formulario"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Mostoles",category:"Repetidor",name:"Repetidor de contenido imagen e icono GenIA-L sin campos 2025",description:"Repetidor de contenido para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","icono","genial"],fields:[{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Texto del título",mandatory:!1,example_value:"Hazlo ahora mismo"},{name:"description",type:"text",help:"Introduce la descripción del contenido",label:"Texto de la descripción",mandatory:!1,example_value:"Genera endorfinas"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"https://lefebvre.es"},{name:"showImage",type:"boolean",help:"Indica si se debe mostrar la imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"src",type:"image",help:"Introduce la URL de la imagen",label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"showBtnModal",type:"boolean",help:"Indica si se debe mostrar el botón que abre el modal",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:"Introduce el texto del botón que abre el modal",label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:"Introduce la URL de la imagen del modal",label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Introduce el texto alternativo de la imagen del modal para accesibilidad",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Texto alternativo de prueba"},{name:"titleModal",type:"text",help:"Introduce el título del modal",label:"Título del modal",mandatory:!1,example_value:"Título del modal"},{name:"descriptionModal",type:"text",help:"Introduce la descripción del modal",label:"Descripción del modal",mandatory:!1,example_value:"Descripción de prueba del modal"},{name:"lf2FormTitle",type:"text",help:"Introduce el nombre del formulario LF2 asociado",label:"Nombre del formulario LF2",mandatory:!1,example_value:"Nombre de formulario de prueba de LF2 asociado"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Orcasitas",category:"Repetidor",name:"Carrusel GenIA-L 2025",description:"Carrusel para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","carrusel","genial"],fields:[{name:"slidesToShow",type:"text",label:"Número de slides a mostrar",mandatory:!1,example_value:"3"},{name:"slidesToScroll",type:"text",label:"Número de slides a desplazar",mandatory:!1,example_value:"1"},{name:"loadScript",type:"boolean",label:"Cargar dependencias",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Oslo",category:"Repetidor",name:"Listado con popups GenIA-L 2025",description:"Listado con popups para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","popup","genial"],fields:[{name:"items",type:"list",help:"Introduce los items del listado con popups",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"Introduce la URL del iframe del vídeo",label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"text",help:"Introduce la URL de la imagen",label:"Url imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:"Introduce la descripción del item",label:"Descripción",example_value:"Descripción de ejemplo"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Quito",category:"Repetidor",name:"Texto repetidor con icono GenIA-L 2025",description:"Texto con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","genial"],fields:[{name:"title",type:"text",help:"Introduce el título del bloque de contenido",label:"Título del bloque",mandatory:!1,example_value:"Test"},{name:"items",type:"list",help:"Introduce los items de texto con icono",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"text",type:"text",help:"Introduce el texto del item",label:"Texto",example_value:"Texto de ejemplo"},{name:"icon",type:"select",help:"Selecciona el icono del item",label:"Icono",options:["phone","email","locator"],options_labels:["Télefono","email","Localización"],example_value:"phone"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Seattle",category:"Repetidor",name:"Repetidor con cards GenIA-L 2025",description:"Repetidor con tarjetas para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["repetidor","cards","genial"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Sevilla",category:"Repetidor",name:"Repetidor con Popup bloque GenIA-L 2025",description:"Repetidor con texto bloque para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["repetidor","popup","texto","imagen","genial"],fields:[{name:"showIco",type:"boolean",help:"Indica si se debe mostrar el icono",label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Texto del título",mandatory:!1,example_value:"Hazlo ahora mismo"},{name:"description",type:"text",help:"Introduce la descripción del contenido",label:"Texto de la descripción",mandatory:!1,example_value:"Genera endorfinas"},{name:"orientation",type:"select",help:"Selecciona la posición de la imagen respecto al texto",label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"flexOrientation",type:"select",help:"Selecciona la orientación del contenido: fila o columna",label:"Orientación del contenido",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"showImage",type:"boolean",help:"Indica si se debe mostrar la imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:"Introduce la URL de la imagen",label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"loading",type:"select",help:"Selecciona el tipo de carga de la imagen: diferida o inmediata",label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"#"},{name:"showBtnModal",type:"boolean",help:"Indica si se debe mostrar el botón que abre el modal",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:"Introduce el texto del botón que abre el modal",label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:"Introduce la URL de la imagen del modal",label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Introduce el texto alternativo de la imagen del modal para accesibilidad",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Texto alternativo de prueba"},{name:"titleModal",type:"text",help:"Introduce el título del modal",label:"Título del modal",mandatory:!1,example_value:"Título de prueba"},{name:"descriptionModal",type:"text",help:"Introduce la descripción del modal",label:"Descripción del modal",mandatory:!1,example_value:"Descripción de prueba"},{name:"lf2FormTitle",type:"text",help:"Introduce el nombre del formulario LF2 asociado",label:"Nombre del formulario LF2",mandatory:!1,example_value:"Nombre del formulario LF2 asociado"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Tokyo",category:"Repetidor",name:"Repetidor de contenido con bloque GenIA-L 2025",description:"Repetidor de contenido para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"title",type:"text",label:"Texto del título",mandatory:!1,example_value:"Pruébalo ya"},{name:"description",type:"text",label:"Texto de la descripción",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"buttonText",type:"text",label:"Label del botón",mandatory:!1,example_value:"Texto del botón"},{name:"buttonUrl",type:"text",label:"Enlace del botón",mandatory:!1,example_value:"https://www.ejemplo.com"},{name:"showBtn",type:"boolean",label:"Mostrar botón",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Ubeda",category:"Repetidor",name:"Repetidor de contenido al texto bloque GenIA-L 2025",description:"Repetidor con texto bloque para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","texto","genial"],fields:[{name:"items",type:"list",help:"Introduce los bloques de contenido con título y descripción",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Introduce el título del bloque",label:"Título",example_value:"Título de ejemplo"},{name:"description",type:"textArea",help:"Introduce la descripción del bloque",label:"Descripción",example_value:"Descripción de ejemplo"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Yakarta",category:"Repetidor",name:"Listado vídeos acordeón GenIA-L 2025",description:"Listado de vídeos en acordeón para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["acordeon","video","genial"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"SEO_Head_Section",category:"SEO",name:"SEO Head Section",description:"Sección de encabezado SEO para mejorar la visibilidad en buscadores",framework:"Astro",priority:1,tags:["seo","genial"],fields:[{name:"title",type:"text",help:"Título para buscadores",label:"Título de la página",mandatory:!1,example_value:"Lefebvre"},{name:"description",type:"text",help:"Descripción para buscadores",label:"Descripción de la página",mandatory:!1,example_value:""},{name:"canonical",type:"text",help:"URL canónica de la página",label:"URL canónica",mandatory:!1,example_value:""},{name:"shareImgSrc",type:"text",help:"Imagen al compartir en RRSS",label:"Src de la imagen para compartir",mandatory:!1,example_value:"https://www.ejemplo.com/imagen.jpg"},{name:"robots",type:"select",help:"Directiva de indexación",label:"Indexación por parte de los motores de búsqueda",options:["index, follow","noindex, nofollow","index, nofollow","noindex, follow"],options_labels:["Indexar y seguir enlaces","No indexar ni seguir enlaces","Indexar pero no seguir enlaces","No indexar pero seguir enlaces"],example_value:"index, follow"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Separador_2025_Reinosa",category:"Separador",name:"Separador con gradiente corporativo GenIA-L 2025",description:"Barra horizontal de 4px con el gradiente de colores corporativos GenIA-L (indigo → azul → rosa). Componente sin parámetros configurables. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["separador","gradiente","spectrum","genial"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Separador_2025_Toledo",category:"Separador",name:"Separador con línea gris GenIA-L 2025",description:"Línea horizontal gris (border-top 1px color #B6B7BB) para separar secciones de contenido. Componente sin parámetros configurables. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["separador","hr","linea","genial"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Share_2025_Florencia",category:"Contenido",name:"Botones para compartir contenido GenIA-L 2025",description:"Botones de compartir que generan automáticamente las URLs de intent de cada red social (Facebook sharer, LinkedIn share, X/Twitter tweet, WhatsApp send, mailto). Incluye además imprimir y copiar al portapapeles. Cada botón se activa/desactiva con un boolean. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["share","compartir","rrss","genial"],fields:[{name:"url",type:"text",help:"URL del contenido a compartir. Se codifica (encodeURIComponent) y se inyecta en los parámetros de compartir de cada red social",label:"URL del contenido",mandatory:!1,example_value:"https://lefebvre.es/genia-l/blog/articulo-ejemplo"},{name:"title",type:"text",help:"Título del contenido a compartir. Se usa en Twitter/X (texto del tweet), WhatsApp (texto del mensaje) y Email (asunto). Facebook y LinkedIn no lo usan porque extraen el título de la meta og:title",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal"},{name:"facebook",type:"boolean",help:"Si está activado, muestra el botón de compartir en Facebook (abre el sharer oficial con la URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón Facebook",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"linkedin",type:"boolean",help:"Si está activado, muestra el botón de compartir en LinkedIn (abre el share-offsite con la URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón LinkedIn",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"twitter",type:"boolean",help:"Si está activado, muestra el botón de compartir en X (abre el intent/tweet con URL y título precargados). Si está desactivado, NO aparece el botón",label:"Mostrar botón X (Twitter)",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"whatsapp",type:"boolean",help:"Si está activado, muestra el botón de compartir por WhatsApp (abre api.whatsapp.com/send con título + URL en el mensaje). Si está desactivado, NO aparece el botón",label:"Mostrar botón WhatsApp",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"email",type:"boolean",help:"Si está activado, muestra el botón de compartir por Email (abre el cliente de correo con asunto=título y cuerpo=URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón Email",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"print",type:"boolean",help:"Si está activado, muestra un botón con icono de imprimir que ejecuta window.print() en la página actual. Si está desactivado, el botón NO aparece",label:"Mostrar botón imprimir",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyLink",type:"boolean",help:'Si está activado, muestra un botón con icono de copiar enlace que copia la URL definida en "URL del contenido" al portapapeles (con tooltip de confirmación "Enlace copiado"). Si está desactivado, el botón NO aparece',label:"Mostrar botón copiar enlace",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"SpectrumSeparator",category:"Separador",name:"Separador spectrum con degradado corporativo",description:"Spectrum separador",framework:"Astro",priority:1,tags:["separador","lefebvre.es"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Sumario_2025_Beijing",category:"Texto",name:"Sumario con iconos de check GenIA-L 2025",description:"Lista de contenido (sumario) con título h2 y viñetas con iconos de check circular. Soporta dos modos: lista de strings o HTML libre. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","sumario","lista","genial"],fields:[{name:"title",type:"text",help:"Título del sumario (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"En este artículo"},{name:"contentSumario",type:"html",help:'Sumario en HTML libre (normalmente <ul><li>...</li></ul>). Si tiene valor, este campo TIENE PRIORIDAD sobre "Items del sumario" — el campo items se ignora. Los <li> reciben el icono de check automático por CSS global',label:"Sumario en HTML",mandatory:!1,example_value:"<ul><li>Contexto normativo</li><li>Casos reales de uso</li><li>Buenas prácticas</li></ul>"},{name:"items",type:"list",help:'Listado de ítems del sumario (strings simples, sin HTML). Se renderiza como <ul> con iconos de check. Solo se usa si "Sumario en HTML" está vacío',label:"Items del sumario (texto plano)",mandatory:!1,items:{type:"text",example_value:["Introducción a la IA jurídica","Casos reales de uso","Buenas prácticas"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tabla_2025_Fuenlabrada",category:"Texto",name:"Tabla comparativa de dos columnas GenIA-L 2025",description:"Tabla comparativa con título, descripción y dos columnas (izquierda vs derecha) con sus respectivos ítems. Layout responsive: apilado en móvil, grid con flecha separadora (→) en desktop. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","tabla","comparativa","genial"],fields:[{name:"title",type:"text",help:"Título superior de la tabla (h2). Solo se muestra si tiene valor; si se deja vacío, NO aparece",label:"Texto del título",mandatory:!1,example_value:"Compara nuestros planes"},{name:"description",type:"text",help:"Descripción debajo del título. Admite HTML. Solo se muestra si tiene valor",label:"Texto de la descripción",mandatory:!1,example_value:"Elige el plan que mejor se adapte a las necesidades de tu despacho"},{name:"leftTitle",type:"text",help:"Título de la columna izquierda",label:"Título columna izquierda",mandatory:!1,example_value:"Plan Profesional"},{name:"leftItems",type:"list",help:"Ítems de la columna izquierda (strings simples, sin HTML). Se renderizan en filas con separadores",label:"Ítems columna izquierda",mandatory:!1,items:{type:"text",example_value:["Consultas ilimitadas","Soporte prioritario","Acceso a webinars"]}},{name:"rightTitle",type:"text",help:"Título de la columna derecha",label:"Título columna derecha",mandatory:!1,example_value:"Plan Básico"},{name:"rightItems",type:"list",help:"Ítems de la columna derecha (strings simples, sin HTML). TERNARIO INTERNO: si hay contenido en AMBAS columnas → grid de 2 columnas con flecha separadora en desktop; si solo una tiene contenido → se renderiza una única tabla con esa columna. El número de filas en desktop se ajusta al máximo entre ambas columnas",label:"Ítems columna derecha",mandatory:!1,items:{type:"text",example_value:["Consultas limitadas a 50/mes","Soporte por email","Sin acceso a webinars"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tag_2025_Bolonia",category:"Texto",name:"Listado de tags GenIA-L 2025",description:"Grupo de etiquetas/pastillas horizontales con estilo redondeado y fondo azul muy claro. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","tag","etiqueta","genial"],fields:[{name:"tags",type:"list",help:"Listado de etiquetas/tags. Cada una se renderiza como una pastilla redondeada con borde gris claro y fondo azul muy claro. Si se deja vacío, no aparece ningún tag",label:"Listado de tags",mandatory:!1,items:{type:"text",example_value:["IA Jurídica","Legaltech","Automatización"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TestPadre",category:"Texto",name:"TestPadre",description:"TestPadre",framework:"Astro",priority:1,tags:["texto"],fields:[{name:"texto",type:"text",help:"Texto libre",label:"Texto",mandatory:!1,example_value:"Prueba de texto"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Test_2026_Gaza",category:"TEST",name:"Ejemplo TESTEO Escuelas - Gaza",description:"Este es un componente para tener todas las opciones de los Carbins",framework:"Astro",priority:1,tags:["prueba","carbin","gaza","test"],fields:[{name:"nombreEscuela",type:"text",help:"Nombre de la escuela",label:"Nombre de la escuela",mandatory:!1,example_value:"Elementary School No. 1"},{name:"descripcionEscuela",type:"textArea",help:"Descripción de la escuela",label:"Descripción de la escuela",mandatory:!1,example_value:"Típico instituto de educación americano con alumnos vampiros y hombres lobo a lo Crepúsculo."},{name:"estaEnEEUU",type:"boolean",help:"Si la escuela está en EE. UU.",label:"¿Está en EE. UU.?",mandatory:!1,example_value:!0},{name:"tipoEscuela",type:"select",help:"Tipo de escuela",label:"Tipo de escuela",options:["Pública","Privada","Concertada"],options_labels:["Escuela pública","Escuela privada","Escuela concertada"],example_value:"Pública"},{name:"nombresAlumnosProblematicos",type:"list",help:"Lista de alumnos conflictivos",label:"Nombres de alumnos problemáticos",mandatory:!1,items:{type:"text",example_value:["Edward Cullen","Bella Swan","Jacob Black"]}},{name:"fichasProfesores",type:"list",help:"Datos de cada profesor",label:"Fichas de los profesores",mandatory:!1,items:{type:"object",fields:[{name:"nombre",type:"text",help:"Nombre del profesor",label:"Nombre del profesor",example_value:"Profesor Smith"},{name:"descripcion",type:"textArea",help:"Descripción del profesor",label:"Descripción",example_value:"Profesor de matemáticas, estricto pero justo. Siempre lleva gafas y tiene un bigote peculiar."},{name:"asignatura",type:"select",help:"Materia que imparte",label:"Asignatura",options:["Matemáticas","Historia","Física"],options_labels:["Matemáticas aplicadas a las CC. SS.","Historia de la humanidad","Física y química"],example_value:"Matemáticas"},{name:"esViolento",type:"boolean",help:"Si el profesor es violento",label:"¿Es un profesor violento?",example_value:!1}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextBox",category:"Texto",name:"Caja de texto",description:"Caja de texto en Astro",framework:"Astro",priority:1,tags:["texto"],fields:[{name:"htmlCode",type:"textArea",help:"Código HTML de la caja",label:"Código HTML",mandatory:!1,example_value:"<p>Lo que quieras...</p>"},{name:"addShadow",type:"boolean",help:"Activar sombra en la caja",label:"Añadir sombra",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextImageBackground",category:"Contenido",name:"Contenido con imagen de fondo",description:"Tarjeta con imagen de background y texto para destacar contenido",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Gatos<br>Haciendo cosas de gatos<br>Se un gato Lefebvre"},{name:"description",type:"textArea",help:"Descripción detallada en HTML",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p>Gatos que a lo largo de la historia han demostrado ser compañeros leales y fascinantes.</p>
|
|
32
|
+
`},{name:"image",type:"image",label:"URL de la imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-1-1.png"},{name:"video",type:"video",label:"URL del video",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://www.youtube.com/embed/3gJIiEdYKR0"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Imagen_2025_Bogota",category:"Imagen",name:"Banner con imagen/vídeo de fondo y overlay GenIA-L 2025",description:"Banner con imagen o vídeo MP4 de fondo + overlay centrado con título, descripción y botón opcionales para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["banner","imagen","video","genial"],fields:[{name:"title",type:"text",help:'Título principal del banner (h3). Admite HTML. Se renderiza SIEMPRE (incluso cuando "Mostrar descripción" está desactivado)',label:"Texto del título",mandatory:!1,example_value:"GenIA-L, inteligencia artificial para tu despacho"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. Admite HTML. Solo se muestra si "Mostrar descripción" está activado',label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza tu trabajo diario con la primera plataforma de IA jurídica adaptada al Derecho español"},{name:"txtBtn",type:"text",help:'Texto del botón CTA. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"alt",type:"text",help:'Texto alternativo de la imagen de fondo para accesibilidad. Solo aplica si se usa imagen (no vídeo). Si se deja vacío, se usa el "Texto del título" como alt',label:"Alt de la imagen de fondo",mandatory:!1,example_value:"Imagen de fondo del banner de GenIA-L"},{name:"src",type:"image",help:"URL de la imagen de fondo. Mutuamente exclusivo con el vídeo en el editor, pero si se rellenan ambos en runtime, la IMAGEN tiene prioridad sobre el vídeo",label:"Imagen de fondo",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"iframeSrc",type:"video",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como <source type="video/mp4"> con autoplay, loop y muted. Solo se renderiza si "Imagen de fondo" está vacía',label:"URL del vídeo de fondo (MP4)",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/videos/genial/demo.mp4"},{name:"showBtn",type:"boolean",help:'Activa/desactiva el botón CTA superpuesto sobre la imagen. ATENCIÓN: no valida que "Enlace del botón" ni "Label del botón" tengan valor — si activas el botón sin texto/URL, aparece un botón vacío o con enlace inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"showDescription",type:"boolean",help:"Activa/desactiva la descripción bajo el título. ACTIVADO: muestra título + descripción. DESACTIVADO: muestra solo el título (con menos margen inferior)",label:"Mostrar descripción",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"color",type:"text",help:'Color del texto del título y descripción en formato hexadecimal (p. ej. "#ffffff", "#262626"). ATENCIÓN: Tailwind JIT no genera clases desde valores dinámicos, por lo que este valor requiere estar en la safelist del tailwind.config para que se aplique correctamente. Por defecto "#ffffff" (blanco)',label:"Color del texto (hex)",mandatory:!1,example_value:"#ffffff"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Imagen_2025_Fukushima",category:"Imagen",name:"Logo de certificación con descripción GenIA-L 2025",description:"Imagen de logotipo (certificaciones ISO, GDPR, etc.) con descripción breve, opcionalmente clicable. Pensado para usarse en grids dentro de otros componentes (p. ej. Contenido_2026_Tokyo). Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["imagen","genial","certificado","logo"],fields:[{name:"image",type:"image",help:"URL de la imagen del logotipo. Se renderiza a 80x80px con max-w-20 (el ancho real se ajusta al contenido). Si se deja vacía aparece imagen rota",label:"Imagen del logo",mandatory:!1,example_value:"https://lefebvre.es/genia-l/images/genial/img-iso4.webp"},{name:"altImage",type:"text",help:"Texto alternativo del logo para accesibilidad. Si se deja vacío, el atributo alt quedará sin valor",label:"Alt del logo",mandatory:!1,example_value:"Logo de certificación ISO 27001"},{name:"descriptionImage",type:"text",help:"Texto descriptivo que aparece debajo del logo (tamaño 14px, color gris). Admite HTML. Si se deja vacío, no aparece texto",label:"Texto bajo el logo",mandatory:!1,example_value:"ISO 27001 - Seguridad de la información"},{name:"link",type:"text",help:"URL de destino al hacer click. ACTIVADO (con URL): todo el bloque (imagen + texto) se envuelve en un <a> y es clicable. DESACTIVADO (vacío): el bloque se renderiza como divs separados sin navegación",label:"URL de destino (opcional)",mandatory:!1,example_value:"/genia-l/certificaciones/iso-27001"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Indice_2025_Taiwan",category:"Texto",name:"Índice de contenidos con enlaces ancla GenIA-L 2025",description:"Tabla de contenidos (TOC) con título y listado de enlaces ancla numerados automáticamente. Los enlaces navegan a ids internos de la misma página. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","indice","toc","genial"],fields:[{name:"titulo",type:"text",help:"Título del índice (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Índice de contenidos"},{name:"items",type:"list",help:'Listado de apartados del índice. Cada ítem se numera automáticamente (1., 2., 3...). El índice navega a los elementos de la misma página que tengan un id coincidente con el enlace (sin el "#")',label:"Listado de items del índice",mandatory:!1,items:{type:"object",fields:[{name:"titulo",type:"text",help:'Texto visible del ítem (se renderiza con su número ordinal: "1. Introducción", "2. ..."). No admite HTML',label:"Texto del ítem",example_value:"Introducción"},{name:"enlace",type:"text",help:'ID del elemento destino de la misma página, SIN el "#" (el componente lo añade automáticamente). Si se deja vacío, se GENERA automáticamente desde el título: minúsculas, sin acentos, espacios a guiones y sin caracteres especiales (p. ej. "Qué es GenIA-L" → "que-es-genial"). El elemento con ese id debe existir en la página',label:"ID del ancla (sin #)",example_value:"introduccion"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Modal_2025_Sagunto",category:"Formulario",name:"Botón CTA con modal y formulario LF2 GenIA-L 2025",description:"Botón CTA con colores personalizables que al pulsarse abre un modal (con backdrop blur) con imagen opcional, título, descripción HTML y formulario LF2 inyectado dinámicamente. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["boton","cta","modal","formulario","lf2","genial"],fields:[{name:"buttonText",type:"text",help:"Texto visible del botón CTA que abre el modal. Se ajusta al ancho del contenido (w-fit). No admite HTML",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"frontColor",type:"text",help:'Color del texto del botón. Acepta nombre CSS (ej. "white", "black") o código hex (ej. "#2134F1"). NO se invierte en hover (a diferencia de CTA_2025_Formentera)',label:"Color del texto (frontal)",mandatory:!1,example_value:"#ffffff"},{name:"backColor",type:"text",help:"Color de fondo del botón. Acepta nombre CSS o código hex",label:"Color de fondo",mandatory:!1,example_value:"#2134F1"},{name:"borderColor",type:"text",help:"Color del borde del botón (1px sólido). Acepta nombre CSS o código hex",label:"Color del borde",mandatory:!1,example_value:"#2134F1"},{name:"imageModal",type:"image",help:"Imagen que se muestra en la columna izquierda del modal. Si se deja vacía, el modal no incluye columna de imagen y el texto ocupa el ancho completo",label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura del dashboard de GenIA-L con el asistente IA"},{name:"titleModal",type:"text",help:"Título del modal (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Título del modal",mandatory:!1,example_value:"Descubre GenIA-L"},{name:"descriptionModal",type:"text",help:"Descripción del modal que aparece debajo del título, antes del formulario. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Déjanos tus datos y uno de nuestros comerciales se pondrá en contacto contigo para programar una demo personalizada"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2 (plataforma de leadforms de Lefebvre). Se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto. Si es erróneo, el formulario no se renderizará. Requiere que LeadformApiManagerClass y apiManager estén disponibles globalmente en la página",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Solicitar Demo GenIA-L"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Paginacion_2025_Paris",category:"Texto",name:"Paginación GenIA-L 2025",description:"Paginación para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"urlMode",type:"select",help:'Formato de las URLs de paginación: "path" para /page/2/ o "query" para /?page=2',label:"Modo de URL",mandatory:!1,options:["path","query"],options_labels:["Path (/page/2)","Query string (?page=2)"],example_value:"path"},{name:"currentPage",type:"text",help:"Introduce el número de la página actual",label:"Página actual",mandatory:!1,example_value:"1"},{name:"totalPages",type:"text",help:"Introduce el número total de páginas",label:"Total de páginas",mandatory:!1,example_value:"10"},{name:"totalItems",type:"text",help:"Introduce el número total de elementos",label:"Total de elementos",mandatory:!1,example_value:"100"},{name:"itemsPerPage",type:"text",help:"Introduce el número de elementos por página",label:"Elementos por página",mandatory:!1,example_value:"10"},{name:"baseUrl",type:"text",help:"Introduce la URL base para la paginación",label:"URL base",mandatory:!1,example_value:"/blog"},{name:"trailingSlash",type:"boolean",help:'Indica si las URLs de paginación deben incluir / al final del path. En modo "query" determina si queda url.es/?page=2 o url.es?page=2',label:"Trailing slash",mandatory:!1,example_value:"false"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"RRSS_2025_Pisa",category:"Imagen",name:"Iconos de redes sociales, email e imprimir/copiar GenIA-L 2025",description:"Bloque de iconos redondos con enlaces a redes sociales (Facebook, LinkedIn, X, WhatsApp, Instagram, YouTube), email y acciones de imprimir/copiar enlace. Cada icono aparece solo si su valor está relleno. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["rrss","redes sociales","genial"],fields:[{name:"facebook",type:"text",help:'URL del perfil de Facebook. Si se deja vacío, el icono de Facebook NO aparece. Se abre en nueva pestaña con rel="noopener noreferrer"',label:"URL del perfil de Facebook",mandatory:!1,example_value:"https://facebook.com/lefebvre.es"},{name:"linkedin",type:"text",help:"URL del perfil de LinkedIn. Si se deja vacío, el icono de LinkedIn NO aparece. Se abre en nueva pestaña",label:"URL del perfil de LinkedIn",mandatory:!1,example_value:"https://linkedin.com/company/lefebvre-es"},{name:"twitter",type:"text",help:"URL del perfil de Twitter/X. Si se deja vacío, el icono de X NO aparece. Se abre en nueva pestaña",label:"URL del perfil de X",mandatory:!1,example_value:"https://x.com/lefebvre_es"},{name:"instagram",type:"text",help:"URL del perfil de Instagram. Si se deja vacío, el icono de Instagram NO aparece. Se abre en nueva pestaña",label:"URL del perfil de Instagram",mandatory:!1,example_value:"https://instagram.com/lefebvre_es"},{name:"youtube",type:"text",help:"URL del canal de YouTube. Si se deja vacío, el icono de YouTube NO aparece. Se abre en nueva pestaña",label:"URL del canal de YouTube",mandatory:!1,example_value:"https://youtube.com/@lefebvre"},{name:"whatsapp",type:"text",help:"URL/enlace de WhatsApp (formato wa.me/código+número o URL completa). Si se deja vacío, el icono de WhatsApp NO aparece. Se abre en nueva pestaña",label:"URL de WhatsApp",mandatory:!1,example_value:"https://wa.me/34600000000"},{name:"email",type:"text",help:'Dirección de email SIN "mailto:" (el componente añade el prefijo automáticamente). Si se deja vacío, el icono de email NO aparece. Al hacer clic abre el cliente de correo predeterminado',label:"Dirección de email",mandatory:!1,example_value:"contacto@lefebvre.es"},{name:"print",type:"boolean",help:"Si está activado, muestra un botón con icono de imprimir que ejecuta window.print() en la página actual. Si está desactivado, el botón NO aparece",label:"Mostrar botón de imprimir",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyLink",type:"boolean",help:'Si está activado, muestra un botón con icono de copiar enlace que copia la URL definida en "URL a copiar" al portapapeles (con tooltip de confirmación "Enlace copiado"). Si está desactivado, el botón NO aparece',label:"Mostrar botón de copiar enlace",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyUrl",type:"text",help:'URL que se copiará al portapapeles al pulsar el botón de copiar. Solo tiene efecto si "Mostrar botón de copiar enlace" está activado. Si se deja vacío, el botón copiará una cadena vacía',label:"URL a copiar al portapapeles",mandatory:!1,example_value:"https://lefebvre.es/genia-l/"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"ReactButton",category:"Call to Action",name:"Botón en React",description:"Botón de prueba en React",framework:"React",tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",label:"Texto del botón",mandatory:!0,example_value:"Botón en React"},{name:"href",type:"text",label:"Url de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Cabra",category:"Repetidor",name:"Repetidor de contenido con tabs GenIA-L 2025",description:"Repetidor de contenido con tabs para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"items",type:"list",help:"Introduce las pestañas del repetidor con su contenido",label:"Listado de pestañas",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Introduce el nombre de la pestaña",label:"Nombre de la pestaña",example_value:"Pestaña 1"},{name:"default",type:"boolean",help:"Indica si esta pestaña se muestra por defecto",label:"¿Pestaña por defecto?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"buttonUrl",type:"text",help:"Introduce la URL de destino del botón",label:"URL del botón",example_value:"https://lefebvre.es"},{name:"image",type:"image",help:"Introduce la URL de la imagen de la pestaña",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Dubai",category:"Repetidor",name:"Repetidor contenido titulo descripción y botón GenIA-L 2025",description:"Contenidos para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","carrusel","genial"],fields:[{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Texto del título",mandatory:!1,example_value:"Pruébalo ya"},{name:"description",type:"text",help:"Introduce la descripción del contenido",label:"Texto de la descripción",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"buttonText",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Label del botón",mandatory:!1,example_value:"Texto del botón"},{name:"buttonUrl",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"https://www.ejemplo.com"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Estocolmo",category:"Repetidor",name:"Repetidor de contenido GenIA-L sin campos 2025",description:"Repetidor de contenido para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"items",type:"list",help:"Introduce los items del repetidor de contenido",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Introduce el título del item",label:"Título",example_value:"Título de ejemplo"},{name:"description",type:"textArea",help:"Introduce la descripción del item",label:"Descripción",example_value:"Descripción de ejemplo"},{name:"link",type:"text",help:"Introduce la URL de destino del item",label:"Enlace",example_value:"https://lefebvre.es"},{name:"image",type:"image",help:"Introduce la URL de la imagen del item",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Introduce el texto alternativo de la imagen para accesibilidad",label:"Alt Imagen",example_value:"Imagen de ejemplo"},{name:"tag",type:"text",help:"Introduce la etiqueta del item",label:"Tag",example_value:"Lefebvre Preview"},{name:"author",type:"text",help:"Introduce el nombre del autor del contenido",label:"Nombre autor",example_value:"Juan Pérez"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Jaen",category:"Repetidor",name:"Repetidor de contenido con tabs e iconos GenIA-L 2025",description:"Repetidor de contenido con rrss y tags para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Texto del título",mandatory:!1,example_value:"Título del contenido"},{name:"subtitle",type:"text",help:"Introduce el subtítulo del contenido",label:"Texto del subtítulo",mandatory:!1,example_value:"Subtítulo de prueba"},{name:"number",type:"text",help:"Introduce el número de colegiado",label:"Número de colegiado",mandatory:!1,example_value:"1234"},{name:"description",type:"text",help:"Introduce la descripción del contenido",label:"Texto de la descripción",mandatory:!1,example_value:"Descripción de prueba"},{name:"image",type:"image",help:"Introduce la URL de la imagen",label:"Imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAlt",type:"text",help:"Introduce el texto alternativo de la imagen para accesibilidad",label:"Alt de la imagen",mandatory:!1,example_value:"Texto alternativo de la imagen"},{name:"tipo",type:"select",help:"Selecciona la etiqueta HTML del título",label:"Etiqueta del título",options:["h1-blog-categoria","h1-blog-autor","h1-blog-post","h1-blog-postenriquecido","h2-blog","h2","h3","h4"],options_labels:["H1 categoría blog","H1 autor blog","H1 post blog","H1 post enriquecido blog","H2 blog","H2","H3","H4"],example_value:"h2"},{name:"flexJustify",type:"select",help:"Selecciona la justificación horizontal del contenido",label:"Justificación del contenido",options:["justify-center","justify-start"],options_labels:["Centrado","Inicio"],example_value:"justify-center"},{name:"textAlign",type:"select",help:"Selecciona la alineación del texto",label:"Alineación del texto",options:["center","left","right"],options_labels:["Centro","Izquierda","Derecha"],example_value:"center"},{name:"descriptionStyle",type:"select",help:"Selecciona la tipografía de la descripción",label:"Estilo de la descripción",options:["poppins","inter"],options_labels:["Poppins","Inter"],example_value:"poppins"},{name:"imagePosition",type:"select",help:"Selecciona la posición de la imagen respecto al contenido",label:"Posición de la imagen",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"items",type:"list",help:"Introduce los enlaces de redes sociales y opciones de compartir",label:"Items de redes sociales",mandatory:!1,items:{type:"object",fields:[{name:"facebook",type:"text",help:"Introduce la URL del perfil de Facebook",label:"URL de Facebook",example_value:"https://facebook.com/usuario"},{name:"twitter",type:"text",help:"Introduce la URL del perfil de Twitter/X",label:"URL de Twitter/X",example_value:"https://x.com/usuario"},{name:"linkedin",type:"text",help:"Introduce la URL del perfil de LinkedIn",label:"URL de LinkedIn",example_value:"https://linkedin.com/in/usuario"},{name:"whatsapp",type:"text",help:"Introduce la URL de WhatsApp",label:"URL de WhatsApp",example_value:"https://wa.me/34600000000"},{name:"instagram",type:"text",help:"Introduce la URL del perfil de Instagram",label:"URL de Instagram",example_value:"https://instagram.com/usuario"},{name:"email",type:"text",help:"Introduce la dirección de email",label:"Email",example_value:"ejemplo@lefebvre.es"},{name:"print",type:"boolean",help:"Indica si se debe mostrar el botón de imprimir",label:"Mostrar botón imprimir",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"copyLink",type:"boolean",help:"Indica si se debe mostrar el botón de copiar enlace",label:"Mostrar botón copiar enlace",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Mallorca",category:"Repetidor",name:"Repetidor de contenido con icono GenIA-L 2025",description:"Repetidor de contenido con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"positionFlex",type:"select",help:"Selecciona la alineación vertical del contenido",label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:"Selecciona la posición horizontal del botón",label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:"Selecciona la orientación del icono respecto al texto",label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:"Selecciona la orientación del bloque de icono y texto",label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:"Selecciona la etiqueta HTML del título",label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 CENTER","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Label del botón",mandatory:!1,example_value:"Texto del botón"},{name:"buttonUrl",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"https://www.ejemplo.com"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Marruecos",category:"Repetidor",name:"Repetidor de contenido con icono GenIA-L sin campos 2025",description:"Repetidor de contenido para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","icono","genial"],fields:[{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Título",mandatory:!1,example_value:"Esto es un título"},{name:"buttonText",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Texto del botón",mandatory:!1,example_value:"Esto es un texto de botón"},{name:"buttonHref",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"#"},{name:"items",type:"list",help:"Introduce los items de contenido con icono",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"subtitle",type:"text",help:"Introduce el subtítulo del item",label:"Subtítulo",example_value:"Subtítulo de ejemplo"},{name:"description",type:"textArea",help:"Introduce la descripción del item",label:"Descripción",example_value:"Descripción de ejemplo"},{name:"icon",type:"select",help:"Selecciona el icono del item",label:"Icono",options:["chat","book","check"],options_labels:["Chat","Book","Check"],example_value:"chat"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Menorca",category:"Repetidor",name:"Otro repetidor de contenido con icono GenIA-L 2025",description:"Repetidor de contenido con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial","icono"],fields:[{name:"positionFlex",type:"select",label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",label:"Label del botón",mandatory:!1,example_value:"Texto del botón"},{name:"buttonUrl",type:"text",label:"Enlace del botón",mandatory:!1,example_value:"https://www.ejemplo.com"},{name:"showBtn",type:"boolean",label:"Mostrar botón",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Michigan",category:"Repetidor",name:"Repetidor artículo con texto e imagen GenIA-L 2025",description:"Repetidor para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","imagen","genial"],fields:[{name:"orientation",type:"select",help:"Selecciona la posición de la imagen respecto al texto",label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"#"},{name:"showBtnModal",type:"boolean",help:"Indica si se debe mostrar el botón que abre el modal",label:"Mostrar botón Modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:"Introduce el texto del botón que abre el modal",label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en pdf"},{name:"items",type:"list",help:"Introduce el listado de artículos con texto e imagen",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Introduce el título del artículo",label:"Título",example_value:"Título de ejemplo"},{name:"description",type:"textArea",help:"Introduce la descripción del artículo",label:"Descripción",example_value:"Descripción de ejemplo"},{name:"image",type:"text",help:"Introduce la URL de la imagen del artículo",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageModal",type:"text",help:"Introduce la URL de la imagen del modal",label:"Imagen Modal",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"titleModal",type:"text",help:"Introduce el título del modal",label:"Título Modal",example_value:"Título del modal"},{name:"subtitleModal",type:"text",help:"Introduce el subtítulo del modal",label:"Subtítulo Modal",example_value:"Subtítulo del modal"},{name:"descriptionModal",type:"textArea",help:"Introduce la descripción del modal",label:"Descripción Modal",example_value:"Descripción del modal"},{name:"altModal",type:"text",help:"Introduce el texto alternativo de la imagen del modal para accesibilidad",label:"Alt Modal",example_value:"Imagen del modal"},{name:"lf2FormTitle",type:"text",help:"Introduce el nombre del formulario LF2 asociado",label:"Título Formulario LF2",example_value:"Nombre del formulario"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Mostoles",category:"Repetidor",name:"Repetidor de contenido imagen e icono GenIA-L sin campos 2025",description:"Repetidor de contenido para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","imagen","icono","genial"],fields:[{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Texto del título",mandatory:!1,example_value:"Hazlo ahora mismo"},{name:"description",type:"text",help:"Introduce la descripción del contenido",label:"Texto de la descripción",mandatory:!1,example_value:"Genera endorfinas"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"https://lefebvre.es"},{name:"showImage",type:"boolean",help:"Indica si se debe mostrar la imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"src",type:"image",help:"Introduce la URL de la imagen",label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"showBtnModal",type:"boolean",help:"Indica si se debe mostrar el botón que abre el modal",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:"Introduce el texto del botón que abre el modal",label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:"Introduce la URL de la imagen del modal",label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Introduce el texto alternativo de la imagen del modal para accesibilidad",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Texto alternativo de prueba"},{name:"titleModal",type:"text",help:"Introduce el título del modal",label:"Título del modal",mandatory:!1,example_value:"Título del modal"},{name:"descriptionModal",type:"text",help:"Introduce la descripción del modal",label:"Descripción del modal",mandatory:!1,example_value:"Descripción de prueba del modal"},{name:"lf2FormTitle",type:"text",help:"Introduce el nombre del formulario LF2 asociado",label:"Nombre del formulario LF2",mandatory:!1,example_value:"Nombre de formulario de prueba de LF2 asociado"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Orcasitas",category:"Repetidor",name:"Carrusel GenIA-L 2025",description:"Carrusel para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","carrusel","genial"],fields:[{name:"slidesToShow",type:"text",label:"Número de slides a mostrar",mandatory:!1,example_value:"3"},{name:"slidesToScroll",type:"text",label:"Número de slides a desplazar",mandatory:!1,example_value:"1"},{name:"loadScript",type:"boolean",label:"Cargar dependencias",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Oslo",category:"Repetidor",name:"Listado con popups GenIA-L 2025",description:"Listado con popups para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","popup","genial"],fields:[{name:"items",type:"list",help:"Introduce los items del listado con popups",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"Introduce la URL del iframe del vídeo",label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"text",help:"Introduce la URL de la imagen",label:"Url imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:"Introduce la descripción del item",label:"Descripción",example_value:"Descripción de ejemplo"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Quito",category:"Repetidor",name:"Texto repetidor con icono GenIA-L 2025",description:"Texto con icono para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","genial"],fields:[{name:"title",type:"text",help:"Introduce el título del bloque de contenido",label:"Título del bloque",mandatory:!1,example_value:"Test"},{name:"items",type:"list",help:"Introduce los items de texto con icono",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"text",type:"text",help:"Introduce el texto del item",label:"Texto",example_value:"Texto de ejemplo"},{name:"icon",type:"select",help:"Selecciona el icono del item",label:"Icono",options:["phone","email","locator"],options_labels:["Télefono","email","Localización"],example_value:"phone"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Seattle",category:"Repetidor",name:"Repetidor con cards GenIA-L 2025",description:"Repetidor con tarjetas para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["repetidor","cards","genial"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Sevilla",category:"Repetidor",name:"Repetidor con Popup bloque GenIA-L 2025",description:"Repetidor con texto bloque para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["repetidor","popup","texto","imagen","genial"],fields:[{name:"showIco",type:"boolean",help:"Indica si se debe mostrar el icono",label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"title",type:"text",help:"Introduce el título principal del contenido",label:"Texto del título",mandatory:!1,example_value:"Hazlo ahora mismo"},{name:"description",type:"text",help:"Introduce la descripción del contenido",label:"Texto de la descripción",mandatory:!1,example_value:"Genera endorfinas"},{name:"orientation",type:"select",help:"Selecciona la posición de la imagen respecto al texto",label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"flexOrientation",type:"select",help:"Selecciona la orientación del contenido: fila o columna",label:"Orientación del contenido",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"showImage",type:"boolean",help:"Indica si se debe mostrar la imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:"Introduce la URL de la imagen",label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"loading",type:"select",help:"Selecciona el tipo de carga de la imagen: diferida o inmediata",label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtn",type:"boolean",help:"Indica si se debe mostrar el botón",label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:"Introduce el texto que se mostrará en el botón",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:"Introduce la URL de destino del botón",label:"Enlace del botón",mandatory:!1,example_value:"#"},{name:"showBtnModal",type:"boolean",help:"Indica si se debe mostrar el botón que abre el modal",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:"Introduce el texto del botón que abre el modal",label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:"Introduce la URL de la imagen del modal",label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Introduce el texto alternativo de la imagen del modal para accesibilidad",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Texto alternativo de prueba"},{name:"titleModal",type:"text",help:"Introduce el título del modal",label:"Título del modal",mandatory:!1,example_value:"Título de prueba"},{name:"descriptionModal",type:"text",help:"Introduce la descripción del modal",label:"Descripción del modal",mandatory:!1,example_value:"Descripción de prueba"},{name:"lf2FormTitle",type:"text",help:"Introduce el nombre del formulario LF2 asociado",label:"Nombre del formulario LF2",mandatory:!1,example_value:"Nombre del formulario LF2 asociado"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Tokyo",category:"Repetidor",name:"Repetidor de contenido con bloque GenIA-L 2025",description:"Repetidor de contenido para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","genial"],fields:[{name:"title",type:"text",label:"Texto del título",mandatory:!1,example_value:"Pruébalo ya"},{name:"description",type:"text",label:"Texto de la descripción",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"buttonText",type:"text",label:"Label del botón",mandatory:!1,example_value:"Texto del botón"},{name:"buttonUrl",type:"text",label:"Enlace del botón",mandatory:!1,example_value:"https://www.ejemplo.com"},{name:"showBtn",type:"boolean",label:"Mostrar botón",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Ubeda",category:"Repetidor",name:"Repetidor de contenido al texto bloque GenIA-L 2025",description:"Repetidor con texto bloque para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","texto","genial"],fields:[{name:"items",type:"list",help:"Introduce los bloques de contenido con título y descripción",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Introduce el título del bloque",label:"Título",example_value:"Título de ejemplo"},{name:"description",type:"textArea",help:"Introduce la descripción del bloque",label:"Descripción",example_value:"Descripción de ejemplo"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Repetidor_2025_Yakarta",category:"Repetidor",name:"Listado vídeos acordeón GenIA-L 2025",description:"Listado de vídeos en acordeón para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["acordeon","video","genial"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"SEO_Head_Section",category:"SEO",name:"SEO Head Section",description:"Sección de encabezado SEO para mejorar la visibilidad en buscadores",framework:"Astro",priority:1,tags:["seo","genial"],fields:[{name:"title",type:"text",help:"Título para buscadores",label:"Título de la página",mandatory:!1,example_value:"Lefebvre"},{name:"description",type:"text",help:"Descripción para buscadores",label:"Descripción de la página",mandatory:!1,example_value:""},{name:"canonical",type:"text",help:"URL canónica de la página",label:"URL canónica",mandatory:!1,example_value:""},{name:"shareImgSrc",type:"text",help:"Imagen al compartir en RRSS",label:"Src de la imagen para compartir",mandatory:!1,example_value:"https://www.ejemplo.com/imagen.jpg"},{name:"robots",type:"select",help:"Directiva de indexación",label:"Indexación por parte de los motores de búsqueda",options:["index, follow","noindex, nofollow","index, nofollow","noindex, follow"],options_labels:["Indexar y seguir enlaces","No indexar ni seguir enlaces","Indexar pero no seguir enlaces","No indexar pero seguir enlaces"],example_value:"index, follow"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Separador_2025_Reinosa",category:"Separador",name:"Separador con gradiente corporativo GenIA-L 2025",description:"Barra horizontal de 4px con el gradiente de colores corporativos GenIA-L (indigo → azul → rosa). Componente sin parámetros configurables. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["separador","gradiente","spectrum","genial"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Separador_2025_Toledo",category:"Separador",name:"Separador con línea gris GenIA-L 2025",description:"Línea horizontal gris (border-top 1px color #B6B7BB) para separar secciones de contenido. Componente sin parámetros configurables. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["separador","hr","linea","genial"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Share_2025_Florencia",category:"Contenido",name:"Botones para compartir contenido GenIA-L 2025",description:"Botones de compartir que generan automáticamente las URLs de intent de cada red social (Facebook sharer, LinkedIn share, X/Twitter tweet, WhatsApp send, mailto). Incluye además imprimir y copiar al portapapeles. Cada botón se activa/desactiva con un boolean. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["share","compartir","rrss","genial"],fields:[{name:"url",type:"text",help:"URL del contenido a compartir. Se codifica (encodeURIComponent) y se inyecta en los parámetros de compartir de cada red social",label:"URL del contenido",mandatory:!1,example_value:"https://lefebvre.es/genia-l/blog/articulo-ejemplo"},{name:"title",type:"text",help:"Título del contenido a compartir. Se usa en Twitter/X (texto del tweet), WhatsApp (texto del mensaje) y Email (asunto). Facebook y LinkedIn no lo usan porque extraen el título de la meta og:title",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal"},{name:"facebook",type:"boolean",help:"Si está activado, muestra el botón de compartir en Facebook (abre el sharer oficial con la URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón Facebook",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"linkedin",type:"boolean",help:"Si está activado, muestra el botón de compartir en LinkedIn (abre el share-offsite con la URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón LinkedIn",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"twitter",type:"boolean",help:"Si está activado, muestra el botón de compartir en X (abre el intent/tweet con URL y título precargados). Si está desactivado, NO aparece el botón",label:"Mostrar botón X (Twitter)",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"whatsapp",type:"boolean",help:"Si está activado, muestra el botón de compartir por WhatsApp (abre api.whatsapp.com/send con título + URL en el mensaje). Si está desactivado, NO aparece el botón",label:"Mostrar botón WhatsApp",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"email",type:"boolean",help:"Si está activado, muestra el botón de compartir por Email (abre el cliente de correo con asunto=título y cuerpo=URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón Email",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"print",type:"boolean",help:"Si está activado, muestra un botón con icono de imprimir que ejecuta window.print() en la página actual. Si está desactivado, el botón NO aparece",label:"Mostrar botón imprimir",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyLink",type:"boolean",help:'Si está activado, muestra un botón con icono de copiar enlace que copia la URL definida en "URL del contenido" al portapapeles (con tooltip de confirmación "Enlace copiado"). Si está desactivado, el botón NO aparece',label:"Mostrar botón copiar enlace",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"SpectrumSeparator",category:"Separador",name:"Separador spectrum con degradado corporativo",description:"Spectrum separador",framework:"Astro",priority:1,tags:["separador","lefebvre.es"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Sumario_2025_Beijing",category:"Texto",name:"Sumario con iconos de check GenIA-L 2025",description:"Lista de contenido (sumario) con título h2 y viñetas con iconos de check circular. Soporta dos modos: lista de strings o HTML libre. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","sumario","lista","genial"],fields:[{name:"title",type:"text",help:"Título del sumario (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"En este artículo"},{name:"contentSumario",type:"textArea",help:'Sumario en HTML libre (normalmente <ul><li>...</li></ul>). Si tiene valor, este campo TIENE PRIORIDAD sobre "Items del sumario" — el campo items se ignora. Los <li> reciben el icono de check automático por CSS global',label:"Sumario en HTML",mandatory:!1,example_value:"<ul><li>Contexto normativo</li><li>Casos reales de uso</li><li>Buenas prácticas</li></ul>"},{name:"items",type:"list",help:'Listado de ítems del sumario (strings simples, sin HTML). Se renderiza como <ul> con iconos de check. Solo se usa si "Sumario en HTML" está vacío',label:"Items del sumario (texto plano)",mandatory:!1,items:{type:"text",example_value:["Introducción a la IA jurídica","Casos reales de uso","Buenas prácticas"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tabla_2025_Fuenlabrada",category:"Texto",name:"Tabla comparativa de dos columnas GenIA-L 2025",description:"Tabla comparativa con título, descripción y dos columnas (izquierda vs derecha) con sus respectivos ítems. Layout responsive: apilado en móvil, grid con flecha separadora (→) en desktop. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","tabla","comparativa","genial"],fields:[{name:"title",type:"text",help:"Título superior de la tabla (h2). Solo se muestra si tiene valor; si se deja vacío, NO aparece",label:"Texto del título",mandatory:!1,example_value:"Compara nuestros planes"},{name:"description",type:"text",help:"Descripción debajo del título. Admite HTML. Solo se muestra si tiene valor",label:"Texto de la descripción",mandatory:!1,example_value:"Elige el plan que mejor se adapte a las necesidades de tu despacho"},{name:"leftTitle",type:"text",help:"Título de la columna izquierda",label:"Título columna izquierda",mandatory:!1,example_value:"Plan Profesional"},{name:"leftItems",type:"list",help:"Ítems de la columna izquierda (strings simples, sin HTML). Se renderizan en filas con separadores",label:"Ítems columna izquierda",mandatory:!1,items:{type:"text",example_value:["Consultas ilimitadas","Soporte prioritario","Acceso a webinars"]}},{name:"rightTitle",type:"text",help:"Título de la columna derecha",label:"Título columna derecha",mandatory:!1,example_value:"Plan Básico"},{name:"rightItems",type:"list",help:"Ítems de la columna derecha (strings simples, sin HTML). TERNARIO INTERNO: si hay contenido en AMBAS columnas → grid de 2 columnas con flecha separadora en desktop; si solo una tiene contenido → se renderiza una única tabla con esa columna. El número de filas en desktop se ajusta al máximo entre ambas columnas",label:"Ítems columna derecha",mandatory:!1,items:{type:"text",example_value:["Consultas limitadas a 50/mes","Soporte por email","Sin acceso a webinars"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tag_2025_Bolonia",category:"Texto",name:"Listado de tags GenIA-L 2025",description:"Grupo de etiquetas/pastillas horizontales con estilo redondeado y fondo azul muy claro. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","tag","etiqueta","genial"],fields:[{name:"tags",type:"list",help:"Listado de etiquetas/tags. Cada una se renderiza como una pastilla redondeada con borde gris claro y fondo azul muy claro. Si se deja vacío, no aparece ningún tag",label:"Listado de tags",mandatory:!1,items:{type:"text",example_value:["IA Jurídica","Legaltech","Automatización"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TestPadre",category:"Texto",name:"TestPadre",description:"TestPadre",framework:"Astro",priority:1,tags:["texto"],fields:[{name:"texto",type:"text",help:"Texto libre",label:"Texto",mandatory:!1,example_value:"Prueba de texto"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Test_2026_Gaza",category:"TEST",name:"Ejemplo TESTEO Escuelas - Gaza",description:"Este es un componente para tener todas las opciones de los Carbins",framework:"Astro",priority:1,tags:["prueba","carbin","gaza","test"],fields:[{name:"nombreEscuela",type:"text",help:"Nombre de la escuela",label:"Nombre de la escuela",mandatory:!1,example_value:"Elementary School No. 1"},{name:"descripcionEscuela",type:"textArea",help:"Descripción de la escuela",label:"Descripción de la escuela",mandatory:!1,example_value:"Típico instituto de educación americano con alumnos vampiros y hombres lobo a lo Crepúsculo."},{name:"estaEnEEUU",type:"boolean",help:"Si la escuela está en EE. UU.",label:"¿Está en EE. UU.?",mandatory:!1,example_value:!0},{name:"tipoEscuela",type:"select",help:"Tipo de escuela",label:"Tipo de escuela",options:["Pública","Privada","Concertada"],options_labels:["Escuela pública","Escuela privada","Escuela concertada"],example_value:"Pública"},{name:"nombresAlumnosProblematicos",type:"list",help:"Lista de alumnos conflictivos",label:"Nombres de alumnos problemáticos",mandatory:!1,items:{type:"text",example_value:["Edward Cullen","Bella Swan","Jacob Black"]}},{name:"fichasProfesores",type:"list",help:"Datos de cada profesor",label:"Fichas de los profesores",mandatory:!1,items:{type:"object",fields:[{name:"nombre",type:"text",help:"Nombre del profesor",label:"Nombre del profesor",example_value:"Profesor Smith"},{name:"descripcion",type:"textArea",help:"Descripción del profesor",label:"Descripción",example_value:"Profesor de matemáticas, estricto pero justo. Siempre lleva gafas y tiene un bigote peculiar."},{name:"asignatura",type:"select",help:"Materia que imparte",label:"Asignatura",options:["Matemáticas","Historia","Física"],options_labels:["Matemáticas aplicadas a las CC. SS.","Historia de la humanidad","Física y química"],example_value:"Matemáticas"},{name:"esViolento",type:"boolean",help:"Si el profesor es violento",label:"¿Es un profesor violento?",example_value:!1}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextBox",category:"Texto",name:"Caja de texto",description:"Caja de texto en Astro",framework:"Astro",priority:1,tags:["texto"],fields:[{name:"htmlCode",type:"textArea",help:"Código HTML de la caja",label:"Código HTML",mandatory:!1,example_value:"<p>Lo que quieras...</p>"},{name:"addShadow",type:"boolean",help:"Activar sombra en la caja",label:"Añadir sombra",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextImageBackground",category:"Contenido",name:"Contenido con imagen de fondo",description:"Tarjeta con imagen de background y texto para destacar contenido",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Gatos<br>Haciendo cosas de gatos<br>Se un gato Lefebvre"},{name:"description",type:"textArea",help:"Descripción detallada en HTML",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p>Gatos que a lo largo de la historia han demostrado ser compañeros leales y fascinantes.</p>
|
|
33
33
|
<p>Desde siempre han participado en todo tipo de actividades humanas, mostrando su adaptabilidad y encanto.</p>
|
|
34
34
|
<p>Este es el autocompletado del copilot sobre los gatos y sus manías.</p>
|
|
35
35
|
`},{name:"image",type:"image",help:"Dirección de la imagen",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-16-9.png"},{name:"orientation",type:"select",help:"Posición de la imagen",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextImageBlock",category:"Contenido",name:"Contenido de texto con imagen",description:"Tarjeta con texto e imagen",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Gatos abogados: la nueva tendencia felina en el mundo legal"},{name:"description",type:"textArea",help:"Descripción detallada en HTML",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p><b>No trabajes más, trabaja mejor.</b> GenIA-L no sólo domina la jurisprudencia, sino que piensa como tú: además de hablar el mismo idioma, es la primera IA que razona de forma lógica sobre cómo abordar los desafíos legales más complejos.</p>
|
|
@@ -37,7 +37,7 @@ var LfPagebuilder=(function(za){"use strict";var ofe=Object.defineProperty;var r
|
|
|
37
37
|
`},{name:"buttonText",type:"text",help:"Texto del botón",label:"Texto del botón",mandatory:!0,example_value:"Conoce GenIA-L"},{name:"buttonUrl",type:"text",help:"Enlace del botón",label:"URL del botón",mandatory:!0,example_value:"https://lefebvre.es/ecosistema-productos/genial-inteligencia-artificial-generativa-ia/"},{name:"image",type:"image",help:"Dirección de la imagen",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-4-3.png"},{name:"orientation",type:"select",help:"Posición de la imagen",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"left"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextImageCard",category:"Contenido",name:"Card de texto con imagen",description:"Card con texto e imagen",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Gatitos medievales: una mirada al pasado felino"},{name:"description",type:"textArea",help:"Descripción detallada en HTML",label:"Contenido principal (HTML)",mandatory:!0,example_value:"<p>Los gatitos que habitaron los castillos medievales eran más que simples mascotas; eran compañeros leales y símbolos de estatus para la <b>nobleza</b>.</p>"},{name:"image",type:"image",help:"Dirección de la imagen",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-1-1.png"},{name:"orientation",type:"select",help:"Posición de la imagen",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextImageHeader",category:"Contenido",name:"Contenido de texto con imagen y polígono con degradado",description:"Cabecera con texto destacado, imagen y botón de acción personalizable. Ideal para resaltar información clave en páginas principales.",framework:"Astro",tags:["card","lefebvre.es"],fields:[{name:"pretitle",type:"text",help:"Texto del pretítulo",label:"Pretítulo",mandatory:!1,example_value:"GATOS"},{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Gatos con ganas de hacer travesuras"},{name:"description",type:"textArea",help:"Descripción detallada en HTML",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p><b>No trabajes más, trabaja mejor.</b> GenIA-L no sólo domina la jurisprudencia, sino que piensa como tú: además de hablar el mismo idioma,
|
|
38
38
|
es la primera IA que razona de forma lógica cómo abordar los desafíos legales más complejos.</p>
|
|
39
39
|
<p>En Lefebvre hemos ido un paso más allá, combinando el llamado razonamiento profundo con la base de datos jurídica más completa. ¿El resultado?</p>
|
|
40
|
-
`},{name:"buttonText",type:"text",help:"Texto del botón",label:"Texto del botón",mandatory:!0,example_value:"Adopta un gato"},{name:"buttonUrl",type:"text",help:"Enlace del botón",label:"URL del botón",mandatory:!0,example_value:"/conocenos"},{name:"image",type:"image",help:"Dirección de la imagen",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-4-3.png"},{name:"orientation",type:"select",help:"Posición de la imagen",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"left"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Texto_2025_Kyoto",category:"Texto",name:"Bloque de texto HTML con título opcional 2025",description:"Bloque de texto HTML libre con título opcional (h2 o h3) encima. Los <p> y <h2> internos del HTML llevan estilos Poppins/Inter aplicados. Para la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","html"],fields:[{name:"title",type:"text",help:'Título opcional del bloque. TERNARIO: solo se renderiza si "Etiqueta del título" es "h2" O "h3" Y este campo tiene valor. Admite HTML',label:"Texto del título",mandatory:!1,example_value:"Casos de uso de la IA jurídica"},{name:"tipo",type:"select",help:'Controla cómo se renderiza el título. "Sin título" NO muestra el título aunque "Texto del título" tenga valor. "H2" lo renderiza como h2 (24px semibold). "H3" lo renderiza como h3 (20px semibold)',label:"Etiqueta del título",options:["none","h2","h3"],options_labels:["Sin título","H2","H3"],example_value:"h2"},{name:"contentHTML",type:"html",help:"Contenido HTML del bloque (admite <p>, <h2>, <ul>, <strong>, etc.). Se renderiza con set:html. Los <p> internos adoptan estilo Inter 1em, los <h2> internos Poppins 1.5em semibold",label:"Contenido HTML",mandatory:!1,example_value:"<p>La inteligencia artificial aplicada al Derecho permite automatizar tareas repetitivas, buscar jurisprudencia en segundos y redactar borradores de contratos con plantillas personalizables.</p>"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tiempo_2025_Londres",category:"Contenido",name:"Tiempo de lectura con icono de reloj GenIA-L 2025",description:'Pequeño bloque con icono de reloj y texto "X min" para indicar el tiempo estimado de lectura de un post. Sin lógica condicional. Para el directorio de GenIA-L en la corporativa de Lefebvre',framework:"Astro",priority:1,tags:["tiempo","lectura","reloj","genial"],fields:[{name:"minutes",type:"text",help:'Número de minutos estimados de lectura (sin unidades, solo el número; el componente añade " min" automáticamente). Campo obligatorio — si no se pasa, el componente renderiza " min" sin número',label:"Minutos de lectura",mandatory:!0,example_value:"8"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Titulo_2025_Algeciras",category:"Título",name:"Título versátil con múltiples estilos GenIA-L 2025",description:"Componente de título con 15 variantes de estilo (h1-h6, párrafo) y soporte para subtítulo adicional, descripción y sub-descripción. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["titulo","texto","genial"],fields:[{name:"title",type:"text",help:'Texto del título principal. Admite HTML. Se renderiza con la etiqueta seleccionada en "Etiqueta del título"',label:"Texto del título",mandatory:!1,example_value:"Inteligencia artificial al servicio del Derecho"},{name:"description",type:"text",help:"Descripción opcional debajo del título (Inter 16px, centrada). Admite HTML. Solo se muestra si tiene valor",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo GenIA-L transforma el trabajo diario de los despachos de abogados"},{name:"tipo",type:"select",help:'Estilo y etiqueta HTML del título. 15 variantes con distintos tamaños, alineaciones y márgenes: "h1" 36-56px centrado, "h1-40" 40px centrado mb-8, "h1-40-left" 40px izquierda, "h1-home" 36-56px centrado (usado como subtítulo del Home), "h2" 36-40px centrado, "h2-mb24" estilo badge fondo gris, "h2-mb64" 36-40px con padding, "h2-mb64-max900" igual con max-width 900px, "h3" 2xl semibold centrado, "h3-mb32" 32px izquierda, "h3-40-left" 40px izquierda, "h4"/"h5"/"h6" centrados sin estilos complejos, "p" párrafo simple. Si se pasa "h1Subtitle", el título se renderiza como badge (fondo gris, padding) y el "h1Subtitle" adopta el estilo principal',label:"Etiqueta del título",options:["h1","h1-40","h1-40-left","h1-home","h2","h2-mb24","h2-mb64","h2-mb64-max900","h3","h3-mb32","h3-40-left","h4","h5","h6","p"],options_labels:["H1 (36-56px centrado)","H1 40px centrado","H1 40px izquierda","H1 home","H2 36-40px centrado","H2 badge","H2 con padding","H2 padding max-900","H3 centrado","H3 32px izquierda","H3 40px izquierda","H4","H5","H6","Párrafo"],example_value:"h1"},{name:"flexJustify",type:"select",help:'Alineación horizontal del contenedor. "Izquierda" alinea a la izquierda; "Centro" centra',label:"Justificación del contenido",options:["justify-start","justify-center"],options_labels:["Izquierda","Centro"],example_value:"justify-start"},{name:"descriptionWidth",type:"select",help:'Ancho de la descripción en desktop (md+). "1/3" = 33% del ancho, "3/5" = 60%, "Completo" = 100%. ATENCIÓN: Tailwind JIT no genera clases desde template strings dinámicos (w-${descriptionWidth}), por lo que requiere estar en la safelist del tailwind.config',label:"Ancho de la descripción",options:["1/3","3/5","full"],options_labels:["1/3","3/5","Completo"],example_value:"1/3"},{name:"h1Subtitle",type:"text",help:'Subtítulo adicional que aparece DEBAJO del título. TERNARIO: solo se muestra si tiene valor. Cuando está relleno, el título se renderiza como badge pequeño (fondo gris) y este subtítulo asume el estilo del título según "tipo" (solo con tipos "h1", "h2-mb24", "h1-home" o "h1-40"; el resto ignora el subtítulo). Admite HTML',label:"Subtítulo del h1 (opcional)",mandatory:!1,example_value:"La plataforma de IA jurídica para despachos"},{name:"subdescription",type:"text",help:'Sub-descripción adicional (Poppins 20px, centrada). Solo se muestra si tiene valor. Aparece debajo de "description". Admite HTML',label:"Sub-descripción (Poppins 20px)",mandatory:!1,example_value:"Automatiza tareas, redacta documentos y encuentra jurisprudencia en segundos"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Titulo_2025_Santorini",category:"Título",name:"Pastilla de texto azul en mayúsculas GenIA-L 2025",description:"Pequeño <p> con texto en color azul corporativo, tracking ampliado, en MAYÚSCULAS y tamaño pequeño (14px). Pensado para etiquetas/badges de categoría. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["titulo","texto","badge","genial"],fields:[{name:"description",type:"text",help:"Texto del badge. Se muestra en MAYÚSCULAS automáticamente (CSS uppercase) con color azul oscuro (#001978), semibold y tracking ampliado. NO admite HTML (se renderiza como texto plano dentro de un <p>)",label:"Texto del badge",mandatory:!1,example_value:"IA Jurídica"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"VideoAutoplay",category:"Contenido",name:"Sección con vídeo autoplay",description:"Sección con vídeo que se reproduce automáticamente",framework:"Astro",tags:["video","autoplay","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Hoy empieza un nuevo capítulo de nuestra historia"},{name:"description",type:"text",help:"Texto del contenido",label:"Contenido principal",mandatory:!0,example_value:"Somos quienes te han acompañado durante décadas. Somos quienes se anticipan contigo al futuro del conocimiento jurídico."},{name:"iframeSrc",type:"video",help:"Enlace del vídeo",label:"URL del vídeo",mandatory:!0,example_value:"https://player.vimeo.com/video/1087114916?controls=0&autoplay=1&muted=1&loop=1&badge=0&autopause=0&player_id=0&app_id=58479"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Video_2025_Polop",category:"Contenido",name:"Ítem con título, descripción y vídeo MP4 GenIA-L 2025",description:"Bloque horizontal con título + descripción a la izquierda y vídeo MP4 reproducido con autoplay loop muted a la derecha. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["video","genial"],fields:[{name:"title",type:"text",help:"Título del ítem (h3). Admite HTML. Se renderiza siempre; si se deja vacío aparece el h3 vacío",label:"Texto del título",mandatory:!1,example_value:"Redacción automática de contratos"},{name:"description",type:"text",help:"Descripción del ítem. Admite HTML. Se renderiza siempre debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Genera borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas"},{name:"iframeSrc",type:"video",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como <source src="..." type="video/mp4"> con autoplay, loop y muted',label:"URL del archivo de vídeo (MP4)",mandatory:!1,example_value:"https://lefebvre.es/genia-l/videos/genial/video-trazabilidad.mp4"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Video_2025_Valencia",category:"Contenido",name:"Listado de ítems con vídeo MP4 GenIA-L 2025",description:"Listado apilado de vídeos MP4 con título y descripción. Cada ítem se renderiza con Video_2025_Polop. Incluye structured data SEO tipo VideoObject ItemList. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["video","lista","genial"],fields:[{name:"items",type:"list",help:"Listado de vídeos. Cada uno se renderiza con el componente Video_2025_Polop (título + descripción + vídeo lateral). Todos los vídeos se cargan con autoplay, loop y muted",label:"Listado de vídeos",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título del vídeo (h3 en el componente hijo). Admite HTML",label:"Texto del título",example_value:"Redacción automática de contratos"},{name:"description",type:"text",help:"Descripción del vídeo. Admite HTML",label:"Texto de la descripción",example_value:"Genera borradores de contratos en segundos a partir de plantillas personalizables"},{name:"iframeSrc",type:"text",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube a pesar del nombre del campo). Se usa como <source type="video/mp4">',label:"URL del archivo de vídeo (MP4)",example_value:"https://lefebvre.es/genia-l/videos/genial/video-trazabilidad.mp4"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"VueButton",category:"Call to Action",name:"Botón en Vue",description:"Botón de prueba en Vue",framework:"Vue",priority:2,tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",help:"Texto del botón",label:"Texto del botón",mandatory:!0,example_value:"Botón en Vue"},{name:"href",type:"text",help:"Enlace al que lleva el botón",label:"URL de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",help:"Ventana de apertura del enlace",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}]}},Symbol.toStringTag,{value:"Module"}))}];function uU(){return dU.map(e=>e.component.metadata).sort((e,n)=>{const o=e.priority??0,r=n.priority??0;return o!==r?r-o:(e.name||"").localeCompare(n.name||"")})}const pU=T2({props:{isComponentMode:Boolean,fullwidthMode:Boolean,debugMode:Boolean,submitForm:Boolean,toggleComponentModeFunction:Function,toggleFullwidthMode:Function,importConfigurationFunction:Function,globalPageConfiguration:Array,sectionSelected:String,availableSections:Array,parametersPageConfiguration:Object,renderApiDomain:String,inputId:String,allowRenderMode:{type:String,default:"open"}},emits:["update:sectionSelected","update:parametersPageConfiguration.global.sidebarEnabled","update:parametersPageConfiguration.global.renderAsBodyPart","update:parametersPageConfiguration.global.headSlot","update:parametersPageConfiguration.global.bodyBeginSlot","update:parametersPageConfiguration.global.footerSlot","update:parametersPageConfiguration.seo.robots","update:parametersPageConfiguration.seo.title","update:parametersPageConfiguration.seo.description"],setup(t){const e=t.renderApiDomain||"http://localhost:8003",n=rn(""),o=rn(!1),r=rn(!1),a=rn(null),i=rn(!1),l=()=>{const P=window.scrollY,w=document.querySelector(".lf-page-builder"),A=w?w.getBoundingClientRect().bottom+P:1/0;i.value=P>80&&P<A};Ci(()=>window.addEventListener("scroll",l)),Ld(()=>window.removeEventListener("scroll",l));const s=sa({get(){var w,A;const P=(w=t.globalPageConfiguration)==null?void 0:w.find(N=>N.section===t.sectionSelected);return((A=P==null?void 0:P.config)==null?void 0:A.width)||""},set(P){var A;const w=(A=t.globalPageConfiguration)==null?void 0:A.find(N=>N.section===t.sectionSelected);w&&(w.config||(w.config={}),w.config.width=P)}}),u=()=>{const P={pageConfig:t.globalPageConfiguration,paramsConfig:t.parametersPageConfiguration},w=JSON.stringify(P),A=new CustomEvent("lf-pagebuilder:export",{detail:{...P,inputId:t.inputId}});document.dispatchEvent(A);const N=window.open("","Preview","width='100vw',height='100vh'");N&&(N.document.body.innerText=w,N.document.close())},p=()=>{const P={pageConfig:t.globalPageConfiguration,paramsConfig:t.parametersPageConfiguration},w=JSON.stringify(P);m(w);const A=new CustomEvent("lf-pagebuilder:save",{detail:{...P,inputId:t.inputId}});if(document.dispatchEvent(A),t.inputId){const N=document.getElementById(t.inputId);N&&(N.value=w)}if(r.value=!0,setTimeout(()=>{r.value=!1},3e3),t.submitForm&&a.value){const N=a.value.closest("form");N&&N.submit()}},m=P=>{const w=t.inputId?`pageBuilderConfig_${t.inputId}`:"pageBuilderConfig";localStorage.setItem(w,P)};return{validateSeo:()=>{const P={pageConfig:t.globalPageConfiguration,paramsConfig:t.parametersPageConfiguration},w=JSON.stringify(P,null,2);fetch(e+"/api/render-html/",{method:"POST",headers:{"Content-Type":"application/json"},body:w}).then(A=>A.text()).then(A=>{const N=window.open("","Preview","width='100vw',height='100vh'");if(!N)return;const Z=new DOMParser().parseFromString(A,"text/html"),K=[];function X(Y,U=0){if(!Y||Y.nodeType!==1)return;const te=Y.tagName.toLowerCase();["h1","h2","h3","h4","h5","h6","a","p","article","section","header","footer"].includes(te)&&K.push({tag:te,text:(Y.textContent||"").trim().slice(0,80),depth:U}),Array.from(Y.children).forEach(de=>X(de,U+1))}X(Z.body);let ne='<h2>Estructura SEO</h2><ul style="font-family:monospace">';K.forEach(Y=>{ne+=`<li style="margin-left:${Y.depth*20}px"><b>${Y.tag}</b>: ${Y.text}</li>`}),ne+="</ul>",N.document.body.innerHTML=ne,N.document.close()})},importConfig:n,showAdvancedConfig:o,previewFunction:()=>{const P={pageConfig:t.globalPageConfiguration,paramsConfig:t.parametersPageConfiguration},w=JSON.stringify(P,null,2);fetch(e+"/api/render-html/",{method:"POST",headers:{"Content-Type":"application/json"},body:w}).then(A=>A.text()).then(A=>{const N=window.open("","Preview","width='100vw',height='100vh'");N&&(N.document.body.innerHTML=A,N.document.querySelectorAll("script").forEach(Z=>{var X;const K=N.document.createElement("script");Z.src?K.src=Z.src:K.textContent=Z.textContent,(X=Z.parentNode)==null||X.replaceChild(K,Z)}),N.document.close())})},importFunction:()=>{t.importConfigurationFunction&&t.importConfigurationFunction(n.value),n.value=""},exportFunction:u,saveButtonAction:p,loadFromLocalStorage:()=>{const P=t.inputId?`pageBuilderConfig_${t.inputId}`:"pageBuilderConfig",w=localStorage.getItem(P);if(w&&t.importConfigurationFunction){const A=JSON.parse(w);t.importConfigurationFunction(A)}},toggleExpandScreen:()=>{const P=document.querySelector(".lf-page-builder");P&&P.classList.toggle("expanded-page-builder")},scrollToTop:()=>{var w;const P=(w=a.value)==null?void 0:w.closest(".lf-page-builder");P&&P.scrollIntoView({behavior:"smooth",block:"start"})},sectionWidth:s,isSaved:r,componentRoot:a,isScrolled:i}}}),B3=(t,e)=>{const n=t.__vccOpts||t;for(const[o,r]of e)n[o]=r;return n},mU={ref:"componentRoot"},hU={class:"mecano:fixed mecano:bottom-6 mecano:right-6 mecano:z-[10] mecano:flex mecano:gap-3"},fU={key:0,class:"mecano:flex mecano:justify-end mecano:items-center mecano:w-full mecano:p-3 mecano:gap-3"},bU={class:"mecano:flex mecano:justify-end mecano:items-center mecano:p-2 mecano:gap-3 mecano:bg-gradient-to-l mecano:from-lime-50 mecano:to-green-100 mecano:border mecano:border-lime-400 mecano:rounded-lg mecano:w-auto"},gU={class:"mecano:flex mecano:flex-wrap mecano:justify-between mecano:gap-3 mecano:px-5 mecano:py-3 mecano:bg-white mecano:mx-3 mecano:rounded-xl mecano:border mecano:border-slate-200 mecano:mb-6 mecano:sticky mecano:top-2 z-9999 mecano:shadow-lg mecano:backdrop-blur-sm"},vU={class:"mecano:flex mecano:gap-2"},yU={class:"mecano:flex mecano:gap-2"},CU=["value"],xU=["value"],wU={value:"full"},OU={value:"1/2"},SU={value:"1/3"},kU={value:"2/3"},TU={value:"1/4"},EU={value:"3/4"},MU={value:"1/5"},$U={value:"2/5"},LU={value:"3/5"},AU={value:"4/5"},PU={key:0},NU={key:1},_U={class:"mecano:flex mecano:items-center mecano:gap-2"},jU={key:1,class:"mecano:bg-white mecano:border mecano:border-slate-200 mecano:rounded-2xl mecano:p-5 mecano:mx-3 mecano:mb-6 mecano:shadow-lg"},IU={class:"mecano:flex mecano:flex-row mecano:gap-4 mecano:w-full"},RU={class:"mecano:border mecano:border-slate-200 mecano:rounded-xl mecano:p-5 mecano:w-full mecano:bg-gradient-to-br mecano:from-slate-50 mecano:to-white"},QU={class:"mecano:flex mecano:flex-col mecano:gap-3 mecano:border-b mecano:border-slate-200 mecano:pb-4 mecano:w-full"},DU={class:"mecano:mb-3"},zU={class:"mecano:flex mecano:items-center mecano:gap-3 mecano:cursor-pointer mecano:group"},VU={class:"mecano:mb-3"},ZU={class:"mecano:flex mecano:flex-col mecano:gap-2"},BU=["disabled"],FU=["disabled"],HU={key:0,class:"mecano:text-xs mecano:text-slate-400 mecano:italic"},UU={key:0,class:"mecano:mb-3"},XU={key:1,class:"mecano:mb-3"},WU={key:2,class:"mecano:mb-3"},qU={key:0,class:"mecano:border mecano:border-slate-200 mecano:rounded-xl mecano:p-5 mecano:w-full mecano:bg-gradient-to-br mecano:from-slate-50 mecano:to-white"},GU={class:"mecano:flex mecano:justify-between mecano:items-center mecano:mb-4"},YU={class:"mecano:flex mecano:flex-col mecano:gap-3 mecano:border-b mecano:border-slate-200 mecano:pb-4 mecano:w-full"},KU={class:"mecano:mb-3"},JU={class:"mecano:mb-3"},eX={class:"mecano:mb-3"};function tX(t,e,n,o,r,a){return ve(),we("div",mU,[(ve(),El(MS,{to:"body"},[So(V("div",hU,[V("button",{type:"button",onClick:e[0]||(e[0]=i=>t.saveButtonAction()),title:"Guardar configuración",class:"mecano:cursor-pointer mecano:bg-gradient-to-r mecano:from-emerald-500 mecano:to-teal-500 mecano:hover:from-emerald-600 mecano:hover:to-teal-600 mecano:text-white mecano:border mecano:border-emerald-500 mecano:rounded-full mecano:px-5 mecano:py-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-300 mecano:shadow-xl mecano:hover:shadow-2xl mecano:hover:scale-105"},Wt(t.isSaved?"✅ Guardado":"💾 Guardar"),1),V("button",{type:"button",onClick:e[1]||(e[1]=i=>t.scrollToTop()),title:"Guardar configuración",class:"mecano:cursor-pointer mecano:bg-gradient-to-r mecano:from-cyan-600 mecano:to-cyan-600 mecano:hover:from-cyan-600 mecano:hover:to-cyan-600 mecano:text-white mecano:border mecano:border-cyan-600 mecano:rounded-full mecano:px-5 mecano:py-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-300 mecano:shadow-xl mecano:hover:shadow-2xl mecano:hover:scale-105"}," △ ")],512),[[nm,t.isScrolled]])])),t.debugMode?(ve(),we("div",fU,[V("div",bU,[e[34]||(e[34]=V("span",{class:"mecano:bg-gradient-to-r mecano:from-lime-200 mecano:to-green-300 mecano:px-3 mecano:py-1 mecano:rounded-full mecano:border mecano:border-lime-600 mecano:text-lime-800 mecano:text-xs mecano:font-medium mecano:me-4 mecano:italic"},"MODO DEBUG 🐞",-1)),V("form",{onSubmit:e[4]||(e[4]=am(()=>{},["prevent"])),class:"mecano:flex mecano:gap-2"},[So(V("input",{"onUpdate:modelValue":e[2]||(e[2]=i=>t.importConfig=i),type:"text",class:"mecano:bg-white mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400",name:"",id:"",placeholder:"Pegar configuración..."},null,512),[[d2,t.importConfig]]),V("button",{type:"button",onClick:e[3]||(e[3]=i=>t.importFunction()),class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-slate-700 mecano:hover:text-white mecano:border mecano:border-slate-200 mecano:hover:border-slate-700 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"🏯 Importar")],32),V("button",{type:"button",onClick:e[5]||(e[5]=i=>t.exportFunction()),class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-slate-700 mecano:hover:text-white mecano:border mecano:border-slate-200 mecano:hover:border-slate-700 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"🚀 Exportar")])])):ln("",!0),V("div",gU,[V("div",vU,[V("button",{type:"button",class:Fo([[t.isComponentMode?"mecano:bg-gradient-to-r mecano:from-slate-600 mecano:to-slate-700 mecano:border-slate-700 mecano:text-white mecano:shadow-md":"mecano:bg-white mecano:hover:bg-slate-100"],"mecano:cursor-pointer mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:py-1.5 mecano:px-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200"]),onClick:e[6]||(e[6]=i=>{var l;return(l=t.toggleComponentModeFunction)==null?void 0:l.call(t)})},Wt(t.isComponentMode?"⚒️ Modo Configuración":"👁️ Modo Visual"),3),V("button",{type:"button",class:Fo([[t.fullwidthMode?"mecano:bg-white mecano:hover:bg-slate-100":"mecano:bg-gradient-to-r mecano:from-slate-600 mecano:to-slate-700 mecano:border-slate-700 mecano:text-white mecano:shadow-md"],"mecano:cursor-pointer mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:py-1.5 mecano:px-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200"]),onClick:e[7]||(e[7]=i=>{var l;return(l=t.toggleFullwidthMode)==null?void 0:l.call(t)})},Wt(t.fullwidthMode?"⚒️ Comps. Plegados":"👁️ Comps. Desplegados"),3)]),V("div",yU,[V("select",{value:t.sectionSelected,onChange:e[8]||(e[8]=i=>t.$emit("update:sectionSelected",i.target.value)),class:"mecano:bg-white mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:cursor-pointer mecano:text-sm mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:transition-colors"},[(ve(!0),we(dn,null,Vo(t.availableSections,(i,l)=>(ve(),we("option",{key:l,value:i},Wt(i),9,xU))),128))],40,CU),So(V("select",{class:"mecano:bg-white mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:cursor-pointer mecano:text-sm mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:transition-colors","onUpdate:modelValue":e[9]||(e[9]=i=>t.sectionWidth=i)},[e[35]||(e[35]=V("option",{disabled:"",value:""},"Selecciona el ancho de la sección",-1)),V("option",wU,"Sección "+Wt(t.sectionSelected)+" ocupa todo el ancho de la página",1),V("option",OU,"Sección "+Wt(t.sectionSelected)+" ocupa 1/2 del ancho de la página",1),V("option",SU,"Sección "+Wt(t.sectionSelected)+" ocupa 1/3 del ancho de la página",1),V("option",kU,"Sección "+Wt(t.sectionSelected)+" ocupa 2/3 del ancho de la página",1),V("option",TU,"Sección "+Wt(t.sectionSelected)+" ocupa 1/4 del ancho de la página",1),V("option",EU,"Sección "+Wt(t.sectionSelected)+" ocupa 3/4 del ancho de la página",1),V("option",MU,"Sección "+Wt(t.sectionSelected)+" ocupa 1/5 del ancho de la página",1),V("option",$U,"Sección "+Wt(t.sectionSelected)+" ocupa 2/5 del ancho de la página",1),V("option",LU,"Sección "+Wt(t.sectionSelected)+" ocupa 3/5 del ancho de la página",1),V("option",AU,"Sección "+Wt(t.sectionSelected)+" ocupa 4/5 del ancho de la página",1)],512),[[G2,t.sectionWidth]]),V("button",{type:"button",class:Fo(["mecano:cursor-pointer mecano:border mecano:rounded-lg mecano:py-1.5 mecano:px-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:flex mecano:items-center mecano:gap-2",t.showAdvancedConfig?"mecano:bg-gradient-to-r mecano:from-amber-500 mecano:to-orange-500 mecano:border-amber-500 mecano:text-white mecano:shadow-md":"mecano:bg-white mecano:border-slate-200 mecano:hover:bg-slate-100"]),onClick:e[10]||(e[10]=i=>t.showAdvancedConfig=!t.showAdvancedConfig)},[e[36]||(e[36]=V("span",null,"⚙️ Configurar",-1)),t.showAdvancedConfig?(ve(),we("span",PU,"▲")):(ve(),we("span",NU,"▼"))],2)]),V("div",_U,[V("button",{type:"button",onClick:e[11]||(e[11]=i=>t.previewFunction()),class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-violet-500 mecano:hover:text-white mecano:hover:border-violet-500 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"🔎 Previsualización"),V("button",{type:"button",onClick:e[12]||(e[12]=i=>t.saveButtonAction()),title:"Guardar configuración en localStorage y disparar evento global",class:"mecano:cursor-pointer mecano:bg-gradient-to-r mecano:from-emerald-500 mecano:to-teal-500 mecano:hover:from-emerald-600 mecano:hover:to-teal-600 mecano:text-white mecano:border mecano:border-emerald-500 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},Wt(t.isSaved?t.submitForm?"⏳ Submiteando formulario":"✅ Se ha guardado correctamente":"💾 Guardar"),1),t.debugMode?(ve(),we("button",{key:0,type:"button",onClick:e[13]||(e[13]=i=>t.loadFromLocalStorage()),class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-blue-500 mecano:hover:text-white mecano:hover:border-blue-500 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"⤵️ Cargar")):ln("",!0),V("button",{type:"button",onClick:e[14]||(e[14]=i=>t.toggleExpandScreen()),title:"Expandir / Contraer Pagebuilder",class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-slate-700 mecano:hover:text-white mecano:hover:border-slate-700 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-xl mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md mecano:ms-2"},"◳")]),e[37]||(e[37]=V("div",{class:"mecano:w-full mecano:border-t mecano:border-slate-100 mecano:mt-2 mecano:pt-1.5 mecano:text-center mecano:text-xs mecano:text-slate-400 mecano:italic"}," El resultado final únicamente se ve a través del botón de Previsualización ",-1))]),t.showAdvancedConfig&&t.parametersPageConfiguration?(ve(),we("div",jU,[V("div",IU,[V("div",RU,[e[45]||(e[45]=V("h2",{class:"mecano:text-lg mecano:font-bold mecano:mb-4 mecano:text-slate-700"},"Configuración Avanzada",-1)),e[46]||(e[46]=V("h3",{class:"mecano:font-semibold mecano:mb-3 mecano:text-slate-600"},"Configuración Global",-1)),V("div",QU,[V("div",DU,[V("label",zU,[So(V("input",{type:"checkbox","onUpdate:modelValue":e[15]||(e[15]=i=>t.parametersPageConfiguration.global.sidebarEnabled=i),onChange:e[16]||(e[16]=i=>t.$emit("update:parametersPageConfiguration.global.sidebarEnabled",i.target.value)),class:"mecano:w-5 mecano:h-5 mecano:rounded mecano:border-slate-300 mecano:text-emerald-500 mecano:focus:ring-emerald-500 mecano:cursor-pointer"},null,544),[[l1,t.parametersPageConfiguration.global.sidebarEnabled]]),e[38]||(e[38]=V("span",{class:"mecano:text-slate-600 mecano:group-hover:text-slate-800 mecano:transition-colors"},"Sidebar Habilitado",-1))])]),V("div",VU,[e[41]||(e[41]=V("span",{class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"},"Modo de renderizado",-1)),V("div",ZU,[V("label",{class:Fo(["mecano:flex mecano:items-center mecano:gap-3 mecano:group",t.allowRenderMode==="open"?"mecano:cursor-pointer":"mecano:cursor-not-allowed mecano:opacity-60"])},[So(V("input",{type:"radio","onUpdate:modelValue":e[17]||(e[17]=i=>t.parametersPageConfiguration.global.renderAsBodyPart=i),value:!1,disabled:t.allowRenderMode!=="open",onChange:e[18]||(e[18]=i=>t.$emit("update:parametersPageConfiguration.global.renderAsBodyPart",!1)),class:Fo(["mecano:w-4 mecano:h-4 mecano:border-slate-300 mecano:text-emerald-500 mecano:focus:ring-emerald-500",t.allowRenderMode==="open"?"mecano:cursor-pointer":"mecano:cursor-not-allowed"])},null,42,BU),[[rm,t.parametersPageConfiguration.global.renderAsBodyPart]]),e[39]||(e[39]=V("span",{class:"mecano:text-slate-600 mecano:group-hover:text-slate-800 mecano:transition-colors"},"Renderizar como una página completa",-1))],2),V("label",{class:Fo(["mecano:flex mecano:items-center mecano:gap-3 mecano:group",t.allowRenderMode==="open"?"mecano:cursor-pointer":"mecano:cursor-not-allowed mecano:opacity-60"])},[So(V("input",{type:"radio","onUpdate:modelValue":e[19]||(e[19]=i=>t.parametersPageConfiguration.global.renderAsBodyPart=i),value:!0,disabled:t.allowRenderMode!=="open",onChange:e[20]||(e[20]=i=>t.$emit("update:parametersPageConfiguration.global.renderAsBodyPart",!0)),class:Fo(["mecano:w-4 mecano:h-4 mecano:border-slate-300 mecano:text-emerald-500 mecano:focus:ring-emerald-500",t.allowRenderMode==="open"?"mecano:cursor-pointer":"mecano:cursor-not-allowed"])},null,42,FU),[[rm,t.parametersPageConfiguration.global.renderAsBodyPart]]),e[40]||(e[40]=V("span",{class:"mecano:text-slate-600 mecano:group-hover:text-slate-800 mecano:transition-colors"},"Renderizar como parte del Body (sin etiquetas HTML, HEAD, BODY)",-1))],2),t.allowRenderMode!=="open"?(ve(),we("span",HU,"El modo de renderizado está fijado externamente y no puede modificarse.")):ln("",!0)])]),t.parametersPageConfiguration.global.renderAsBodyPart?ln("",!0):(ve(),we("div",UU,[e[42]||(e[42]=V("label",{for:"headSlot",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Código al final de la sección <head> ",-1)),So(V("textarea",{id:"headSlot","onUpdate:modelValue":e[21]||(e[21]=i=>t.parametersPageConfiguration.global.headSlot=i),onInput:e[22]||(e[22]=i=>t.$emit("update:parametersPageConfiguration.global.headSlot",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-3 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:font-mono mecano:transition-colors",placeholder:"Contenido para el head",rows:"3"},null,544),[[d2,t.parametersPageConfiguration.global.headSlot]])])),t.parametersPageConfiguration.global.renderAsBodyPart?ln("",!0):(ve(),we("div",XU,[e[43]||(e[43]=V("label",{for:"bodyBeginSlot",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Código al principio de la sección <body> ",-1)),So(V("textarea",{id:"bodyBeginSlot","onUpdate:modelValue":e[23]||(e[23]=i=>t.parametersPageConfiguration.global.bodyBeginSlot=i),onInput:e[24]||(e[24]=i=>t.$emit("update:parametersPageConfiguration.global.bodyBeginSlot",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-3 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:font-mono mecano:transition-colors",placeholder:"Contenido para el inicio del body",rows:"3"},null,544),[[d2,t.parametersPageConfiguration.global.bodyBeginSlot]])])),t.parametersPageConfiguration.global.renderAsBodyPart?ln("",!0):(ve(),we("div",WU,[e[44]||(e[44]=V("label",{for:"footerSlot",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Código al final de la sección <body>, dentro de la etiqueta <footer> ",-1)),So(V("textarea",{id:"footerSlot","onUpdate:modelValue":e[25]||(e[25]=i=>t.parametersPageConfiguration.global.footerSlot=i),onInput:e[26]||(e[26]=i=>t.$emit("update:parametersPageConfiguration.global.footerSlot",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-3 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:font-mono mecano:transition-colors",placeholder:"Contenido para el footer",rows:"3"},null,544),[[d2,t.parametersPageConfiguration.global.footerSlot]])]))])]),t.parametersPageConfiguration.global.renderAsBodyPart?ln("",!0):(ve(),we("div",qU,[V("div",GU,[e[47]||(e[47]=V("h2",{class:"mecano:text-lg mecano:font-bold mecano:text-slate-700"},"Configuración SEO",-1)),V("button",{type:"button",onClick:e[27]||(e[27]=i=>t.validateSeo()),class:"mecano:cursor-pointer mecano:bg-gradient-to-r mecano:from-violet-500 mecano:to-purple-500 mecano:hover:from-violet-600 mecano:hover:to-purple-600 mecano:text-white mecano:border mecano:border-violet-500 mecano:rounded-lg mecano:px-4 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"🦄 Validar SEO")]),V("div",YU,[V("div",KU,[e[49]||(e[49]=V("label",{for:"robotsIndex",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Indexación de robots ",-1)),So(V("select",{id:"robotsIndex","onUpdate:modelValue":e[28]||(e[28]=i=>t.parametersPageConfiguration.seo.robots=i),onChange:e[29]||(e[29]=i=>t.$emit("update:parametersPageConfiguration.seo.robots",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-2.5 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:transition-colors mecano:cursor-pointer"},[...e[48]||(e[48]=[V("option",{value:"index, follow"},"Index Follow",-1),V("option",{value:"noindex, nofollow"},"Noindex Nofollow",-1)])],544),[[G2,t.parametersPageConfiguration.seo.robots]])]),V("div",JU,[e[50]||(e[50]=V("label",{for:"pageTitle",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Título de la página ",-1)),So(V("input",{id:"pageTitle",type:"text","onUpdate:modelValue":e[30]||(e[30]=i=>t.parametersPageConfiguration.seo.title=i),onInput:e[31]||(e[31]=i=>t.$emit("update:parametersPageConfiguration.seo.title",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-2.5 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:transition-colors",placeholder:"Ingresa el título de la página"},null,544),[[d2,t.parametersPageConfiguration.seo.title]])]),V("div",eX,[e[51]||(e[51]=V("label",{for:"pageDescription",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Descripción de la página ",-1)),So(V("textarea",{id:"pageDescription","onUpdate:modelValue":e[32]||(e[32]=i=>t.parametersPageConfiguration.seo.description=i),onInput:e[33]||(e[33]=i=>t.$emit("update:parametersPageConfiguration.seo.description",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-3 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:transition-colors",placeholder:"Ingresa la descripción de la página",rows:"3"},null,544),[[d2,t.parametersPageConfiguration.seo.description]])])])]))])])):ln("",!0)],512)}const nX=B3(pU,[["render",tX]]);var NT={};(function(){try{if(typeof document<"u"){var t=document.createElement("style");t.appendChild(document.createTextNode(':root{--le-toolbar-bg: #f8f9fb;--le-toolbar-border: #e4e7ec;--le-toolbar-btn-color: #64748b;--le-toolbar-btn-hover-bg: rgba(0, 0, 0, .06);--le-toolbar-btn-hover-color: #334155;--le-toolbar-btn-active-bg: rgba(74, 108, 247, .12);--le-toolbar-btn-active-color: #4a6cf7;--le-toolbar-separator: #e2e8f0;--le-editor-bg: #ffffff;--le-editor-text-color: #1e293b;--le-editor-border: #e2e8f0;--le-editor-border-focus: #4a6cf7;--le-editor-border-radius: 10px;--le-editor-font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--le-editor-font-size: 15px;--le-editor-line-height: 1.7;--le-editor-padding: 20px 24px;--le-editor-min-height: 200px;--le-editor-placeholder-color: #94a3b8;--le-accent: #4a6cf7;--le-accent-hover: #3b5de7;--le-accent-light: rgba(74, 108, 247, .1);--le-dropdown-bg: #ffffff;--le-dropdown-shadow: 0 8px 32px rgba(0, 0, 0, .1), 0 2px 8px rgba(0, 0, 0, .05);--le-dropdown-border: #f1f5f9;--le-statusbar-color: #94a3b8;--le-statusbar-bg: #f8fafc}[data-ledithor]{width:100%}.le-editor-container{display:flex;flex-direction:column;width:100%;border:1.5px solid var(--le-editor-border);border-radius:var(--le-editor-border-radius);background:var(--le-editor-bg);position:relative;box-shadow:0 1px 4px #0000000a;transition:border-color .2s ease,box-shadow .2s ease}.le-editor-container:focus-within{border-color:var(--le-editor-border-focus);box-shadow:0 0 0 3px var(--le-accent-light)}.le-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 10px;background:var(--le-toolbar-bg);border-bottom:1px solid var(--le-toolbar-border);border-radius:var(--le-editor-border-radius) var(--le-editor-border-radius) 0 0;-webkit-user-select:none;user-select:none;overflow:visible}.le-toolbar-group{display:flex;align-items:center;gap:1px}.le-toolbar-separator{width:1px;height:18px;background:var(--le-toolbar-separator);margin:0 5px;flex-shrink:0}.le-toolbar button{position:relative;display:inline-flex;align-items:center;justify-content:center;width:34px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:var(--le-toolbar-btn-color);cursor:pointer;font-size:14px;transition:background .15s ease,color .15s ease}.le-toolbar button:hover{background:var(--le-toolbar-btn-hover-bg);color:var(--le-toolbar-btn-hover-color, var(--le-toolbar-btn-color))}.le-toolbar button:active{opacity:.8}.le-toolbar button.is-active{background:var(--le-toolbar-btn-active-bg);color:var(--le-toolbar-btn-active-color)}.le-toolbar button[disabled]{opacity:.3;cursor:not-allowed}.le-toolbar button svg{width:24px;height:20px;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:round;stroke-linejoin:round}.le-toolbar button svg.lf-svg-icon{stroke-width:0}.le-toolbar button:after{content:attr(title);position:absolute;bottom:calc(100% + 8px);left:50%;margin-left:-9999px;transform:translate(-50%);padding:4px 9px;background:#1e293b;color:#f1f5f9;font-size:11px;font-weight:500;border-radius:5px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease;z-index:1000;letter-spacing:.01em;box-shadow:0 2px 8px #00000026;backface-visibility:hidden;-webkit-font-smoothing:subpixel-antialiased}.le-toolbar button:before{content:"";position:absolute;bottom:calc(100% + 4px);left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#1e293b;pointer-events:none;opacity:0;transition:opacity .15s ease;z-index:1000}.le-toolbar button:hover:after,.le-toolbar button:hover:before{opacity:1}.le-toolbar button:hover:after{margin-left:0;transform:translate(-50%)}.le-editor-content{flex:1;overflow-y:auto;position:relative}.le-editor-content .tiptap{padding:var(--le-editor-padding);min-height:var(--le-editor-min-height);font-family:var(--le-editor-font-family);font-size:var(--le-editor-font-size);line-height:var(--le-editor-line-height);color:var(--le-editor-text-color);outline:none;caret-color:var(--le-accent)}.le-editor-content .tiptap p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--le-editor-placeholder-color);pointer-events:none;height:0;font-style:italic}.le-editor-content .tiptap h1{font-size:1.9em;margin:.8em 0 .4em;font-weight:700;letter-spacing:-.02em;color:var(--le-editor-text-color);line-height:1.25}.le-editor-content .tiptap h2{font-size:1.5em;margin:.75em 0 .4em;font-weight:600;letter-spacing:-.01em;color:var(--le-editor-text-color);line-height:1.3}.le-editor-content .tiptap h3{font-size:1.2em;margin:.65em 0 .3em;font-weight:600;color:var(--le-editor-text-color);line-height:1.35}.le-editor-content .tiptap h4{font-size:1.05em;margin:.5em 0 .3em;font-weight:600;color:var(--le-editor-text-color)}.le-editor-content .tiptap p{margin:0 0 .6em}.le-editor-content .tiptap p:last-child{margin-bottom:0}.le-editor-content .tiptap ul,.le-editor-content .tiptap ol{padding-left:1.6em;margin:.5em 0 .7em;list-style-type:revert}.le-editor-content .tiptap li{margin:.2em 0}.le-editor-content .tiptap li::marker{color:var(--le-accent)}.le-editor-content .tiptap blockquote{border-left:3px solid var(--le-accent);padding:.7em 1.2em;margin:1em 0;background:var(--le-accent-light);border-radius:0 6px 6px 0;color:var(--le-editor-text-color);font-style:italic;opacity:.85}.le-editor-content .tiptap code{background:#0000000d;padding:2px 7px;border-radius:4px;font-size:.875em;font-family:JetBrains Mono,Fira Code,Consolas,monospace;color:var(--le-accent)}.le-editor-content .tiptap pre{background:#0f172a;color:#e2e8f0;padding:16px 20px;border-radius:8px;overflow-x:auto;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:13px;line-height:1.7;margin:.8em 0}.le-editor-content .tiptap pre code{background:none;padding:0;color:inherit;font-size:inherit}.le-editor-content .tiptap hr{border:none;height:2px;background:var(--le-toolbar-border);margin:1.5em 0;border-radius:2px}.le-editor-content .tiptap img{max-width:100%;height:auto;border-radius:6px;box-shadow:0 2px 10px #00000014}.le-editor-content .tiptap table{border-collapse:collapse;width:100%;margin:1em 0;border-radius:6px;overflow:hidden;border:1px solid var(--le-toolbar-border);font-size:.95em}.le-editor-content .tiptap th,.le-editor-content .tiptap td{border:1px solid var(--le-toolbar-border);padding:9px 13px;text-align:left}.le-editor-content .tiptap th{background:var(--le-toolbar-bg);font-weight:600;color:var(--le-editor-text-color);font-size:.875em;text-transform:uppercase;letter-spacing:.04em}.le-editor-content .tiptap tr:hover td{background:var(--le-accent-light)}.le-editor-content .tiptap a{color:var(--le-accent);text-decoration:none;border-bottom:1px solid var(--le-accent-light);transition:border-color .15s}.le-editor-content .tiptap a:hover{border-bottom-color:var(--le-accent)}.le-editor-content .tiptap mark{background:#fef08a;padding:1px 3px;border-radius:3px;box-decoration-break:clone;-webkit-box-decoration-break:clone}.le-editor-content .tiptap ::selection{background:var(--le-accent-light)}.le-link-popup{position:absolute;z-index:100;background:var(--le-dropdown-bg);border:1px solid var(--le-dropdown-border);border-radius:10px;box-shadow:var(--le-dropdown-shadow);padding:8px;display:flex;gap:6px;animation:le-popup-in .18s ease}@keyframes le-popup-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.le-link-popup input{border:1.5px solid var(--le-editor-border);border-radius:7px;padding:8px 12px;font-size:13px;width:250px;outline:none;font-family:inherit;background:var(--le-editor-bg);color:var(--le-editor-text-color);transition:border-color .15s,box-shadow .15s}.le-link-popup input:focus{border-color:var(--le-accent);box-shadow:0 0 0 3px var(--le-accent-light)}.le-link-popup button{padding:8px 14px;border:none;border-radius:7px;background:var(--le-accent);color:#fff;cursor:pointer;font-size:13px;font-weight:600;transition:background .15s,opacity .15s;white-space:nowrap}.le-link-popup button:hover{background:var(--le-accent-hover, var(--le-accent));opacity:.9}.le-link-popup button:active{opacity:.75}.le-heading-dropdown{position:absolute;z-index:100;background:var(--le-dropdown-bg);border:1px solid var(--le-dropdown-border);border-radius:10px;box-shadow:var(--le-dropdown-shadow);padding:4px;min-width:150px;animation:le-popup-in .18s ease}.le-heading-dropdown button{display:block;width:100%;text-align:left;padding:7px 12px;border:none;background:none;cursor:pointer;border-radius:6px;font-size:13px;color:var(--le-toolbar-btn-color);transition:background .12s,color .12s}.le-heading-dropdown button:hover{background:var(--le-toolbar-btn-hover-bg);color:var(--le-accent)}.le-dropdown-scroll{max-height:280px;overflow-y:auto}.le-color-popup{position:absolute;z-index:100;top:100%;left:0;background:var(--le-dropdown-bg);border:1px solid var(--le-dropdown-border);border-radius:var(--le-dropdown-radius);box-shadow:var(--le-dropdown-shadow);padding:8px;animation:le-popup-in .18s ease}.le-color-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:4px}.le-color-swatch{width:24px;height:24px;border:2px solid transparent;border-radius:4px;cursor:pointer;padding:0;transition:border-color .12s,transform .12s}.le-color-swatch:hover{border-color:var(--le-accent);transform:scale(1.15)}.le-color-unset{display:flex;align-items:center;justify-content:center;gap:4px;width:100%;margin-top:4px;padding:5px 0;border:1px solid var(--le-editor-border, #e2e8f0);border-radius:4px;background:var(--le-dropdown-bg, #fff);color:var(--le-toolbar-btn-color);font-size:11px;font-family:var(--le-editor-font-family, system-ui, sans-serif);cursor:pointer;text-align:center;transition:background .12s,border-color .12s,color .12s}.le-color-unset:hover{border-color:var(--le-accent);color:var(--le-accent);background:var(--le-accent-light, rgba(74, 108, 247, .06))}.le-color-unset svg{width:12px;height:12px;stroke:currentColor;stroke-width:2;fill:none}.le-statusbar{display:flex;align-items:center;padding:5px 16px;font-size:11px;font-weight:500;letter-spacing:.02em;color:var(--le-statusbar-color, #94a3b8)!important;background:var(--le-statusbar-bg, #f8fafc)!important;border-top:1px solid var(--le-toolbar-border);border-radius:0 0 var(--le-editor-border-radius) var(--le-editor-border-radius)}.le-statusbar-left,.le-statusbar-right{flex:1}.le-statusbar-right{text-align:right}.le-statusbar-center{display:flex;align-items:center;gap:5px;opacity:.7}.le-statusbar-center svg{width:16px;height:16px}.le-statusbar-center span{font-size:13px;font-weight:600;letter-spacing:.04em}.le-toolbar-wrapper{display:flex;align-items:flex-start;background:var(--le-toolbar-bg);border-bottom:1px solid var(--le-toolbar-border)}.le-toolbar-wrapper .le-toolbar{flex:1;border-bottom:none}.le-btn-fullscreen{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;margin:6px 8px 0 0;padding:0;border:none;border-radius:4px;background:transparent;color:var(--le-toolbar-btn-color);cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.le-btn-fullscreen svg{width:24px;height:24px}.le-btn-fullscreen:hover{background:var(--le-toolbar-btn-hover-bg, rgba(0, 0, 0, .06));color:var(--le-accent, #4a6cf7)}.le-fullscreen-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--le-fullscreen-z, 2147483647);background:#00000080;display:flex;align-items:center;justify-content:center;padding:24px}.le-editor-container.le-fullscreen{width:100%;height:100%;max-width:100%;max-height:100%;border-radius:10px;box-shadow:0 20px 60px #0000004d;display:flex;flex-direction:column;overflow:hidden}.le-fullscreen .le-toolbar-wrapper{flex-shrink:0}.le-fullscreen .le-editor-content{flex:1 1 0;min-height:0;max-height:none!important;overflow:hidden;display:flex;flex-direction:column}.le-fullscreen .le-editor-content .tiptap{flex:1 1 0;min-height:0!important;max-height:none!important;overflow-y:auto}.le-fullscreen .le-html-source{flex:1 1 0;min-height:0;overflow:hidden}.le-fullscreen .le-html-source .cm-editor{height:100%}.le-fullscreen .le-html-source .cm-scroller{flex:1;max-height:none!important}.le-fullscreen .le-statusbar{flex-shrink:0;border-bottom-left-radius:10px;border-bottom-right-radius:10px;border-top:1px solid var(--le-toolbar-border);padding:8px 20px}.le-btn-heading{font-weight:700!important;background:var(--le-editor-border, #e2e8f0)!important;border-radius:4px!important;margin:0 1px;min-width:28px}.le-btn-heading:hover,.le-btn-heading.is-active{background:var(--le-accent, #4a6cf7)!important;color:#fff!important}.le-html-editor{display:block;box-sizing:border-box}.le-toolbar button[data-btn=html].is-active{background:#0f172a;color:#22d3ee}.le-editor-container .le-html-source{display:block;width:100%;margin:0;border:none;border-top:2px solid #1e293b;box-sizing:border-box;overflow:hidden}.le-html-source .cm-scroller::-webkit-scrollbar{width:5px}.le-html-source .cm-scroller::-webkit-scrollbar-track{background:transparent}.le-html-source .cm-scroller::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:3px}.le-html-notice{padding:8px 16px;background:#1e293b;color:#fbbf24;font-size:12px;font-family:var(--le-font-text, system-ui, sans-serif);border-bottom:1px solid #334155;text-align:center;animation:le-notice-fade 4s ease-in-out forwards}@keyframes le-notice-fade{0%,70%{opacity:1}to{opacity:0}}.le-btn-html.is-active{background:#0f172a!important;color:#22d3ee!important}.le-ai-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#ffffffd1;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);border-radius:var(--le-editor-border-radius)}.le-ai-overlay-bar{width:180px;height:3px;background:#e2e8f0;border-radius:99px;overflow:hidden}.le-ai-overlay-bar:after{content:"";display:block;height:100%;width:40%;background:linear-gradient(90deg,#6366f1,#8b5cf6);border-radius:99px;animation:le-ai-progress 1.2s ease-in-out infinite}@keyframes le-ai-progress{0%{transform:translate(-100%)}to{transform:translate(350%)}}.le-ai-overlay-text{font-size:12px;font-weight:500;color:#6366f1;letter-spacing:.02em}.le-btn-ai{background:linear-gradient(135deg,#6366f1,#8b5cf6)!important;color:#fff!important;border-radius:6px!important;padding:0 10px!important;gap:5px;font-size:12px;font-weight:600;box-shadow:0 0 0 0 transparent!important}.le-btn-ai:hover:not(:disabled){background:linear-gradient(135deg,#4f46e5,#7c3aed)!important;box-shadow:0 0 5px #7c3aed!important}.le-btn-ai:disabled,.le-btn-ai.le-btn-ai--empty{background:#c4b5fd!important;cursor:not-allowed}.le-btn-ai.le-btn-ai--cooldown{background:#7c3aed!important;cursor:not-allowed;font-size:11px;font-weight:700;gap:4px;min-width:52px;justify-content:center}.le-btn-ai:disabled:after,.le-btn-ai.le-btn-ai--empty:after,.le-btn-ai.le-btn-ai--cooldown:after,.le-btn-ai:disabled:before,.le-btn-ai.le-btn-ai--empty:before,.le-btn-ai.le-btn-ai--cooldown:before{display:none}.le-btn-ai svg{vertical-align:middle}@keyframes le-spin{to{transform:rotate(360deg)}}.le-spin{animation:le-spin .8s linear infinite}.le-prompt-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--le-fullscreen-z, 2147483647);background:#0006;display:flex;align-items:center;justify-content:center;animation:le-popup-in .18s ease}.le-prompt-dialog{background:var(--le-dropdown-bg, #fff);border-radius:12px;padding:24px;min-width:340px;max-width:480px;box-shadow:0 20px 60px #0003}.le-prompt-label{display:block;font-size:14px;font-weight:600;color:var(--le-editor-text-color, #1e293b);margin-bottom:10px;font-family:var(--le-editor-font-family, system-ui, sans-serif)}.le-prompt-input{width:100%;padding:10px 14px;border:1.5px solid var(--le-editor-border, #e2e8f0);border-radius:8px;font-size:14px;font-family:inherit;color:var(--le-editor-text-color, #1e293b);background:var(--le-editor-bg, #fff);outline:none;transition:border-color .15s,box-shadow .15s;box-sizing:border-box}.le-prompt-input:focus{border-color:var(--le-accent, #4a6cf7);box-shadow:0 0 0 3px var(--le-accent-light, rgba(74, 108, 247, .1))}.le-prompt-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.le-prompt-btn{padding:8px 18px;border:none;border-radius:7px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .15s,opacity .15s}.le-prompt-btn-cancel{background:var(--le-toolbar-btn-hover-bg, rgba(0, 0, 0, .06));color:var(--le-toolbar-btn-color, #64748b)}.le-prompt-btn-cancel:hover{opacity:.8}.le-prompt-btn-confirm{background:var(--le-accent, #4a6cf7);color:#fff}.le-prompt-btn-confirm:hover{background:var(--le-accent-hover, #3b5de7)}.le-editor-content::-webkit-scrollbar{width:5px}.le-editor-content::-webkit-scrollbar-track{background:transparent}.le-editor-content::-webkit-scrollbar-thumb{background:#0000001f;border-radius:3px}.le-editor-content::-webkit-scrollbar-thumb:hover{background:#00000038}.le-html-source::-webkit-scrollbar{width:5px}.le-html-source::-webkit-scrollbar-track{background:transparent}.le-html-source::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:3px}.le-editor-content .tiptap div[data-type=styled-box]{display:block;margin:.7em 0}.le-theme-laboral{--le-accent: #10b981;--le-accent-hover: #059669;--le-accent-light: rgba(16, 185, 129, .12);--le-toolbar-bg: #f0fdf4;--le-toolbar-btn-hover-bg: rgba(16, 185, 129, .08);--le-toolbar-btn-active-bg: rgba(16, 185, 129, .14);--le-toolbar-btn-active-color: #065f46;--le-editor-border-focus: #10b981}.le-theme-fiscal{--le-accent: #f59e0b;--le-accent-hover: #d97706;--le-accent-light: rgba(245, 158, 11, .12);--le-toolbar-bg: #fffbeb;--le-toolbar-btn-hover-bg: rgba(245, 158, 11, .08);--le-toolbar-btn-active-bg: rgba(245, 158, 11, .15);--le-toolbar-btn-active-color: #92400e;--le-editor-border-focus: #f59e0b}.le-theme-civil{--le-accent: #3b82f6;--le-accent-hover: #2563eb;--le-accent-light: rgba(59, 130, 246, .12);--le-toolbar-bg: #eff6ff;--le-toolbar-btn-hover-bg: rgba(59, 130, 246, .08);--le-toolbar-btn-active-bg: rgba(59, 130, 246, .14);--le-toolbar-btn-active-color: #1e40af;--le-editor-border-focus: #3b82f6}.le-theme-penal{--le-accent: #ef4444;--le-accent-hover: #dc2626;--le-accent-light: rgba(239, 68, 68, .12);--le-toolbar-bg: #fef2f2;--le-toolbar-btn-hover-bg: rgba(239, 68, 68, .08);--le-toolbar-btn-active-bg: rgba(239, 68, 68, .14);--le-toolbar-btn-active-color: #991b1b;--le-editor-border-focus: #ef4444}.le-theme-social{--le-accent: #8b5cf6;--le-accent-hover: #7c3aed;--le-accent-light: rgba(139, 92, 246, .12);--le-toolbar-bg: #f5f3ff;--le-toolbar-btn-hover-bg: rgba(139, 92, 246, .08);--le-toolbar-btn-active-bg: rgba(139, 92, 246, .14);--le-toolbar-btn-active-color: #5b21b6;--le-editor-border-focus: #8b5cf6}.le-theme-mercantil{--le-accent: #14b8a6;--le-accent-hover: #0d9488;--le-accent-light: rgba(20, 184, 166, .12);--le-toolbar-bg: #f0fdfa;--le-toolbar-btn-hover-bg: rgba(20, 184, 166, .08);--le-toolbar-btn-active-bg: rgba(20, 184, 166, .14);--le-toolbar-btn-active-color: #115e59;--le-editor-border-focus: #14b8a6}.le-theme-dark{--le-toolbar-bg: #1e1e2e;--le-toolbar-border: #313244;--le-toolbar-btn-color: #a6adc8;--le-toolbar-btn-hover-bg: rgba(255, 255, 255, .07);--le-toolbar-btn-hover-color: #cdd6f4;--le-toolbar-btn-active-bg: rgba(137, 180, 250, .18);--le-toolbar-btn-active-color: #89b4fa;--le-toolbar-separator: #45475a;--le-editor-bg: #181825;--le-editor-text-color: #cdd6f4;--le-editor-border: #313244;--le-editor-border-focus: #89b4fa;--le-editor-placeholder-color: #6c7086;--le-accent: #89b4fa;--le-accent-hover: #74a8f8;--le-accent-light: rgba(137, 180, 250, .15);--le-dropdown-bg: #1e1e2e;--le-dropdown-border: #313244;--le-dropdown-shadow: 0 8px 32px rgba(0, 0, 0, .5);--le-statusbar-bg: #181825;--le-statusbar-color: #6c7086}.le-theme-compact{--le-editor-padding: 10px 14px;--le-editor-font-size: 13px;--le-editor-min-height: 120px;--le-editor-line-height: 1.5}.le-theme-dark.le-theme-laboral{--le-accent: #34d399;--le-accent-hover: #10b981;--le-accent-light: rgba(52, 211, 153, .15);--le-editor-border-focus: #34d399;--le-toolbar-btn-active-bg: rgba(52, 211, 153, .18);--le-toolbar-btn-active-color: #34d399}.le-theme-dark.le-theme-fiscal{--le-accent: #fbbf24;--le-accent-hover: #f59e0b;--le-accent-light: rgba(251, 191, 36, .15);--le-editor-border-focus: #fbbf24;--le-toolbar-btn-active-bg: rgba(251, 191, 36, .18);--le-toolbar-btn-active-color: #fbbf24}.le-theme-dark.le-theme-civil{--le-accent: #60a5fa;--le-accent-hover: #3b82f6;--le-accent-light: rgba(96, 165, 250, .15);--le-editor-border-focus: #60a5fa;--le-toolbar-btn-active-bg: rgba(96, 165, 250, .18);--le-toolbar-btn-active-color: #60a5fa}.le-theme-dark.le-theme-penal{--le-accent: #f87171;--le-accent-hover: #ef4444;--le-accent-light: rgba(248, 113, 113, .15);--le-editor-border-focus: #f87171;--le-toolbar-btn-active-bg: rgba(248, 113, 113, .18);--le-toolbar-btn-active-color: #f87171}.le-theme-dark.le-theme-social{--le-accent: #a78bfa;--le-accent-hover: #8b5cf6;--le-accent-light: rgba(167, 139, 250, .15);--le-editor-border-focus: #a78bfa;--le-toolbar-btn-active-bg: rgba(167, 139, 250, .18);--le-toolbar-btn-active-color: #a78bfa}')),document.head.appendChild(t)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();function Ta(t){this.content=t}Ta.prototype={constructor:Ta,find:function(t){for(var e=0;e<this.content.length;e+=2)if(this.content[e]===t)return e;return-1},get:function(t){var e=this.find(t);return e==-1?void 0:this.content[e+1]},update:function(t,e,n){var o=n&&n!=t?this.remove(n):this,r=o.find(t),a=o.content.slice();return r==-1?a.push(n||t,e):(a[r+1]=e,n&&(a[r]=n)),new Ta(a)},remove:function(t){var e=this.find(t);if(e==-1)return this;var n=this.content.slice();return n.splice(e,2),new Ta(n)},addToStart:function(t,e){return new Ta([t,e].concat(this.remove(t).content))},addToEnd:function(t,e){var n=this.remove(t).content.slice();return n.push(t,e),new Ta(n)},addBefore:function(t,e,n){var o=this.remove(e),r=o.content.slice(),a=o.find(t);return r.splice(a==-1?r.length:a,0,e,n),new Ta(r)},forEach:function(t){for(var e=0;e<this.content.length;e+=2)t(this.content[e],this.content[e+1])},prepend:function(t){return t=Ta.from(t),t.size?new Ta(t.content.concat(this.subtract(t).content)):this},append:function(t){return t=Ta.from(t),t.size?new Ta(this.subtract(t).content.concat(t.content)):this},subtract:function(t){var e=this;t=Ta.from(t);for(var n=0;n<t.content.length;n+=2)e=e.remove(t.content[n]);return e},toObject:function(){var t={};return this.forEach(function(e,n){t[e]=n}),t},get size(){return this.content.length>>1}},Ta.from=function(t){if(t instanceof Ta)return t;var e=[];if(t)for(var n in t)e.push(n,t[n]);return new Ta(e)};function _T(t,e,n){for(let o=0;;o++){if(o==t.childCount||o==e.childCount)return t.childCount==e.childCount?null:n;let r=t.child(o),a=e.child(o);if(r==a){n+=r.nodeSize;continue}if(!r.sameMarkup(a))return n;if(r.isText&&r.text!=a.text){for(let i=0;r.text[i]==a.text[i];i++)n++;return n}if(r.content.size||a.content.size){let i=_T(r.content,a.content,n+1);if(i!=null)return i}n+=r.nodeSize}}function jT(t,e,n,o){for(let r=t.childCount,a=e.childCount;;){if(r==0||a==0)return r==a?null:{a:n,b:o};let i=t.child(--r),l=e.child(--a),s=i.nodeSize;if(i==l){n-=s,o-=s;continue}if(!i.sameMarkup(l))return{a:n,b:o};if(i.isText&&i.text!=l.text){let u=0,p=Math.min(i.text.length,l.text.length);for(;u<p&&i.text[i.text.length-u-1]==l.text[l.text.length-u-1];)u++,n--,o--;return{a:n,b:o}}if(i.content.size||l.content.size){let u=jT(i.content,l.content,n-1,o-1);if(u)return u}n-=s,o-=s}}class rt{constructor(e,n){if(this.content=e,this.size=n||0,n==null)for(let o=0;o<e.length;o++)this.size+=e[o].nodeSize}nodesBetween(e,n,o,r=0,a){for(let i=0,l=0;l<n;i++){let s=this.content[i],u=l+s.nodeSize;if(u>e&&o(s,r+l,a||null,i)!==!1&&s.content.size){let p=l+1;s.nodesBetween(Math.max(0,e-p),Math.min(s.content.size,n-p),o,r+p)}l=u}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,n,o,r){let a="",i=!0;return this.nodesBetween(e,n,(l,s)=>{let u=l.isText?l.text.slice(Math.max(e,s)-s,n-s):l.isLeaf?r?typeof r=="function"?r(l):r:l.type.spec.leafText?l.type.spec.leafText(l):"":"";l.isBlock&&(l.isLeaf&&u||l.isTextblock)&&o&&(i?i=!1:a+=o),a+=u},0),a}append(e){if(!e.size)return this;if(!this.size)return e;let n=this.lastChild,o=e.firstChild,r=this.content.slice(),a=0;for(n.isText&&n.sameMarkup(o)&&(r[r.length-1]=n.withText(n.text+o.text),a=1);a<e.content.length;a++)r.push(e.content[a]);return new rt(r,this.size+e.size)}cut(e,n=this.size){if(e==0&&n==this.size)return this;let o=[],r=0;if(n>e)for(let a=0,i=0;i<n;a++){let l=this.content[a],s=i+l.nodeSize;s>e&&((i<e||s>n)&&(l.isText?l=l.cut(Math.max(0,e-i),Math.min(l.text.length,n-i)):l=l.cut(Math.max(0,e-i-1),Math.min(l.content.size,n-i-1))),o.push(l),r+=l.nodeSize),i=s}return new rt(o,r)}cutByIndex(e,n){return e==n?rt.empty:e==0&&n==this.content.length?this:new rt(this.content.slice(e,n))}replaceChild(e,n){let o=this.content[e];if(o==n)return this;let r=this.content.slice(),a=this.size+n.nodeSize-o.nodeSize;return r[e]=n,new rt(r,a)}addToStart(e){return new rt([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new rt(this.content.concat(e),this.size+e.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let n=0;n<this.content.length;n++)if(!this.content[n].eq(e.content[n]))return!1;return!0}get firstChild(){return this.content.length?this.content[0]:null}get lastChild(){return this.content.length?this.content[this.content.length-1]:null}get childCount(){return this.content.length}child(e){let n=this.content[e];if(!n)throw new RangeError("Index "+e+" out of range for "+this);return n}maybeChild(e){return this.content[e]||null}forEach(e){for(let n=0,o=0;n<this.content.length;n++){let r=this.content[n];e(r,o,n),o+=r.nodeSize}}findDiffStart(e,n=0){return _T(this,e,n)}findDiffEnd(e,n=this.size,o=e.size){return jT(this,e,n,o)}findIndex(e){if(e==0)return F3(0,e);if(e==this.size)return F3(this.content.length,e);if(e>this.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let n=0,o=0;;n++){let r=this.child(n),a=o+r.nodeSize;if(a>=e)return a==e?F3(n+1,a):F3(n,o);o=a}}toString(){return"<"+this.toStringInner()+">"}toStringInner(){return this.content.join(", ")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,n){if(!n)return rt.empty;if(!Array.isArray(n))throw new RangeError("Invalid input for Fragment.fromJSON");return new rt(n.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return rt.empty;let n,o=0;for(let r=0;r<e.length;r++){let a=e[r];o+=a.nodeSize,r&&a.isText&&e[r-1].sameMarkup(a)?(n||(n=e.slice(0,r)),n[n.length-1]=a.withText(n[n.length-1].text+a.text)):n&&n.push(a)}return new rt(n||e,o)}static from(e){if(!e)return rt.empty;if(e instanceof rt)return e;if(Array.isArray(e))return this.fromArray(e);if(e.attrs)return new rt([e],e.nodeSize);throw new RangeError("Can not convert "+e+" to a Fragment"+(e.nodesBetween?" (looks like multiple versions of prosemirror-model were loaded)":""))}}rt.empty=new rt([],0);const eb={index:0,offset:0};function F3(t,e){return eb.index=t,eb.offset=e,eb}function H3(t,e){if(t===e)return!0;if(!(t&&typeof t=="object")||!(e&&typeof e=="object"))return!1;let n=Array.isArray(t);if(Array.isArray(e)!=n)return!1;if(n){if(t.length!=e.length)return!1;for(let o=0;o<t.length;o++)if(!H3(t[o],e[o]))return!1}else{for(let o in t)if(!(o in e)||!H3(t[o],e[o]))return!1;for(let o in e)if(!(o in t))return!1}return!0}let Ho=class $O{constructor(e,n){this.type=e,this.attrs=n}addToSet(e){let n,o=!1;for(let r=0;r<e.length;r++){let a=e[r];if(this.eq(a))return e;if(this.type.excludes(a.type))n||(n=e.slice(0,r));else{if(a.type.excludes(this.type))return e;!o&&a.type.rank>this.type.rank&&(n||(n=e.slice(0,r)),n.push(this),o=!0),n&&n.push(a)}}return n||(n=e.slice()),o||n.push(this),n}removeFromSet(e){for(let n=0;n<e.length;n++)if(this.eq(e[n]))return e.slice(0,n).concat(e.slice(n+1));return e}isInSet(e){for(let n=0;n<e.length;n++)if(this.eq(e[n]))return!0;return!1}eq(e){return this==e||this.type==e.type&&H3(this.attrs,e.attrs)}toJSON(){let e={type:this.type.name};for(let n in this.attrs){e.attrs=this.attrs;break}return e}static fromJSON(e,n){if(!n)throw new RangeError("Invalid input for Mark.fromJSON");let o=e.marks[n.type];if(!o)throw new RangeError(`There is no mark type ${n.type} in this schema`);let r=o.create(n.attrs);return o.checkAttrs(r.attrs),r}static sameSet(e,n){if(e==n)return!0;if(e.length!=n.length)return!1;for(let o=0;o<e.length;o++)if(!e[o].eq(n[o]))return!1;return!0}static setFrom(e){if(!e||Array.isArray(e)&&e.length==0)return $O.none;if(e instanceof $O)return[e];let n=e.slice();return n.sort((o,r)=>o.type.rank-r.type.rank),n}};Ho.none=[];class U3 extends Error{}class Bt{constructor(e,n,o){this.content=e,this.openStart=n,this.openEnd=o}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,n){let o=RT(this.content,e+this.openStart,n);return o&&new Bt(o,this.openStart,this.openEnd)}removeBetween(e,n){return new Bt(IT(this.content,e+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+"("+this.openStart+","+this.openEnd+")"}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(e,n){if(!n)return Bt.empty;let o=n.openStart||0,r=n.openEnd||0;if(typeof o!="number"||typeof r!="number")throw new RangeError("Invalid input for Slice.fromJSON");return new Bt(rt.fromJSON(e,n.content),o,r)}static maxOpen(e,n=!0){let o=0,r=0;for(let a=e.firstChild;a&&!a.isLeaf&&(n||!a.type.spec.isolating);a=a.firstChild)o++;for(let a=e.lastChild;a&&!a.isLeaf&&(n||!a.type.spec.isolating);a=a.lastChild)r++;return new Bt(e,o,r)}}Bt.empty=new Bt(rt.empty,0,0);function IT(t,e,n){let{index:o,offset:r}=t.findIndex(e),a=t.maybeChild(o),{index:i,offset:l}=t.findIndex(n);if(r==e||a.isText){if(l!=n&&!t.child(i).isText)throw new RangeError("Removing non-flat range");return t.cut(0,e).append(t.cut(n))}if(o!=i)throw new RangeError("Removing non-flat range");return t.replaceChild(o,a.copy(IT(a.content,e-r-1,n-r-1)))}function RT(t,e,n,o){let{index:r,offset:a}=t.findIndex(e),i=t.maybeChild(r);if(a==e||i.isText)return o&&!o.canReplace(r,r,n)?null:t.cut(0,e).append(n).append(t.cut(e));let l=RT(i.content,e-a-1,n,i);return l&&t.replaceChild(r,i.copy(l))}function oX(t,e,n){if(n.openStart>t.depth)throw new U3("Inserted content deeper than insertion position");if(t.depth-n.openStart!=e.depth-n.openEnd)throw new U3("Inconsistent open depths");return QT(t,e,n,0)}function QT(t,e,n,o){let r=t.index(o),a=t.node(o);if(r==e.index(o)&&o<t.depth-n.openStart){let i=QT(t,e,n,o+1);return a.copy(a.content.replaceChild(r,i))}else if(n.content.size)if(!n.openStart&&!n.openEnd&&t.depth==o&&e.depth==o){let i=t.parent,l=i.content;return c1(i,l.cut(0,t.parentOffset).append(n.content).append(l.cut(e.parentOffset)))}else{let{start:i,end:l}=rX(n,t);return c1(a,zT(t,i,l,e,o))}else return c1(a,X3(t,e,o))}function DT(t,e){if(!e.type.compatibleContent(t.type))throw new U3("Cannot join "+e.type.name+" onto "+t.type.name)}function tb(t,e,n){let o=t.node(n);return DT(o,e.node(n)),o}function s1(t,e){let n=e.length-1;n>=0&&t.isText&&t.sameMarkup(e[n])?e[n]=t.withText(e[n].text+t.text):e.push(t)}function sm(t,e,n,o){let r=(e||t).node(n),a=0,i=e?e.index(n):r.childCount;t&&(a=t.index(n),t.depth>n?a++:t.textOffset&&(s1(t.nodeAfter,o),a++));for(let l=a;l<i;l++)s1(r.child(l),o);e&&e.depth==n&&e.textOffset&&s1(e.nodeBefore,o)}function c1(t,e){return t.type.checkContent(e),t.copy(e)}function zT(t,e,n,o,r){let a=t.depth>r&&tb(t,e,r+1),i=o.depth>r&&tb(n,o,r+1),l=[];return sm(null,t,r,l),a&&i&&e.index(r)==n.index(r)?(DT(a,i),s1(c1(a,zT(t,e,n,o,r+1)),l)):(a&&s1(c1(a,X3(t,e,r+1)),l),sm(e,n,r,l),i&&s1(c1(i,X3(n,o,r+1)),l)),sm(o,null,r,l),new rt(l)}function X3(t,e,n){let o=[];if(sm(null,t,n,o),t.depth>n){let r=tb(t,e,n+1);s1(c1(r,X3(t,e,n+1)),o)}return sm(e,null,n,o),new rt(o)}function rX(t,e){let n=e.depth-t.openStart,o=e.node(n).copy(t.content);for(let r=n-1;r>=0;r--)o=e.node(r).copy(rt.from(o));return{start:o.resolveNoCache(t.openStart+n),end:o.resolveNoCache(o.content.size-t.openEnd-n)}}class cm{constructor(e,n,o){this.pos=e,this.path=n,this.parentOffset=o,this.depth=n.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position before the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position after the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,n=this.index(this.depth);if(n==e.childCount)return null;let o=this.pos-this.path[this.path.length-1],r=e.child(n);return o?e.child(n).cut(o):r}get nodeBefore(){let e=this.index(this.depth),n=this.pos-this.path[this.path.length-1];return n?this.parent.child(e).cut(0,n):e==0?null:this.parent.child(e-1)}posAtIndex(e,n){n=this.resolveDepth(n);let o=this.path[n*3],r=n==0?0:this.path[n*3-1]+1;for(let a=0;a<e;a++)r+=o.child(a).nodeSize;return r}marks(){let e=this.parent,n=this.index();if(e.content.size==0)return Ho.none;if(this.textOffset)return e.child(n).marks;let o=e.maybeChild(n-1),r=e.maybeChild(n);if(!o){let l=o;o=r,r=l}let a=o.marks;for(var i=0;i<a.length;i++)a[i].type.spec.inclusive===!1&&(!r||!a[i].isInSet(r.marks))&&(a=a[i--].removeFromSet(a));return a}marksAcross(e){let n=this.parent.maybeChild(this.index());if(!n||!n.isInline)return null;let o=n.marks,r=e.parent.maybeChild(e.index());for(var a=0;a<o.length;a++)o[a].type.spec.inclusive===!1&&(!r||!o[a].isInSet(r.marks))&&(o=o[a--].removeFromSet(o));return o}sharedDepth(e){for(let n=this.depth;n>0;n--)if(this.start(n)<=e&&this.end(n)>=e)return n;return 0}blockRange(e=this,n){if(e.pos<this.pos)return e.blockRange(this);for(let o=this.depth-(this.parent.inlineContent||this.pos==e.pos?1:0);o>=0;o--)if(e.pos<=this.end(o)&&(!n||n(this.node(o))))return new W3(this,e,o);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos<this.pos?e:this}toString(){let e="";for(let n=1;n<=this.depth;n++)e+=(e?"/":"")+this.node(n).type.name+"_"+this.index(n-1);return e+":"+this.parentOffset}static resolve(e,n){if(!(n>=0&&n<=e.content.size))throw new RangeError("Position "+n+" out of range");let o=[],r=0,a=n;for(let i=e;;){let{index:l,offset:s}=i.content.findIndex(a),u=a-s;if(o.push(i,l,r+s),!u||(i=i.child(l),i.isText))break;a=u-1,r+=s+1}return new cm(n,o,a)}static resolveCached(e,n){let o=VT.get(e);if(o)for(let a=0;a<o.elts.length;a++){let i=o.elts[a];if(i.pos==n)return i}else VT.set(e,o=new aX);let r=o.elts[o.i]=cm.resolve(e,n);return o.i=(o.i+1)%iX,r}}class aX{constructor(){this.elts=[],this.i=0}}const iX=12,VT=new WeakMap;class W3{constructor(e,n,o){this.$from=e,this.$to=n,this.depth=o}get start(){return this.$from.before(this.depth+1)}get end(){return this.$to.after(this.depth+1)}get parent(){return this.$from.node(this.depth)}get startIndex(){return this.$from.index(this.depth)}get endIndex(){return this.$to.indexAfter(this.depth)}}const lX=Object.create(null);let $0=class LO{constructor(e,n,o,r=Ho.none){this.type=e,this.attrs=n,this.marks=r,this.content=o||rt.empty}get children(){return this.content.content}get nodeSize(){return this.isLeaf?1:2+this.content.size}get childCount(){return this.content.childCount}child(e){return this.content.child(e)}maybeChild(e){return this.content.maybeChild(e)}forEach(e){this.content.forEach(e)}nodesBetween(e,n,o,r=0){this.content.nodesBetween(e,n,o,r,this)}descendants(e){this.nodesBetween(0,this.content.size,e)}get textContent(){return this.isLeaf&&this.type.spec.leafText?this.type.spec.leafText(this):this.textBetween(0,this.content.size,"")}textBetween(e,n,o,r){return this.content.textBetween(e,n,o,r)}get firstChild(){return this.content.firstChild}get lastChild(){return this.content.lastChild}eq(e){return this==e||this.sameMarkup(e)&&this.content.eq(e.content)}sameMarkup(e){return this.hasMarkup(e.type,e.attrs,e.marks)}hasMarkup(e,n,o){return this.type==e&&H3(this.attrs,n||e.defaultAttrs||lX)&&Ho.sameSet(this.marks,o||Ho.none)}copy(e=null){return e==this.content?this:new LO(this.type,this.attrs,e,this.marks)}mark(e){return e==this.marks?this:new LO(this.type,this.attrs,this.content,e)}cut(e,n=this.content.size){return e==0&&n==this.content.size?this:this.copy(this.content.cut(e,n))}slice(e,n=this.content.size,o=!1){if(e==n)return Bt.empty;let r=this.resolve(e),a=this.resolve(n),i=o?0:r.sharedDepth(n),l=r.start(i),s=r.node(i).content.cut(r.pos-l,a.pos-l);return new Bt(s,r.depth-i,a.depth-i)}replace(e,n,o){return oX(this.resolve(e),this.resolve(n),o)}nodeAt(e){for(let n=this;;){let{index:o,offset:r}=n.content.findIndex(e);if(n=n.maybeChild(o),!n)return null;if(r==e||n.isText)return n;e-=r+1}}childAfter(e){let{index:n,offset:o}=this.content.findIndex(e);return{node:this.content.maybeChild(n),index:n,offset:o}}childBefore(e){if(e==0)return{node:null,index:0,offset:0};let{index:n,offset:o}=this.content.findIndex(e);if(o<e)return{node:this.content.child(n),index:n,offset:o};let r=this.content.child(n-1);return{node:r,index:n-1,offset:o-r.nodeSize}}resolve(e){return cm.resolveCached(this,e)}resolveNoCache(e){return cm.resolve(this,e)}rangeHasMark(e,n,o){let r=!1;return n>e&&this.nodesBetween(e,n,a=>(o.isInSet(a.marks)&&(r=!0),!r)),r}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+="("+this.content.toStringInner()+")"),ZT(this.marks,e)}contentMatchAt(e){let n=this.type.contentMatch.matchFragment(this.content,0,e);if(!n)throw new Error("Called contentMatchAt on a node with invalid content");return n}canReplace(e,n,o=rt.empty,r=0,a=o.childCount){let i=this.contentMatchAt(e).matchFragment(o,r,a),l=i&&i.matchFragment(this.content,n);if(!l||!l.validEnd)return!1;for(let s=r;s<a;s++)if(!this.type.allowsMarks(o.child(s).marks))return!1;return!0}canReplaceWith(e,n,o,r){if(r&&!this.type.allowsMarks(r))return!1;let a=this.contentMatchAt(e).matchType(o),i=a&&a.matchFragment(this.content,n);return i?i.validEnd:!1}canAppend(e){return e.content.size?this.canReplace(this.childCount,this.childCount,e.content):this.type.compatibleContent(e.type)}check(){this.type.checkContent(this.content),this.type.checkAttrs(this.attrs);let e=Ho.none;for(let n=0;n<this.marks.length;n++){let o=this.marks[n];o.type.checkAttrs(o.attrs),e=o.addToSet(e)}if(!Ho.sameSet(e,this.marks))throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(n=>n.type.name)}`);this.content.forEach(n=>n.check())}toJSON(){let e={type:this.type.name};for(let n in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(n=>n.toJSON())),e}static fromJSON(e,n){if(!n)throw new RangeError("Invalid input for Node.fromJSON");let o;if(n.marks){if(!Array.isArray(n.marks))throw new RangeError("Invalid mark data for Node.fromJSON");o=n.marks.map(e.markFromJSON)}if(n.type=="text"){if(typeof n.text!="string")throw new RangeError("Invalid text node in JSON");return e.text(n.text,o)}let r=rt.fromJSON(e,n.content),a=e.nodeType(n.type).create(n.attrs,r,o);return a.type.checkAttrs(a.attrs),a}};$0.prototype.text=void 0;let sX=class AO extends $0{constructor(e,n,o,r){if(super(e,n,null,r),!o)throw new RangeError("Empty text nodes are not allowed");this.text=o}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):ZT(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,n){return this.text.slice(e,n)}get nodeSize(){return this.text.length}mark(e){return e==this.marks?this:new AO(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new AO(this.type,this.attrs,e,this.marks)}cut(e=0,n=this.text.length){return e==0&&n==this.text.length?this:this.withText(this.text.slice(e,n))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function ZT(t,e){for(let n=t.length-1;n>=0;n--)e=t[n].type.name+"("+e+")";return e}class d1{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,n){let o=new cX(e,n);if(o.next==null)return d1.empty;let r=BT(o);o.next&&o.err("Unexpected trailing text");let a=bX(fX(r));return gX(a,o),a}matchType(e){for(let n=0;n<this.next.length;n++)if(this.next[n].type==e)return this.next[n].next;return null}matchFragment(e,n=0,o=e.childCount){let r=this;for(let a=n;r&&a<o;a++)r=r.matchType(e.child(a).type);return r}get inlineContent(){return this.next.length!=0&&this.next[0].type.isInline}get defaultType(){for(let e=0;e<this.next.length;e++){let{type:n}=this.next[e];if(!(n.isText||n.hasRequiredAttrs()))return n}return null}compatible(e){for(let n=0;n<this.next.length;n++)for(let o=0;o<e.next.length;o++)if(this.next[n].type==e.next[o].type)return!0;return!1}fillBefore(e,n=!1,o=0){let r=[this];function a(i,l){let s=i.matchFragment(e,o);if(s&&(!n||s.validEnd))return rt.from(l.map(u=>u.createAndFill()));for(let u=0;u<i.next.length;u++){let{type:p,next:m}=i.next[u];if(!(p.isText||p.hasRequiredAttrs())&&r.indexOf(m)==-1){r.push(m);let b=a(m,l.concat(p));if(b)return b}}return null}return a(this,[])}findWrapping(e){for(let o=0;o<this.wrapCache.length;o+=2)if(this.wrapCache[o]==e)return this.wrapCache[o+1];let n=this.computeWrapping(e);return this.wrapCache.push(e,n),n}computeWrapping(e){let n=Object.create(null),o=[{match:this,type:null,via:null}];for(;o.length;){let r=o.shift(),a=r.match;if(a.matchType(e)){let i=[];for(let l=r;l.type;l=l.via)i.push(l.type);return i.reverse()}for(let i=0;i<a.next.length;i++){let{type:l,next:s}=a.next[i];!l.isLeaf&&!l.hasRequiredAttrs()&&!(l.name in n)&&(!r.type||s.validEnd)&&(o.push({match:l.contentMatch,type:l,via:r}),n[l.name]=!0)}}return null}get edgeCount(){return this.next.length}edge(e){if(e>=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function n(o){e.push(o);for(let r=0;r<o.next.length;r++)e.indexOf(o.next[r].next)==-1&&n(o.next[r].next)}return n(this),e.map((o,r)=>{let a=r+(o.validEnd?"*":" ")+" ";for(let i=0;i<o.next.length;i++)a+=(i?", ":"")+o.next[i].type.name+"->"+e.indexOf(o.next[i].next);return a}).join(`
|
|
40
|
+
`},{name:"buttonText",type:"text",help:"Texto del botón",label:"Texto del botón",mandatory:!0,example_value:"Adopta un gato"},{name:"buttonUrl",type:"text",help:"Enlace del botón",label:"URL del botón",mandatory:!0,example_value:"/conocenos"},{name:"image",type:"image",help:"Dirección de la imagen",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-4-3.png"},{name:"orientation",type:"select",help:"Posición de la imagen",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"left"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Texto_2025_Kyoto",category:"Texto",name:"Bloque de texto HTML con título opcional 2025",description:"Bloque de texto HTML libre con título opcional (h2 o h3) encima. Los <p> y <h2> internos del HTML llevan estilos Poppins/Inter aplicados. Para la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["texto","html"],fields:[{name:"title",type:"text",help:'Título opcional del bloque. TERNARIO: solo se renderiza si "Etiqueta del título" es "h2" O "h3" Y este campo tiene valor. Admite HTML',label:"Texto del título",mandatory:!1,example_value:"Casos de uso de la IA jurídica"},{name:"tipo",type:"select",help:'Controla etiqueta HTML Y tamaño del título (van ligados). Todos los tipos usan Poppins semibold color #262626. "Sin título" NO muestra el título aunque "Texto del título" tenga valor. "H1" → <h1> a 40px / line-height 48px. "H2 32px" → <h2> a 32px / line-height 40px. "H2" → <h2> a 24px / line-height 32px. "H3 24px" → <h3> a 24px / line-height 32px (mismo tamaño visual que "H2" pero etiqueta HTML distinta). "H3" → <h3> a 20px / line-height 28px. "H4" → <h4> a 20px / line-height 28px (mismo tamaño visual que "H3" pero etiqueta HTML distinta)',label:"Etiqueta del título",options:["none","h1","h2-32","h2","h3-24","h3","h4"],options_labels:["Sin título","H1","H2 32px","H2","H3 24px","H3","H4"],example_value:"h2"},{name:"contentHTML",type:"textArea",help:"Contenido HTML del bloque (admite <p>, <h2>, <ul>, <strong>, etc.). Se renderiza con set:html. Los <p> internos adoptan estilo Inter 1em, los <h2> internos Poppins 1.5em semibold",label:"Contenido HTML",mandatory:!1,example_value:"<p>La inteligencia artificial aplicada al Derecho permite automatizar tareas repetitivas, buscar jurisprudencia en segundos y redactar borradores de contratos con plantillas personalizables.</p>"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tiempo_2025_Londres",category:"Contenido",name:"Tiempo de lectura con icono de reloj GenIA-L 2025",description:'Pequeño bloque con icono de reloj y texto "X min" para indicar el tiempo estimado de lectura de un post. Sin lógica condicional. Para el directorio de GenIA-L en la corporativa de Lefebvre',framework:"Astro",priority:1,tags:["tiempo","lectura","reloj","genial"],fields:[{name:"minutes",type:"text",help:'Número de minutos estimados de lectura (sin unidades, solo el número; el componente añade " min" automáticamente). Campo obligatorio — si no se pasa, el componente renderiza " min" sin número',label:"Minutos de lectura",mandatory:!0,example_value:"8"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Titulo_2025_Algeciras",category:"Título",name:"Título versátil con múltiples estilos GenIA-L 2025",description:"Componente de título con 15 variantes de estilo (h1-h6, párrafo) y soporte para subtítulo adicional, descripción y sub-descripción. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["titulo","texto","genial"],fields:[{name:"title",type:"text",help:'Texto del título principal. Admite HTML. Se renderiza con la etiqueta seleccionada en "Etiqueta del título"',label:"Texto del título",mandatory:!1,example_value:"Inteligencia artificial al servicio del Derecho"},{name:"description",type:"text",help:"Descripción opcional debajo del título (Inter 16px, centrada). Admite HTML. Solo se muestra si tiene valor",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo GenIA-L transforma el trabajo diario de los despachos de abogados"},{name:"tipo",type:"select",help:'Estilo y etiqueta HTML del título. 15 variantes con distintos tamaños, alineaciones y márgenes: "h1" 36-56px centrado, "h1-40" 40px centrado mb-8, "h1-40-left" 40px izquierda, "h1-home" 36-56px centrado (usado como subtítulo del Home), "h2" 36-40px centrado, "h2-mb24" estilo badge fondo gris, "h2-mb64" 36-40px con padding, "h2-mb64-max900" igual con max-width 900px, "h3" 2xl semibold centrado, "h3-mb32" 32px izquierda, "h3-40-left" 40px izquierda, "h4"/"h5"/"h6" centrados sin estilos complejos, "p" párrafo simple. Si se pasa "h1Subtitle", el título se renderiza como badge (fondo gris, padding) y el "h1Subtitle" adopta el estilo principal',label:"Etiqueta del título",options:["h1","h1-40","h1-40-left","h1-home","h2","h2-mb24","h2-mb64","h2-mb64-max900","h3","h3-mb32","h3-40-left","h4","h5","h6","p"],options_labels:["H1 (36-56px centrado)","H1 40px centrado","H1 40px izquierda","H1 home","H2 36-40px centrado","H2 badge","H2 con padding","H2 padding max-900","H3 centrado","H3 32px izquierda","H3 40px izquierda","H4","H5","H6","Párrafo"],example_value:"h1"},{name:"flexJustify",type:"select",help:'Alineación horizontal del contenedor. "Izquierda" alinea a la izquierda; "Centro" centra',label:"Justificación del contenido",options:["justify-start","justify-center"],options_labels:["Izquierda","Centro"],example_value:"justify-start"},{name:"descriptionWidth",type:"select",help:'Ancho de la descripción en desktop (md+). "1/3" = 33% del ancho, "3/5" = 60%, "Completo" = 100%. ATENCIÓN: Tailwind JIT no genera clases desde template strings dinámicos (w-${descriptionWidth}), por lo que requiere estar en la safelist del tailwind.config',label:"Ancho de la descripción",options:["1/3","3/5","full"],options_labels:["1/3","3/5","Completo"],example_value:"1/3"},{name:"h1Subtitle",type:"text",help:'Subtítulo adicional que aparece DEBAJO del título. TERNARIO: solo se muestra si tiene valor. Cuando está relleno, el título se renderiza como badge pequeño (fondo gris) y este subtítulo asume el estilo del título según "tipo" (solo con tipos "h1", "h2-mb24", "h1-home" o "h1-40"; el resto ignora el subtítulo). Admite HTML',label:"Subtítulo del h1 (opcional)",mandatory:!1,example_value:"La plataforma de IA jurídica para despachos"},{name:"subdescription",type:"text",help:'Sub-descripción adicional (Poppins 20px, centrada). Solo se muestra si tiene valor. Aparece debajo de "description". Admite HTML',label:"Sub-descripción (Poppins 20px)",mandatory:!1,example_value:"Automatiza tareas, redacta documentos y encuentra jurisprudencia en segundos"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Titulo_2025_Santorini",category:"Título",name:"Pastilla de texto azul en mayúsculas GenIA-L 2025",description:"Pequeño <p> con texto en color azul corporativo, tracking ampliado, en MAYÚSCULAS y tamaño pequeño (14px). Pensado para etiquetas/badges de categoría. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["titulo","texto","badge","genial"],fields:[{name:"description",type:"text",help:"Texto del badge. Se muestra en MAYÚSCULAS automáticamente (CSS uppercase) con color azul oscuro (#001978), semibold y tracking ampliado. NO admite HTML (se renderiza como texto plano dentro de un <p>)",label:"Texto del badge",mandatory:!1,example_value:"IA Jurídica"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"VideoAutoplay",category:"Contenido",name:"Sección con vídeo autoplay",description:"Sección con vídeo que se reproduce automáticamente",framework:"Astro",tags:["video","autoplay","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Hoy empieza un nuevo capítulo de nuestra historia"},{name:"description",type:"text",help:"Texto del contenido",label:"Contenido principal",mandatory:!0,example_value:"Somos quienes te han acompañado durante décadas. Somos quienes se anticipan contigo al futuro del conocimiento jurídico."},{name:"iframeSrc",type:"video",help:"Enlace del vídeo",label:"URL del vídeo",mandatory:!0,example_value:"https://player.vimeo.com/video/1087114916?controls=0&autoplay=1&muted=1&loop=1&badge=0&autopause=0&player_id=0&app_id=58479"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Video_2025_Polop",category:"Contenido",name:"Ítem con título, descripción y vídeo MP4 GenIA-L 2025",description:"Bloque horizontal con título + descripción a la izquierda y vídeo MP4 reproducido con autoplay loop muted a la derecha. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["video","genial"],fields:[{name:"title",type:"text",help:"Título del ítem (h3). Admite HTML. Se renderiza siempre; si se deja vacío aparece el h3 vacío",label:"Texto del título",mandatory:!1,example_value:"Redacción automática de contratos"},{name:"description",type:"text",help:"Descripción del ítem. Admite HTML. Se renderiza siempre debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Genera borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas"},{name:"iframeSrc",type:"video",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como <source src="..." type="video/mp4"> con autoplay, loop y muted',label:"URL del archivo de vídeo (MP4)",mandatory:!1,example_value:"https://lefebvre.es/genia-l/videos/genial/video-trazabilidad.mp4"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Video_2025_Valencia",category:"Contenido",name:"Listado de ítems con vídeo MP4 GenIA-L 2025",description:"Listado apilado de vídeos MP4 con título y descripción. Cada ítem se renderiza con Video_2025_Polop. Incluye structured data SEO tipo VideoObject ItemList. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["video","lista","genial"],fields:[{name:"items",type:"list",help:"Listado de vídeos. Cada uno se renderiza con el componente Video_2025_Polop (título + descripción + vídeo lateral). Todos los vídeos se cargan con autoplay, loop y muted",label:"Listado de vídeos",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título del vídeo (h3 en el componente hijo). Admite HTML",label:"Texto del título",example_value:"Redacción automática de contratos"},{name:"description",type:"text",help:"Descripción del vídeo. Admite HTML",label:"Texto de la descripción",example_value:"Genera borradores de contratos en segundos a partir de plantillas personalizables"},{name:"iframeSrc",type:"text",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube a pesar del nombre del campo). Se usa como <source type="video/mp4">',label:"URL del archivo de vídeo (MP4)",example_value:"https://lefebvre.es/genia-l/videos/genial/video-trazabilidad.mp4"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"VueButton",category:"Call to Action",name:"Botón en Vue",description:"Botón de prueba en Vue",framework:"Vue",priority:2,tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",help:"Texto del botón",label:"Texto del botón",mandatory:!0,example_value:"Botón en Vue"},{name:"href",type:"text",help:"Enlace al que lleva el botón",label:"URL de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",help:"Ventana de apertura del enlace",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}]}},Symbol.toStringTag,{value:"Module"}))}];function uU(){return dU.map(e=>e.component.metadata).sort((e,n)=>{const o=e.priority??0,r=n.priority??0;return o!==r?r-o:(e.name||"").localeCompare(n.name||"")})}const pU=T2({props:{isComponentMode:Boolean,fullwidthMode:Boolean,debugMode:Boolean,submitForm:Boolean,toggleComponentModeFunction:Function,toggleFullwidthMode:Function,importConfigurationFunction:Function,globalPageConfiguration:Array,sectionSelected:String,availableSections:Array,parametersPageConfiguration:Object,renderApiDomain:String,inputId:String,allowRenderMode:{type:String,default:"open"}},emits:["update:sectionSelected","update:parametersPageConfiguration.global.sidebarEnabled","update:parametersPageConfiguration.global.renderAsBodyPart","update:parametersPageConfiguration.global.headSlot","update:parametersPageConfiguration.global.bodyBeginSlot","update:parametersPageConfiguration.global.footerSlot","update:parametersPageConfiguration.seo.robots","update:parametersPageConfiguration.seo.title","update:parametersPageConfiguration.seo.description"],setup(t){const e=t.renderApiDomain||"http://localhost:8003",n=rn(""),o=rn(!1),r=rn(!1),a=rn(null),i=rn(!1),l=()=>{const P=window.scrollY,w=document.querySelector(".lf-page-builder"),A=w?w.getBoundingClientRect().bottom+P:1/0;i.value=P>80&&P<A};Ci(()=>window.addEventListener("scroll",l)),Ld(()=>window.removeEventListener("scroll",l));const s=sa({get(){var w,A;const P=(w=t.globalPageConfiguration)==null?void 0:w.find(N=>N.section===t.sectionSelected);return((A=P==null?void 0:P.config)==null?void 0:A.width)||""},set(P){var A;const w=(A=t.globalPageConfiguration)==null?void 0:A.find(N=>N.section===t.sectionSelected);w&&(w.config||(w.config={}),w.config.width=P)}}),u=()=>{const P={pageConfig:t.globalPageConfiguration,paramsConfig:t.parametersPageConfiguration},w=JSON.stringify(P),A=new CustomEvent("lf-pagebuilder:export",{detail:{...P,inputId:t.inputId}});document.dispatchEvent(A);const N=window.open("","Preview","width='100vw',height='100vh'");N&&(N.document.body.innerText=w,N.document.close())},p=()=>{const P={pageConfig:t.globalPageConfiguration,paramsConfig:t.parametersPageConfiguration},w=JSON.stringify(P);m(w);const A=new CustomEvent("lf-pagebuilder:save",{detail:{...P,inputId:t.inputId}});if(document.dispatchEvent(A),t.inputId){const N=document.getElementById(t.inputId);N&&(N.value=w)}if(r.value=!0,setTimeout(()=>{r.value=!1},3e3),t.submitForm&&a.value){const N=a.value.closest("form");N&&N.submit()}},m=P=>{const w=t.inputId?`pageBuilderConfig_${t.inputId}`:"pageBuilderConfig";localStorage.setItem(w,P)};return{validateSeo:()=>{const P={pageConfig:t.globalPageConfiguration,paramsConfig:t.parametersPageConfiguration},w=JSON.stringify(P,null,2);fetch(e+"/api/render-html/",{method:"POST",headers:{"Content-Type":"application/json"},body:w}).then(A=>A.text()).then(A=>{const N=window.open("","Preview","width='100vw',height='100vh'");if(!N)return;const Z=new DOMParser().parseFromString(A,"text/html"),K=[];function X(Y,U=0){if(!Y||Y.nodeType!==1)return;const te=Y.tagName.toLowerCase();["h1","h2","h3","h4","h5","h6","a","p","article","section","header","footer"].includes(te)&&K.push({tag:te,text:(Y.textContent||"").trim().slice(0,80),depth:U}),Array.from(Y.children).forEach(de=>X(de,U+1))}X(Z.body);let ne='<h2>Estructura SEO</h2><ul style="font-family:monospace">';K.forEach(Y=>{ne+=`<li style="margin-left:${Y.depth*20}px"><b>${Y.tag}</b>: ${Y.text}</li>`}),ne+="</ul>",N.document.body.innerHTML=ne,N.document.close()})},importConfig:n,showAdvancedConfig:o,previewFunction:()=>{const P={pageConfig:t.globalPageConfiguration,paramsConfig:t.parametersPageConfiguration},w=JSON.stringify(P,null,2);fetch(e+"/api/render-html/",{method:"POST",headers:{"Content-Type":"application/json"},body:w}).then(A=>A.text()).then(A=>{const N=window.open("","Preview","width='100vw',height='100vh'");N&&(N.document.body.innerHTML=A,N.document.querySelectorAll("script").forEach(Z=>{var X;const K=N.document.createElement("script");Z.src?K.src=Z.src:K.textContent=Z.textContent,(X=Z.parentNode)==null||X.replaceChild(K,Z)}),N.document.close())})},importFunction:()=>{t.importConfigurationFunction&&t.importConfigurationFunction(n.value),n.value=""},exportFunction:u,saveButtonAction:p,loadFromLocalStorage:()=>{const P=t.inputId?`pageBuilderConfig_${t.inputId}`:"pageBuilderConfig",w=localStorage.getItem(P);if(w&&t.importConfigurationFunction){const A=JSON.parse(w);t.importConfigurationFunction(A)}},toggleExpandScreen:()=>{const P=document.querySelector(".lf-page-builder");P&&P.classList.toggle("expanded-page-builder")},scrollToTop:()=>{var w;const P=(w=a.value)==null?void 0:w.closest(".lf-page-builder");P&&P.scrollIntoView({behavior:"smooth",block:"start"})},sectionWidth:s,isSaved:r,componentRoot:a,isScrolled:i}}}),B3=(t,e)=>{const n=t.__vccOpts||t;for(const[o,r]of e)n[o]=r;return n},mU={ref:"componentRoot"},hU={class:"mecano:fixed mecano:bottom-6 mecano:right-6 mecano:z-[10] mecano:flex mecano:gap-3"},fU={key:0,class:"mecano:flex mecano:justify-end mecano:items-center mecano:w-full mecano:p-3 mecano:gap-3"},bU={class:"mecano:flex mecano:justify-end mecano:items-center mecano:p-2 mecano:gap-3 mecano:bg-gradient-to-l mecano:from-lime-50 mecano:to-green-100 mecano:border mecano:border-lime-400 mecano:rounded-lg mecano:w-auto"},gU={class:"mecano:flex mecano:flex-wrap mecano:justify-between mecano:gap-3 mecano:px-5 mecano:py-3 mecano:bg-white mecano:mx-3 mecano:rounded-xl mecano:border mecano:border-slate-200 mecano:mb-6 mecano:sticky mecano:top-2 z-9999 mecano:shadow-lg mecano:backdrop-blur-sm"},vU={class:"mecano:flex mecano:gap-2"},yU={class:"mecano:flex mecano:gap-2"},CU=["value"],xU=["value"],wU={value:"full"},OU={value:"1/2"},SU={value:"1/3"},kU={value:"2/3"},TU={value:"1/4"},EU={value:"3/4"},MU={value:"1/5"},$U={value:"2/5"},LU={value:"3/5"},AU={value:"4/5"},PU={key:0},NU={key:1},_U={class:"mecano:flex mecano:items-center mecano:gap-2"},jU={key:1,class:"mecano:bg-white mecano:border mecano:border-slate-200 mecano:rounded-2xl mecano:p-5 mecano:mx-3 mecano:mb-6 mecano:shadow-lg"},IU={class:"mecano:flex mecano:flex-row mecano:gap-4 mecano:w-full"},RU={class:"mecano:border mecano:border-slate-200 mecano:rounded-xl mecano:p-5 mecano:w-full mecano:bg-gradient-to-br mecano:from-slate-50 mecano:to-white"},QU={class:"mecano:flex mecano:flex-col mecano:gap-3 mecano:border-b mecano:border-slate-200 mecano:pb-4 mecano:w-full"},DU={class:"mecano:mb-3"},zU={class:"mecano:flex mecano:items-center mecano:gap-3 mecano:cursor-pointer mecano:group"},VU={class:"mecano:mb-3"},ZU={class:"mecano:flex mecano:flex-col mecano:gap-2"},BU=["disabled"],FU=["disabled"],HU={key:0,class:"mecano:text-xs mecano:text-slate-400 mecano:italic"},UU={key:0,class:"mecano:mb-3"},XU={key:1,class:"mecano:mb-3"},WU={key:2,class:"mecano:mb-3"},qU={key:0,class:"mecano:border mecano:border-slate-200 mecano:rounded-xl mecano:p-5 mecano:w-full mecano:bg-gradient-to-br mecano:from-slate-50 mecano:to-white"},GU={class:"mecano:flex mecano:justify-between mecano:items-center mecano:mb-4"},YU={class:"mecano:flex mecano:flex-col mecano:gap-3 mecano:border-b mecano:border-slate-200 mecano:pb-4 mecano:w-full"},KU={class:"mecano:mb-3"},JU={class:"mecano:mb-3"},eX={class:"mecano:mb-3"};function tX(t,e,n,o,r,a){return ve(),we("div",mU,[(ve(),El(MS,{to:"body"},[So(V("div",hU,[V("button",{type:"button",onClick:e[0]||(e[0]=i=>t.saveButtonAction()),title:"Guardar configuración",class:"mecano:cursor-pointer mecano:bg-gradient-to-r mecano:from-emerald-500 mecano:to-teal-500 mecano:hover:from-emerald-600 mecano:hover:to-teal-600 mecano:text-white mecano:border mecano:border-emerald-500 mecano:rounded-full mecano:px-5 mecano:py-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-300 mecano:shadow-xl mecano:hover:shadow-2xl mecano:hover:scale-105"},Wt(t.isSaved?"✅ Guardado":"💾 Guardar"),1),V("button",{type:"button",onClick:e[1]||(e[1]=i=>t.scrollToTop()),title:"Guardar configuración",class:"mecano:cursor-pointer mecano:bg-gradient-to-r mecano:from-cyan-600 mecano:to-cyan-600 mecano:hover:from-cyan-600 mecano:hover:to-cyan-600 mecano:text-white mecano:border mecano:border-cyan-600 mecano:rounded-full mecano:px-5 mecano:py-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-300 mecano:shadow-xl mecano:hover:shadow-2xl mecano:hover:scale-105"}," △ ")],512),[[nm,t.isScrolled]])])),t.debugMode?(ve(),we("div",fU,[V("div",bU,[e[34]||(e[34]=V("span",{class:"mecano:bg-gradient-to-r mecano:from-lime-200 mecano:to-green-300 mecano:px-3 mecano:py-1 mecano:rounded-full mecano:border mecano:border-lime-600 mecano:text-lime-800 mecano:text-xs mecano:font-medium mecano:me-4 mecano:italic"},"MODO DEBUG 🐞",-1)),V("form",{onSubmit:e[4]||(e[4]=am(()=>{},["prevent"])),class:"mecano:flex mecano:gap-2"},[So(V("input",{"onUpdate:modelValue":e[2]||(e[2]=i=>t.importConfig=i),type:"text",class:"mecano:bg-white mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400",name:"",id:"",placeholder:"Pegar configuración..."},null,512),[[d2,t.importConfig]]),V("button",{type:"button",onClick:e[3]||(e[3]=i=>t.importFunction()),class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-slate-700 mecano:hover:text-white mecano:border mecano:border-slate-200 mecano:hover:border-slate-700 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"🏯 Importar")],32),V("button",{type:"button",onClick:e[5]||(e[5]=i=>t.exportFunction()),class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-slate-700 mecano:hover:text-white mecano:border mecano:border-slate-200 mecano:hover:border-slate-700 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"🚀 Exportar")])])):ln("",!0),V("div",gU,[V("div",vU,[V("button",{type:"button",class:Fo([[t.isComponentMode?"mecano:bg-gradient-to-r mecano:from-slate-600 mecano:to-slate-700 mecano:border-slate-700 mecano:text-white mecano:shadow-md":"mecano:bg-white mecano:hover:bg-slate-100"],"mecano:cursor-pointer mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:py-1.5 mecano:px-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200"]),onClick:e[6]||(e[6]=i=>{var l;return(l=t.toggleComponentModeFunction)==null?void 0:l.call(t)})},Wt(t.isComponentMode?"⚒️ Modo Configuración":"👁️ Modo Visual"),3),V("button",{type:"button",class:Fo([[t.fullwidthMode?"mecano:bg-white mecano:hover:bg-slate-100":"mecano:bg-gradient-to-r mecano:from-slate-600 mecano:to-slate-700 mecano:border-slate-700 mecano:text-white mecano:shadow-md"],"mecano:cursor-pointer mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:py-1.5 mecano:px-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200"]),onClick:e[7]||(e[7]=i=>{var l;return(l=t.toggleFullwidthMode)==null?void 0:l.call(t)})},Wt(t.fullwidthMode?"⚒️ Comps. Plegados":"👁️ Comps. Desplegados"),3)]),V("div",yU,[V("select",{value:t.sectionSelected,onChange:e[8]||(e[8]=i=>t.$emit("update:sectionSelected",i.target.value)),class:"mecano:bg-white mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:cursor-pointer mecano:text-sm mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:transition-colors"},[(ve(!0),we(dn,null,Vo(t.availableSections,(i,l)=>(ve(),we("option",{key:l,value:i},Wt(i),9,xU))),128))],40,CU),So(V("select",{class:"mecano:bg-white mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:cursor-pointer mecano:text-sm mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:transition-colors","onUpdate:modelValue":e[9]||(e[9]=i=>t.sectionWidth=i)},[e[35]||(e[35]=V("option",{disabled:"",value:""},"Selecciona el ancho de la sección",-1)),V("option",wU,"Sección "+Wt(t.sectionSelected)+" ocupa todo el ancho de la página",1),V("option",OU,"Sección "+Wt(t.sectionSelected)+" ocupa 1/2 del ancho de la página",1),V("option",SU,"Sección "+Wt(t.sectionSelected)+" ocupa 1/3 del ancho de la página",1),V("option",kU,"Sección "+Wt(t.sectionSelected)+" ocupa 2/3 del ancho de la página",1),V("option",TU,"Sección "+Wt(t.sectionSelected)+" ocupa 1/4 del ancho de la página",1),V("option",EU,"Sección "+Wt(t.sectionSelected)+" ocupa 3/4 del ancho de la página",1),V("option",MU,"Sección "+Wt(t.sectionSelected)+" ocupa 1/5 del ancho de la página",1),V("option",$U,"Sección "+Wt(t.sectionSelected)+" ocupa 2/5 del ancho de la página",1),V("option",LU,"Sección "+Wt(t.sectionSelected)+" ocupa 3/5 del ancho de la página",1),V("option",AU,"Sección "+Wt(t.sectionSelected)+" ocupa 4/5 del ancho de la página",1)],512),[[G2,t.sectionWidth]]),V("button",{type:"button",class:Fo(["mecano:cursor-pointer mecano:border mecano:rounded-lg mecano:py-1.5 mecano:px-3 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:flex mecano:items-center mecano:gap-2",t.showAdvancedConfig?"mecano:bg-gradient-to-r mecano:from-amber-500 mecano:to-orange-500 mecano:border-amber-500 mecano:text-white mecano:shadow-md":"mecano:bg-white mecano:border-slate-200 mecano:hover:bg-slate-100"]),onClick:e[10]||(e[10]=i=>t.showAdvancedConfig=!t.showAdvancedConfig)},[e[36]||(e[36]=V("span",null,"⚙️ Configurar",-1)),t.showAdvancedConfig?(ve(),we("span",PU,"▲")):(ve(),we("span",NU,"▼"))],2)]),V("div",_U,[V("button",{type:"button",onClick:e[11]||(e[11]=i=>t.previewFunction()),class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-violet-500 mecano:hover:text-white mecano:hover:border-violet-500 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"🔎 Previsualización"),V("button",{type:"button",onClick:e[12]||(e[12]=i=>t.saveButtonAction()),title:"Guardar configuración en localStorage y disparar evento global",class:"mecano:cursor-pointer mecano:bg-gradient-to-r mecano:from-emerald-500 mecano:to-teal-500 mecano:hover:from-emerald-600 mecano:hover:to-teal-600 mecano:text-white mecano:border mecano:border-emerald-500 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},Wt(t.isSaved?t.submitForm?"⏳ Submiteando formulario":"✅ Se ha guardado correctamente":"💾 Guardar"),1),t.debugMode?(ve(),we("button",{key:0,type:"button",onClick:e[13]||(e[13]=i=>t.loadFromLocalStorage()),class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-blue-500 mecano:hover:text-white mecano:hover:border-blue-500 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"⤵️ Cargar")):ln("",!0),V("button",{type:"button",onClick:e[14]||(e[14]=i=>t.toggleExpandScreen()),title:"Expandir / Contraer Pagebuilder",class:"mecano:cursor-pointer mecano:bg-white mecano:hover:bg-slate-700 mecano:hover:text-white mecano:hover:border-slate-700 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:px-3 mecano:py-1.5 mecano:text-xl mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md mecano:ms-2"},"◳")]),e[37]||(e[37]=V("div",{class:"mecano:w-full mecano:border-t mecano:border-slate-100 mecano:mt-2 mecano:pt-1.5 mecano:text-center mecano:text-xs mecano:text-slate-400 mecano:italic"}," El resultado final únicamente se ve a través del botón de Previsualización ",-1))]),t.showAdvancedConfig&&t.parametersPageConfiguration?(ve(),we("div",jU,[V("div",IU,[V("div",RU,[e[45]||(e[45]=V("h2",{class:"mecano:text-lg mecano:font-bold mecano:mb-4 mecano:text-slate-700"},"Configuración Avanzada",-1)),e[46]||(e[46]=V("h3",{class:"mecano:font-semibold mecano:mb-3 mecano:text-slate-600"},"Configuración Global",-1)),V("div",QU,[V("div",DU,[V("label",zU,[So(V("input",{type:"checkbox","onUpdate:modelValue":e[15]||(e[15]=i=>t.parametersPageConfiguration.global.sidebarEnabled=i),onChange:e[16]||(e[16]=i=>t.$emit("update:parametersPageConfiguration.global.sidebarEnabled",i.target.value)),class:"mecano:w-5 mecano:h-5 mecano:rounded mecano:border-slate-300 mecano:text-emerald-500 mecano:focus:ring-emerald-500 mecano:cursor-pointer"},null,544),[[l1,t.parametersPageConfiguration.global.sidebarEnabled]]),e[38]||(e[38]=V("span",{class:"mecano:text-slate-600 mecano:group-hover:text-slate-800 mecano:transition-colors"},"Sidebar Habilitado",-1))])]),V("div",VU,[e[41]||(e[41]=V("span",{class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"},"Modo de renderizado",-1)),V("div",ZU,[V("label",{class:Fo(["mecano:flex mecano:items-center mecano:gap-3 mecano:group",t.allowRenderMode==="open"?"mecano:cursor-pointer":"mecano:cursor-not-allowed mecano:opacity-60"])},[So(V("input",{type:"radio","onUpdate:modelValue":e[17]||(e[17]=i=>t.parametersPageConfiguration.global.renderAsBodyPart=i),value:!1,disabled:t.allowRenderMode!=="open",onChange:e[18]||(e[18]=i=>t.$emit("update:parametersPageConfiguration.global.renderAsBodyPart",!1)),class:Fo(["mecano:w-4 mecano:h-4 mecano:border-slate-300 mecano:text-emerald-500 mecano:focus:ring-emerald-500",t.allowRenderMode==="open"?"mecano:cursor-pointer":"mecano:cursor-not-allowed"])},null,42,BU),[[rm,t.parametersPageConfiguration.global.renderAsBodyPart]]),e[39]||(e[39]=V("span",{class:"mecano:text-slate-600 mecano:group-hover:text-slate-800 mecano:transition-colors"},"Renderizar como una página completa",-1))],2),V("label",{class:Fo(["mecano:flex mecano:items-center mecano:gap-3 mecano:group",t.allowRenderMode==="open"?"mecano:cursor-pointer":"mecano:cursor-not-allowed mecano:opacity-60"])},[So(V("input",{type:"radio","onUpdate:modelValue":e[19]||(e[19]=i=>t.parametersPageConfiguration.global.renderAsBodyPart=i),value:!0,disabled:t.allowRenderMode!=="open",onChange:e[20]||(e[20]=i=>t.$emit("update:parametersPageConfiguration.global.renderAsBodyPart",!0)),class:Fo(["mecano:w-4 mecano:h-4 mecano:border-slate-300 mecano:text-emerald-500 mecano:focus:ring-emerald-500",t.allowRenderMode==="open"?"mecano:cursor-pointer":"mecano:cursor-not-allowed"])},null,42,FU),[[rm,t.parametersPageConfiguration.global.renderAsBodyPart]]),e[40]||(e[40]=V("span",{class:"mecano:text-slate-600 mecano:group-hover:text-slate-800 mecano:transition-colors"},"Renderizar como parte del Body (sin etiquetas HTML, HEAD, BODY)",-1))],2),t.allowRenderMode!=="open"?(ve(),we("span",HU,"El modo de renderizado está fijado externamente y no puede modificarse.")):ln("",!0)])]),t.parametersPageConfiguration.global.renderAsBodyPart?ln("",!0):(ve(),we("div",UU,[e[42]||(e[42]=V("label",{for:"headSlot",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Código al final de la sección <head> ",-1)),So(V("textarea",{id:"headSlot","onUpdate:modelValue":e[21]||(e[21]=i=>t.parametersPageConfiguration.global.headSlot=i),onInput:e[22]||(e[22]=i=>t.$emit("update:parametersPageConfiguration.global.headSlot",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-3 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:font-mono mecano:transition-colors",placeholder:"Contenido para el head",rows:"3"},null,544),[[d2,t.parametersPageConfiguration.global.headSlot]])])),t.parametersPageConfiguration.global.renderAsBodyPart?ln("",!0):(ve(),we("div",XU,[e[43]||(e[43]=V("label",{for:"bodyBeginSlot",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Código al principio de la sección <body> ",-1)),So(V("textarea",{id:"bodyBeginSlot","onUpdate:modelValue":e[23]||(e[23]=i=>t.parametersPageConfiguration.global.bodyBeginSlot=i),onInput:e[24]||(e[24]=i=>t.$emit("update:parametersPageConfiguration.global.bodyBeginSlot",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-3 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:font-mono mecano:transition-colors",placeholder:"Contenido para el inicio del body",rows:"3"},null,544),[[d2,t.parametersPageConfiguration.global.bodyBeginSlot]])])),t.parametersPageConfiguration.global.renderAsBodyPart?ln("",!0):(ve(),we("div",WU,[e[44]||(e[44]=V("label",{for:"footerSlot",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Código al final de la sección <body>, dentro de la etiqueta <footer> ",-1)),So(V("textarea",{id:"footerSlot","onUpdate:modelValue":e[25]||(e[25]=i=>t.parametersPageConfiguration.global.footerSlot=i),onInput:e[26]||(e[26]=i=>t.$emit("update:parametersPageConfiguration.global.footerSlot",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-3 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:font-mono mecano:transition-colors",placeholder:"Contenido para el footer",rows:"3"},null,544),[[d2,t.parametersPageConfiguration.global.footerSlot]])]))])]),t.parametersPageConfiguration.global.renderAsBodyPart?ln("",!0):(ve(),we("div",qU,[V("div",GU,[e[47]||(e[47]=V("h2",{class:"mecano:text-lg mecano:font-bold mecano:text-slate-700"},"Configuración SEO",-1)),V("button",{type:"button",onClick:e[27]||(e[27]=i=>t.validateSeo()),class:"mecano:cursor-pointer mecano:bg-gradient-to-r mecano:from-violet-500 mecano:to-purple-500 mecano:hover:from-violet-600 mecano:hover:to-purple-600 mecano:text-white mecano:border mecano:border-violet-500 mecano:rounded-lg mecano:px-4 mecano:py-1.5 mecano:text-sm mecano:font-medium mecano:transition-all mecano:duration-200 mecano:shadow-sm mecano:hover:shadow-md"},"🦄 Validar SEO")]),V("div",YU,[V("div",KU,[e[49]||(e[49]=V("label",{for:"robotsIndex",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Indexación de robots ",-1)),So(V("select",{id:"robotsIndex","onUpdate:modelValue":e[28]||(e[28]=i=>t.parametersPageConfiguration.seo.robots=i),onChange:e[29]||(e[29]=i=>t.$emit("update:parametersPageConfiguration.seo.robots",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-2.5 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:transition-colors mecano:cursor-pointer"},[...e[48]||(e[48]=[V("option",{value:"index, follow"},"Index Follow",-1),V("option",{value:"noindex, nofollow"},"Noindex Nofollow",-1)])],544),[[G2,t.parametersPageConfiguration.seo.robots]])]),V("div",JU,[e[50]||(e[50]=V("label",{for:"pageTitle",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Título de la página ",-1)),So(V("input",{id:"pageTitle",type:"text","onUpdate:modelValue":e[30]||(e[30]=i=>t.parametersPageConfiguration.seo.title=i),onInput:e[31]||(e[31]=i=>t.$emit("update:parametersPageConfiguration.seo.title",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-2.5 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:transition-colors",placeholder:"Ingresa el título de la página"},null,544),[[d2,t.parametersPageConfiguration.seo.title]])]),V("div",eX,[e[51]||(e[51]=V("label",{for:"pageDescription",class:"mecano:block mecano:text-sm mecano:font-medium mecano:text-slate-600 mecano:mb-2"}," Descripción de la página ",-1)),So(V("textarea",{id:"pageDescription","onUpdate:modelValue":e[32]||(e[32]=i=>t.parametersPageConfiguration.seo.description=i),onInput:e[33]||(e[33]=i=>t.$emit("update:parametersPageConfiguration.seo.description",i.target.value)),class:"mecano:w-full mecano:px-4 mecano:py-3 mecano:border mecano:border-slate-200 mecano:rounded-lg mecano:focus:outline-none mecano:focus:ring-2 mecano:focus:ring-emerald-500/20 mecano:focus:border-emerald-400 mecano:bg-white mecano:text-sm mecano:transition-colors",placeholder:"Ingresa la descripción de la página",rows:"3"},null,544),[[d2,t.parametersPageConfiguration.seo.description]])])])]))])])):ln("",!0)],512)}const nX=B3(pU,[["render",tX]]);var NT={};(function(){try{if(typeof document<"u"){var t=document.createElement("style");t.appendChild(document.createTextNode(':root{--le-toolbar-bg: #f8f9fb;--le-toolbar-border: #e4e7ec;--le-toolbar-btn-color: #64748b;--le-toolbar-btn-hover-bg: rgba(0, 0, 0, .06);--le-toolbar-btn-hover-color: #334155;--le-toolbar-btn-active-bg: rgba(74, 108, 247, .12);--le-toolbar-btn-active-color: #4a6cf7;--le-toolbar-separator: #e2e8f0;--le-editor-bg: #ffffff;--le-editor-text-color: #1e293b;--le-editor-border: #e2e8f0;--le-editor-border-focus: #4a6cf7;--le-editor-border-radius: 10px;--le-editor-font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--le-editor-font-size: 15px;--le-editor-line-height: 1.7;--le-editor-padding: 20px 24px;--le-editor-min-height: 200px;--le-editor-placeholder-color: #94a3b8;--le-accent: #4a6cf7;--le-accent-hover: #3b5de7;--le-accent-light: rgba(74, 108, 247, .1);--le-dropdown-bg: #ffffff;--le-dropdown-shadow: 0 8px 32px rgba(0, 0, 0, .1), 0 2px 8px rgba(0, 0, 0, .05);--le-dropdown-border: #f1f5f9;--le-statusbar-color: #94a3b8;--le-statusbar-bg: #f8fafc}[data-ledithor]{width:100%}.le-editor-container{display:flex;flex-direction:column;width:100%;border:1.5px solid var(--le-editor-border);border-radius:var(--le-editor-border-radius);background:var(--le-editor-bg);position:relative;box-shadow:0 1px 4px #0000000a;transition:border-color .2s ease,box-shadow .2s ease}.le-editor-container:focus-within{border-color:var(--le-editor-border-focus);box-shadow:0 0 0 3px var(--le-accent-light)}.le-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 10px;background:var(--le-toolbar-bg);border-bottom:1px solid var(--le-toolbar-border);border-radius:var(--le-editor-border-radius) var(--le-editor-border-radius) 0 0;-webkit-user-select:none;user-select:none;overflow:visible}.le-toolbar-group{display:flex;align-items:center;gap:1px}.le-toolbar-separator{width:1px;height:18px;background:var(--le-toolbar-separator);margin:0 5px;flex-shrink:0}.le-toolbar button{position:relative;display:inline-flex;align-items:center;justify-content:center;width:34px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:var(--le-toolbar-btn-color);cursor:pointer;font-size:14px;transition:background .15s ease,color .15s ease}.le-toolbar button:hover{background:var(--le-toolbar-btn-hover-bg);color:var(--le-toolbar-btn-hover-color, var(--le-toolbar-btn-color))}.le-toolbar button:active{opacity:.8}.le-toolbar button.is-active{background:var(--le-toolbar-btn-active-bg);color:var(--le-toolbar-btn-active-color)}.le-toolbar button[disabled]{opacity:.3;cursor:not-allowed}.le-toolbar button svg{width:24px;height:20px;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:round;stroke-linejoin:round}.le-toolbar button svg.lf-svg-icon{stroke-width:0}.le-toolbar button:after{content:attr(title);position:absolute;bottom:calc(100% + 8px);left:50%;margin-left:-9999px;transform:translate(-50%);padding:4px 9px;background:#1e293b;color:#f1f5f9;font-size:11px;font-weight:500;border-radius:5px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease;z-index:1000;letter-spacing:.01em;box-shadow:0 2px 8px #00000026;backface-visibility:hidden;-webkit-font-smoothing:subpixel-antialiased}.le-toolbar button:before{content:"";position:absolute;bottom:calc(100% + 4px);left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#1e293b;pointer-events:none;opacity:0;transition:opacity .15s ease;z-index:1000}.le-toolbar button:hover:after,.le-toolbar button:hover:before{opacity:1}.le-toolbar button:hover:after{margin-left:0;transform:translate(-50%)}.le-editor-content{flex:1;overflow-y:auto;position:relative}.le-editor-content .tiptap{padding:var(--le-editor-padding);min-height:var(--le-editor-min-height);font-family:var(--le-editor-font-family);font-size:var(--le-editor-font-size);line-height:var(--le-editor-line-height);color:var(--le-editor-text-color);outline:none;caret-color:var(--le-accent)}.le-editor-content .tiptap p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--le-editor-placeholder-color);pointer-events:none;height:0;font-style:italic}.le-editor-content .tiptap h1{font-size:1.9em;margin:.8em 0 .4em;font-weight:700;letter-spacing:-.02em;color:var(--le-editor-text-color);line-height:1.25}.le-editor-content .tiptap h2{font-size:1.5em;margin:.75em 0 .4em;font-weight:600;letter-spacing:-.01em;color:var(--le-editor-text-color);line-height:1.3}.le-editor-content .tiptap h3{font-size:1.2em;margin:.65em 0 .3em;font-weight:600;color:var(--le-editor-text-color);line-height:1.35}.le-editor-content .tiptap h4{font-size:1.05em;margin:.5em 0 .3em;font-weight:600;color:var(--le-editor-text-color)}.le-editor-content .tiptap p{margin:0 0 .6em}.le-editor-content .tiptap p:last-child{margin-bottom:0}.le-editor-content .tiptap ul,.le-editor-content .tiptap ol{padding-left:1.6em;margin:.5em 0 .7em;list-style-type:revert}.le-editor-content .tiptap li{margin:.2em 0}.le-editor-content .tiptap li::marker{color:var(--le-accent)}.le-editor-content .tiptap blockquote{border-left:3px solid var(--le-accent);padding:.7em 1.2em;margin:1em 0;background:var(--le-accent-light);border-radius:0 6px 6px 0;color:var(--le-editor-text-color);font-style:italic;opacity:.85}.le-editor-content .tiptap code{background:#0000000d;padding:2px 7px;border-radius:4px;font-size:.875em;font-family:JetBrains Mono,Fira Code,Consolas,monospace;color:var(--le-accent)}.le-editor-content .tiptap pre{background:#0f172a;color:#e2e8f0;padding:16px 20px;border-radius:8px;overflow-x:auto;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:13px;line-height:1.7;margin:.8em 0}.le-editor-content .tiptap pre code{background:none;padding:0;color:inherit;font-size:inherit}.le-editor-content .tiptap hr{border:none;height:2px;background:var(--le-toolbar-border);margin:1.5em 0;border-radius:2px}.le-editor-content .tiptap img{max-width:100%;height:auto;border-radius:6px;box-shadow:0 2px 10px #00000014}.le-editor-content .tiptap table{border-collapse:collapse;width:100%;margin:1em 0;border-radius:6px;overflow:hidden;border:1px solid var(--le-toolbar-border);font-size:.95em}.le-editor-content .tiptap th,.le-editor-content .tiptap td{border:1px solid var(--le-toolbar-border);padding:9px 13px;text-align:left}.le-editor-content .tiptap th{background:var(--le-toolbar-bg);font-weight:600;color:var(--le-editor-text-color);font-size:.875em;text-transform:uppercase;letter-spacing:.04em}.le-editor-content .tiptap tr:hover td{background:var(--le-accent-light)}.le-editor-content .tiptap a{color:var(--le-accent);text-decoration:none;border-bottom:1px solid var(--le-accent-light);transition:border-color .15s}.le-editor-content .tiptap a:hover{border-bottom-color:var(--le-accent)}.le-editor-content .tiptap mark{background:#fef08a;padding:1px 3px;border-radius:3px;box-decoration-break:clone;-webkit-box-decoration-break:clone}.le-editor-content .tiptap ::selection{background:var(--le-accent-light)}.le-link-popup{position:absolute;z-index:100;background:var(--le-dropdown-bg);border:1px solid var(--le-dropdown-border);border-radius:10px;box-shadow:var(--le-dropdown-shadow);padding:8px;display:flex;gap:6px;animation:le-popup-in .18s ease}@keyframes le-popup-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.le-link-popup input{border:1.5px solid var(--le-editor-border);border-radius:7px;padding:8px 12px;font-size:13px;width:250px;outline:none;font-family:inherit;background:var(--le-editor-bg);color:var(--le-editor-text-color);transition:border-color .15s,box-shadow .15s}.le-link-popup input:focus{border-color:var(--le-accent);box-shadow:0 0 0 3px var(--le-accent-light)}.le-link-popup button{padding:8px 14px;border:none;border-radius:7px;background:var(--le-accent);color:#fff;cursor:pointer;font-size:13px;font-weight:600;transition:background .15s,opacity .15s;white-space:nowrap}.le-link-popup button:hover{background:var(--le-accent-hover, var(--le-accent));opacity:.9}.le-link-popup button:active{opacity:.75}.le-heading-dropdown{position:absolute;z-index:100;background:var(--le-dropdown-bg);border:1px solid var(--le-dropdown-border);border-radius:10px;box-shadow:var(--le-dropdown-shadow);padding:4px;min-width:150px;animation:le-popup-in .18s ease}.le-heading-dropdown button{display:block;width:100%;text-align:left;padding:7px 12px;border:none;background:none;cursor:pointer;border-radius:6px;font-size:13px;color:var(--le-toolbar-btn-color);transition:background .12s,color .12s}.le-heading-dropdown button:hover{background:var(--le-toolbar-btn-hover-bg);color:var(--le-accent)}.le-dropdown-scroll{max-height:280px;overflow-y:auto}.le-color-popup{position:absolute;z-index:100;top:100%;left:0;background:var(--le-dropdown-bg);border:1px solid var(--le-dropdown-border);border-radius:var(--le-dropdown-radius);box-shadow:var(--le-dropdown-shadow);padding:8px;animation:le-popup-in .18s ease}.le-color-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:4px}.le-color-swatch{width:24px;height:24px;border:2px solid transparent;border-radius:4px;cursor:pointer;padding:0;transition:border-color .12s,transform .12s}.le-color-swatch:hover{border-color:var(--le-accent);transform:scale(1.15)}.le-color-unset{display:flex;align-items:center;justify-content:center;gap:4px;width:100%;margin-top:4px;padding:5px 0;border:1px solid var(--le-editor-border, #e2e8f0);border-radius:4px;background:var(--le-dropdown-bg, #fff);color:var(--le-toolbar-btn-color);font-size:11px;font-family:var(--le-editor-font-family, system-ui, sans-serif);cursor:pointer;text-align:center;transition:background .12s,border-color .12s,color .12s}.le-color-unset:hover{border-color:var(--le-accent);color:var(--le-accent);background:var(--le-accent-light, rgba(74, 108, 247, .06))}.le-color-unset svg{width:12px;height:12px;stroke:currentColor;stroke-width:2;fill:none}.le-statusbar{display:flex;align-items:center;padding:5px 16px;font-size:11px;font-weight:500;letter-spacing:.02em;color:var(--le-statusbar-color, #94a3b8)!important;background:var(--le-statusbar-bg, #f8fafc)!important;border-top:1px solid var(--le-toolbar-border);border-radius:0 0 var(--le-editor-border-radius) var(--le-editor-border-radius)}.le-statusbar-left,.le-statusbar-right{flex:1}.le-statusbar-right{text-align:right}.le-statusbar-center{display:flex;align-items:center;gap:5px;opacity:.7}.le-statusbar-center svg{width:16px;height:16px}.le-statusbar-center span{font-size:13px;font-weight:600;letter-spacing:.04em}.le-toolbar-wrapper{display:flex;align-items:flex-start;background:var(--le-toolbar-bg);border-bottom:1px solid var(--le-toolbar-border)}.le-toolbar-wrapper .le-toolbar{flex:1;border-bottom:none}.le-btn-fullscreen{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;margin:6px 8px 0 0;padding:0;border:none;border-radius:4px;background:transparent;color:var(--le-toolbar-btn-color);cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.le-btn-fullscreen svg{width:24px;height:24px}.le-btn-fullscreen:hover{background:var(--le-toolbar-btn-hover-bg, rgba(0, 0, 0, .06));color:var(--le-accent, #4a6cf7)}.le-fullscreen-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--le-fullscreen-z, 2147483647);background:#00000080;display:flex;align-items:center;justify-content:center;padding:24px}.le-editor-container.le-fullscreen{width:100%;height:100%;max-width:100%;max-height:100%;border-radius:10px;box-shadow:0 20px 60px #0000004d;display:flex;flex-direction:column;overflow:hidden}.le-fullscreen .le-toolbar-wrapper{flex-shrink:0}.le-fullscreen .le-editor-content{flex:1 1 0;min-height:0;max-height:none!important;overflow:hidden;display:flex;flex-direction:column}.le-fullscreen .le-editor-content .tiptap{flex:1 1 0;min-height:0!important;max-height:none!important;overflow-y:auto}.le-fullscreen .le-html-source{flex:1 1 0;min-height:0;overflow:hidden}.le-fullscreen .le-html-source .cm-editor{height:100%}.le-fullscreen .le-html-source .cm-scroller{flex:1;max-height:none!important}.le-fullscreen .le-statusbar{flex-shrink:0;border-bottom-left-radius:10px;border-bottom-right-radius:10px;border-top:1px solid var(--le-toolbar-border);padding:8px 20px}.le-btn-heading{font-weight:700!important;background:var(--le-editor-border, #e2e8f0)!important;border-radius:4px!important;margin:0 1px;min-width:28px}.le-btn-heading:hover,.le-btn-heading.is-active{background:var(--le-accent, #4a6cf7)!important;color:#fff!important}.le-html-editor{display:block;box-sizing:border-box}.le-toolbar button[data-btn=html].is-active{background:#0f172a;color:#22d3ee}.le-editor-container .le-html-source{display:block;width:100%;margin:0;border:none;border-top:2px solid #1e293b;box-sizing:border-box;overflow:hidden}.le-html-source .cm-scroller::-webkit-scrollbar{width:5px}.le-html-source .cm-scroller::-webkit-scrollbar-track{background:transparent}.le-html-source .cm-scroller::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:3px}.le-html-notice{padding:8px 16px;background:#1e293b;color:#fbbf24;font-size:12px;font-family:var(--le-font-text, system-ui, sans-serif);border-bottom:1px solid #334155;text-align:center;animation:le-notice-fade 4s ease-in-out forwards}@keyframes le-notice-fade{0%,70%{opacity:1}to{opacity:0}}.le-btn-html.is-active{background:#0f172a!important;color:#22d3ee!important}.le-ai-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#ffffffd1;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);border-radius:var(--le-editor-border-radius)}.le-ai-overlay-bar{width:180px;height:3px;background:#e2e8f0;border-radius:99px;overflow:hidden}.le-ai-overlay-bar:after{content:"";display:block;height:100%;width:40%;background:linear-gradient(90deg,#6366f1,#8b5cf6);border-radius:99px;animation:le-ai-progress 1.2s ease-in-out infinite}@keyframes le-ai-progress{0%{transform:translate(-100%)}to{transform:translate(350%)}}.le-ai-overlay-text{font-size:12px;font-weight:500;color:#6366f1;letter-spacing:.02em}.le-btn-ai{background:linear-gradient(135deg,#6366f1,#8b5cf6)!important;color:#fff!important;border-radius:6px!important;padding:0 10px!important;gap:5px;font-size:12px;font-weight:600;box-shadow:0 0 0 0 transparent!important}.le-btn-ai:hover:not(:disabled){background:linear-gradient(135deg,#4f46e5,#7c3aed)!important;box-shadow:0 0 5px #7c3aed!important}.le-btn-ai:disabled,.le-btn-ai.le-btn-ai--empty{background:#c4b5fd!important;cursor:not-allowed}.le-btn-ai.le-btn-ai--cooldown{background:#7c3aed!important;cursor:not-allowed;font-size:11px;font-weight:700;gap:4px;min-width:52px;justify-content:center}.le-btn-ai:disabled:after,.le-btn-ai.le-btn-ai--empty:after,.le-btn-ai.le-btn-ai--cooldown:after,.le-btn-ai:disabled:before,.le-btn-ai.le-btn-ai--empty:before,.le-btn-ai.le-btn-ai--cooldown:before{display:none}.le-btn-ai svg{vertical-align:middle}@keyframes le-spin{to{transform:rotate(360deg)}}.le-spin{animation:le-spin .8s linear infinite}.le-prompt-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--le-fullscreen-z, 2147483647);background:#0006;display:flex;align-items:center;justify-content:center;animation:le-popup-in .18s ease}.le-prompt-dialog{background:var(--le-dropdown-bg, #fff);border-radius:12px;padding:24px;min-width:340px;max-width:480px;box-shadow:0 20px 60px #0003}.le-prompt-label{display:block;font-size:14px;font-weight:600;color:var(--le-editor-text-color, #1e293b);margin-bottom:10px;font-family:var(--le-editor-font-family, system-ui, sans-serif)}.le-prompt-input{width:100%;padding:10px 14px;border:1.5px solid var(--le-editor-border, #e2e8f0);border-radius:8px;font-size:14px;font-family:inherit;color:var(--le-editor-text-color, #1e293b);background:var(--le-editor-bg, #fff);outline:none;transition:border-color .15s,box-shadow .15s;box-sizing:border-box}.le-prompt-input:focus{border-color:var(--le-accent, #4a6cf7);box-shadow:0 0 0 3px var(--le-accent-light, rgba(74, 108, 247, .1))}.le-prompt-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.le-prompt-btn{padding:8px 18px;border:none;border-radius:7px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .15s,opacity .15s}.le-prompt-btn-cancel{background:var(--le-toolbar-btn-hover-bg, rgba(0, 0, 0, .06));color:var(--le-toolbar-btn-color, #64748b)}.le-prompt-btn-cancel:hover{opacity:.8}.le-prompt-btn-confirm{background:var(--le-accent, #4a6cf7);color:#fff}.le-prompt-btn-confirm:hover{background:var(--le-accent-hover, #3b5de7)}.le-editor-content::-webkit-scrollbar{width:5px}.le-editor-content::-webkit-scrollbar-track{background:transparent}.le-editor-content::-webkit-scrollbar-thumb{background:#0000001f;border-radius:3px}.le-editor-content::-webkit-scrollbar-thumb:hover{background:#00000038}.le-html-source::-webkit-scrollbar{width:5px}.le-html-source::-webkit-scrollbar-track{background:transparent}.le-html-source::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:3px}.le-editor-content .tiptap div[data-type=styled-box]{display:block;margin:.7em 0}.le-theme-laboral{--le-accent: #10b981;--le-accent-hover: #059669;--le-accent-light: rgba(16, 185, 129, .12);--le-toolbar-bg: #f0fdf4;--le-toolbar-btn-hover-bg: rgba(16, 185, 129, .08);--le-toolbar-btn-active-bg: rgba(16, 185, 129, .14);--le-toolbar-btn-active-color: #065f46;--le-editor-border-focus: #10b981}.le-theme-fiscal{--le-accent: #f59e0b;--le-accent-hover: #d97706;--le-accent-light: rgba(245, 158, 11, .12);--le-toolbar-bg: #fffbeb;--le-toolbar-btn-hover-bg: rgba(245, 158, 11, .08);--le-toolbar-btn-active-bg: rgba(245, 158, 11, .15);--le-toolbar-btn-active-color: #92400e;--le-editor-border-focus: #f59e0b}.le-theme-civil{--le-accent: #3b82f6;--le-accent-hover: #2563eb;--le-accent-light: rgba(59, 130, 246, .12);--le-toolbar-bg: #eff6ff;--le-toolbar-btn-hover-bg: rgba(59, 130, 246, .08);--le-toolbar-btn-active-bg: rgba(59, 130, 246, .14);--le-toolbar-btn-active-color: #1e40af;--le-editor-border-focus: #3b82f6}.le-theme-penal{--le-accent: #ef4444;--le-accent-hover: #dc2626;--le-accent-light: rgba(239, 68, 68, .12);--le-toolbar-bg: #fef2f2;--le-toolbar-btn-hover-bg: rgba(239, 68, 68, .08);--le-toolbar-btn-active-bg: rgba(239, 68, 68, .14);--le-toolbar-btn-active-color: #991b1b;--le-editor-border-focus: #ef4444}.le-theme-social{--le-accent: #8b5cf6;--le-accent-hover: #7c3aed;--le-accent-light: rgba(139, 92, 246, .12);--le-toolbar-bg: #f5f3ff;--le-toolbar-btn-hover-bg: rgba(139, 92, 246, .08);--le-toolbar-btn-active-bg: rgba(139, 92, 246, .14);--le-toolbar-btn-active-color: #5b21b6;--le-editor-border-focus: #8b5cf6}.le-theme-mercantil{--le-accent: #14b8a6;--le-accent-hover: #0d9488;--le-accent-light: rgba(20, 184, 166, .12);--le-toolbar-bg: #f0fdfa;--le-toolbar-btn-hover-bg: rgba(20, 184, 166, .08);--le-toolbar-btn-active-bg: rgba(20, 184, 166, .14);--le-toolbar-btn-active-color: #115e59;--le-editor-border-focus: #14b8a6}.le-theme-dark{--le-toolbar-bg: #1e1e2e;--le-toolbar-border: #313244;--le-toolbar-btn-color: #a6adc8;--le-toolbar-btn-hover-bg: rgba(255, 255, 255, .07);--le-toolbar-btn-hover-color: #cdd6f4;--le-toolbar-btn-active-bg: rgba(137, 180, 250, .18);--le-toolbar-btn-active-color: #89b4fa;--le-toolbar-separator: #45475a;--le-editor-bg: #181825;--le-editor-text-color: #cdd6f4;--le-editor-border: #313244;--le-editor-border-focus: #89b4fa;--le-editor-placeholder-color: #6c7086;--le-accent: #89b4fa;--le-accent-hover: #74a8f8;--le-accent-light: rgba(137, 180, 250, .15);--le-dropdown-bg: #1e1e2e;--le-dropdown-border: #313244;--le-dropdown-shadow: 0 8px 32px rgba(0, 0, 0, .5);--le-statusbar-bg: #181825;--le-statusbar-color: #6c7086}.le-theme-compact{--le-editor-padding: 10px 14px;--le-editor-font-size: 13px;--le-editor-min-height: 120px;--le-editor-line-height: 1.5}.le-theme-dark.le-theme-laboral{--le-accent: #34d399;--le-accent-hover: #10b981;--le-accent-light: rgba(52, 211, 153, .15);--le-editor-border-focus: #34d399;--le-toolbar-btn-active-bg: rgba(52, 211, 153, .18);--le-toolbar-btn-active-color: #34d399}.le-theme-dark.le-theme-fiscal{--le-accent: #fbbf24;--le-accent-hover: #f59e0b;--le-accent-light: rgba(251, 191, 36, .15);--le-editor-border-focus: #fbbf24;--le-toolbar-btn-active-bg: rgba(251, 191, 36, .18);--le-toolbar-btn-active-color: #fbbf24}.le-theme-dark.le-theme-civil{--le-accent: #60a5fa;--le-accent-hover: #3b82f6;--le-accent-light: rgba(96, 165, 250, .15);--le-editor-border-focus: #60a5fa;--le-toolbar-btn-active-bg: rgba(96, 165, 250, .18);--le-toolbar-btn-active-color: #60a5fa}.le-theme-dark.le-theme-penal{--le-accent: #f87171;--le-accent-hover: #ef4444;--le-accent-light: rgba(248, 113, 113, .15);--le-editor-border-focus: #f87171;--le-toolbar-btn-active-bg: rgba(248, 113, 113, .18);--le-toolbar-btn-active-color: #f87171}.le-theme-dark.le-theme-social{--le-accent: #a78bfa;--le-accent-hover: #8b5cf6;--le-accent-light: rgba(167, 139, 250, .15);--le-editor-border-focus: #a78bfa;--le-toolbar-btn-active-bg: rgba(167, 139, 250, .18);--le-toolbar-btn-active-color: #a78bfa}')),document.head.appendChild(t)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();function Ta(t){this.content=t}Ta.prototype={constructor:Ta,find:function(t){for(var e=0;e<this.content.length;e+=2)if(this.content[e]===t)return e;return-1},get:function(t){var e=this.find(t);return e==-1?void 0:this.content[e+1]},update:function(t,e,n){var o=n&&n!=t?this.remove(n):this,r=o.find(t),a=o.content.slice();return r==-1?a.push(n||t,e):(a[r+1]=e,n&&(a[r]=n)),new Ta(a)},remove:function(t){var e=this.find(t);if(e==-1)return this;var n=this.content.slice();return n.splice(e,2),new Ta(n)},addToStart:function(t,e){return new Ta([t,e].concat(this.remove(t).content))},addToEnd:function(t,e){var n=this.remove(t).content.slice();return n.push(t,e),new Ta(n)},addBefore:function(t,e,n){var o=this.remove(e),r=o.content.slice(),a=o.find(t);return r.splice(a==-1?r.length:a,0,e,n),new Ta(r)},forEach:function(t){for(var e=0;e<this.content.length;e+=2)t(this.content[e],this.content[e+1])},prepend:function(t){return t=Ta.from(t),t.size?new Ta(t.content.concat(this.subtract(t).content)):this},append:function(t){return t=Ta.from(t),t.size?new Ta(this.subtract(t).content.concat(t.content)):this},subtract:function(t){var e=this;t=Ta.from(t);for(var n=0;n<t.content.length;n+=2)e=e.remove(t.content[n]);return e},toObject:function(){var t={};return this.forEach(function(e,n){t[e]=n}),t},get size(){return this.content.length>>1}},Ta.from=function(t){if(t instanceof Ta)return t;var e=[];if(t)for(var n in t)e.push(n,t[n]);return new Ta(e)};function _T(t,e,n){for(let o=0;;o++){if(o==t.childCount||o==e.childCount)return t.childCount==e.childCount?null:n;let r=t.child(o),a=e.child(o);if(r==a){n+=r.nodeSize;continue}if(!r.sameMarkup(a))return n;if(r.isText&&r.text!=a.text){for(let i=0;r.text[i]==a.text[i];i++)n++;return n}if(r.content.size||a.content.size){let i=_T(r.content,a.content,n+1);if(i!=null)return i}n+=r.nodeSize}}function jT(t,e,n,o){for(let r=t.childCount,a=e.childCount;;){if(r==0||a==0)return r==a?null:{a:n,b:o};let i=t.child(--r),l=e.child(--a),s=i.nodeSize;if(i==l){n-=s,o-=s;continue}if(!i.sameMarkup(l))return{a:n,b:o};if(i.isText&&i.text!=l.text){let u=0,p=Math.min(i.text.length,l.text.length);for(;u<p&&i.text[i.text.length-u-1]==l.text[l.text.length-u-1];)u++,n--,o--;return{a:n,b:o}}if(i.content.size||l.content.size){let u=jT(i.content,l.content,n-1,o-1);if(u)return u}n-=s,o-=s}}class rt{constructor(e,n){if(this.content=e,this.size=n||0,n==null)for(let o=0;o<e.length;o++)this.size+=e[o].nodeSize}nodesBetween(e,n,o,r=0,a){for(let i=0,l=0;l<n;i++){let s=this.content[i],u=l+s.nodeSize;if(u>e&&o(s,r+l,a||null,i)!==!1&&s.content.size){let p=l+1;s.nodesBetween(Math.max(0,e-p),Math.min(s.content.size,n-p),o,r+p)}l=u}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,n,o,r){let a="",i=!0;return this.nodesBetween(e,n,(l,s)=>{let u=l.isText?l.text.slice(Math.max(e,s)-s,n-s):l.isLeaf?r?typeof r=="function"?r(l):r:l.type.spec.leafText?l.type.spec.leafText(l):"":"";l.isBlock&&(l.isLeaf&&u||l.isTextblock)&&o&&(i?i=!1:a+=o),a+=u},0),a}append(e){if(!e.size)return this;if(!this.size)return e;let n=this.lastChild,o=e.firstChild,r=this.content.slice(),a=0;for(n.isText&&n.sameMarkup(o)&&(r[r.length-1]=n.withText(n.text+o.text),a=1);a<e.content.length;a++)r.push(e.content[a]);return new rt(r,this.size+e.size)}cut(e,n=this.size){if(e==0&&n==this.size)return this;let o=[],r=0;if(n>e)for(let a=0,i=0;i<n;a++){let l=this.content[a],s=i+l.nodeSize;s>e&&((i<e||s>n)&&(l.isText?l=l.cut(Math.max(0,e-i),Math.min(l.text.length,n-i)):l=l.cut(Math.max(0,e-i-1),Math.min(l.content.size,n-i-1))),o.push(l),r+=l.nodeSize),i=s}return new rt(o,r)}cutByIndex(e,n){return e==n?rt.empty:e==0&&n==this.content.length?this:new rt(this.content.slice(e,n))}replaceChild(e,n){let o=this.content[e];if(o==n)return this;let r=this.content.slice(),a=this.size+n.nodeSize-o.nodeSize;return r[e]=n,new rt(r,a)}addToStart(e){return new rt([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new rt(this.content.concat(e),this.size+e.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let n=0;n<this.content.length;n++)if(!this.content[n].eq(e.content[n]))return!1;return!0}get firstChild(){return this.content.length?this.content[0]:null}get lastChild(){return this.content.length?this.content[this.content.length-1]:null}get childCount(){return this.content.length}child(e){let n=this.content[e];if(!n)throw new RangeError("Index "+e+" out of range for "+this);return n}maybeChild(e){return this.content[e]||null}forEach(e){for(let n=0,o=0;n<this.content.length;n++){let r=this.content[n];e(r,o,n),o+=r.nodeSize}}findDiffStart(e,n=0){return _T(this,e,n)}findDiffEnd(e,n=this.size,o=e.size){return jT(this,e,n,o)}findIndex(e){if(e==0)return F3(0,e);if(e==this.size)return F3(this.content.length,e);if(e>this.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let n=0,o=0;;n++){let r=this.child(n),a=o+r.nodeSize;if(a>=e)return a==e?F3(n+1,a):F3(n,o);o=a}}toString(){return"<"+this.toStringInner()+">"}toStringInner(){return this.content.join(", ")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,n){if(!n)return rt.empty;if(!Array.isArray(n))throw new RangeError("Invalid input for Fragment.fromJSON");return new rt(n.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return rt.empty;let n,o=0;for(let r=0;r<e.length;r++){let a=e[r];o+=a.nodeSize,r&&a.isText&&e[r-1].sameMarkup(a)?(n||(n=e.slice(0,r)),n[n.length-1]=a.withText(n[n.length-1].text+a.text)):n&&n.push(a)}return new rt(n||e,o)}static from(e){if(!e)return rt.empty;if(e instanceof rt)return e;if(Array.isArray(e))return this.fromArray(e);if(e.attrs)return new rt([e],e.nodeSize);throw new RangeError("Can not convert "+e+" to a Fragment"+(e.nodesBetween?" (looks like multiple versions of prosemirror-model were loaded)":""))}}rt.empty=new rt([],0);const eb={index:0,offset:0};function F3(t,e){return eb.index=t,eb.offset=e,eb}function H3(t,e){if(t===e)return!0;if(!(t&&typeof t=="object")||!(e&&typeof e=="object"))return!1;let n=Array.isArray(t);if(Array.isArray(e)!=n)return!1;if(n){if(t.length!=e.length)return!1;for(let o=0;o<t.length;o++)if(!H3(t[o],e[o]))return!1}else{for(let o in t)if(!(o in e)||!H3(t[o],e[o]))return!1;for(let o in e)if(!(o in t))return!1}return!0}let Ho=class $O{constructor(e,n){this.type=e,this.attrs=n}addToSet(e){let n,o=!1;for(let r=0;r<e.length;r++){let a=e[r];if(this.eq(a))return e;if(this.type.excludes(a.type))n||(n=e.slice(0,r));else{if(a.type.excludes(this.type))return e;!o&&a.type.rank>this.type.rank&&(n||(n=e.slice(0,r)),n.push(this),o=!0),n&&n.push(a)}}return n||(n=e.slice()),o||n.push(this),n}removeFromSet(e){for(let n=0;n<e.length;n++)if(this.eq(e[n]))return e.slice(0,n).concat(e.slice(n+1));return e}isInSet(e){for(let n=0;n<e.length;n++)if(this.eq(e[n]))return!0;return!1}eq(e){return this==e||this.type==e.type&&H3(this.attrs,e.attrs)}toJSON(){let e={type:this.type.name};for(let n in this.attrs){e.attrs=this.attrs;break}return e}static fromJSON(e,n){if(!n)throw new RangeError("Invalid input for Mark.fromJSON");let o=e.marks[n.type];if(!o)throw new RangeError(`There is no mark type ${n.type} in this schema`);let r=o.create(n.attrs);return o.checkAttrs(r.attrs),r}static sameSet(e,n){if(e==n)return!0;if(e.length!=n.length)return!1;for(let o=0;o<e.length;o++)if(!e[o].eq(n[o]))return!1;return!0}static setFrom(e){if(!e||Array.isArray(e)&&e.length==0)return $O.none;if(e instanceof $O)return[e];let n=e.slice();return n.sort((o,r)=>o.type.rank-r.type.rank),n}};Ho.none=[];class U3 extends Error{}class Bt{constructor(e,n,o){this.content=e,this.openStart=n,this.openEnd=o}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,n){let o=RT(this.content,e+this.openStart,n);return o&&new Bt(o,this.openStart,this.openEnd)}removeBetween(e,n){return new Bt(IT(this.content,e+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+"("+this.openStart+","+this.openEnd+")"}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(e,n){if(!n)return Bt.empty;let o=n.openStart||0,r=n.openEnd||0;if(typeof o!="number"||typeof r!="number")throw new RangeError("Invalid input for Slice.fromJSON");return new Bt(rt.fromJSON(e,n.content),o,r)}static maxOpen(e,n=!0){let o=0,r=0;for(let a=e.firstChild;a&&!a.isLeaf&&(n||!a.type.spec.isolating);a=a.firstChild)o++;for(let a=e.lastChild;a&&!a.isLeaf&&(n||!a.type.spec.isolating);a=a.lastChild)r++;return new Bt(e,o,r)}}Bt.empty=new Bt(rt.empty,0,0);function IT(t,e,n){let{index:o,offset:r}=t.findIndex(e),a=t.maybeChild(o),{index:i,offset:l}=t.findIndex(n);if(r==e||a.isText){if(l!=n&&!t.child(i).isText)throw new RangeError("Removing non-flat range");return t.cut(0,e).append(t.cut(n))}if(o!=i)throw new RangeError("Removing non-flat range");return t.replaceChild(o,a.copy(IT(a.content,e-r-1,n-r-1)))}function RT(t,e,n,o){let{index:r,offset:a}=t.findIndex(e),i=t.maybeChild(r);if(a==e||i.isText)return o&&!o.canReplace(r,r,n)?null:t.cut(0,e).append(n).append(t.cut(e));let l=RT(i.content,e-a-1,n,i);return l&&t.replaceChild(r,i.copy(l))}function oX(t,e,n){if(n.openStart>t.depth)throw new U3("Inserted content deeper than insertion position");if(t.depth-n.openStart!=e.depth-n.openEnd)throw new U3("Inconsistent open depths");return QT(t,e,n,0)}function QT(t,e,n,o){let r=t.index(o),a=t.node(o);if(r==e.index(o)&&o<t.depth-n.openStart){let i=QT(t,e,n,o+1);return a.copy(a.content.replaceChild(r,i))}else if(n.content.size)if(!n.openStart&&!n.openEnd&&t.depth==o&&e.depth==o){let i=t.parent,l=i.content;return c1(i,l.cut(0,t.parentOffset).append(n.content).append(l.cut(e.parentOffset)))}else{let{start:i,end:l}=rX(n,t);return c1(a,zT(t,i,l,e,o))}else return c1(a,X3(t,e,o))}function DT(t,e){if(!e.type.compatibleContent(t.type))throw new U3("Cannot join "+e.type.name+" onto "+t.type.name)}function tb(t,e,n){let o=t.node(n);return DT(o,e.node(n)),o}function s1(t,e){let n=e.length-1;n>=0&&t.isText&&t.sameMarkup(e[n])?e[n]=t.withText(e[n].text+t.text):e.push(t)}function sm(t,e,n,o){let r=(e||t).node(n),a=0,i=e?e.index(n):r.childCount;t&&(a=t.index(n),t.depth>n?a++:t.textOffset&&(s1(t.nodeAfter,o),a++));for(let l=a;l<i;l++)s1(r.child(l),o);e&&e.depth==n&&e.textOffset&&s1(e.nodeBefore,o)}function c1(t,e){return t.type.checkContent(e),t.copy(e)}function zT(t,e,n,o,r){let a=t.depth>r&&tb(t,e,r+1),i=o.depth>r&&tb(n,o,r+1),l=[];return sm(null,t,r,l),a&&i&&e.index(r)==n.index(r)?(DT(a,i),s1(c1(a,zT(t,e,n,o,r+1)),l)):(a&&s1(c1(a,X3(t,e,r+1)),l),sm(e,n,r,l),i&&s1(c1(i,X3(n,o,r+1)),l)),sm(o,null,r,l),new rt(l)}function X3(t,e,n){let o=[];if(sm(null,t,n,o),t.depth>n){let r=tb(t,e,n+1);s1(c1(r,X3(t,e,n+1)),o)}return sm(e,null,n,o),new rt(o)}function rX(t,e){let n=e.depth-t.openStart,o=e.node(n).copy(t.content);for(let r=n-1;r>=0;r--)o=e.node(r).copy(rt.from(o));return{start:o.resolveNoCache(t.openStart+n),end:o.resolveNoCache(o.content.size-t.openEnd-n)}}class cm{constructor(e,n,o){this.pos=e,this.path=n,this.parentOffset=o,this.depth=n.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position before the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position after the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,n=this.index(this.depth);if(n==e.childCount)return null;let o=this.pos-this.path[this.path.length-1],r=e.child(n);return o?e.child(n).cut(o):r}get nodeBefore(){let e=this.index(this.depth),n=this.pos-this.path[this.path.length-1];return n?this.parent.child(e).cut(0,n):e==0?null:this.parent.child(e-1)}posAtIndex(e,n){n=this.resolveDepth(n);let o=this.path[n*3],r=n==0?0:this.path[n*3-1]+1;for(let a=0;a<e;a++)r+=o.child(a).nodeSize;return r}marks(){let e=this.parent,n=this.index();if(e.content.size==0)return Ho.none;if(this.textOffset)return e.child(n).marks;let o=e.maybeChild(n-1),r=e.maybeChild(n);if(!o){let l=o;o=r,r=l}let a=o.marks;for(var i=0;i<a.length;i++)a[i].type.spec.inclusive===!1&&(!r||!a[i].isInSet(r.marks))&&(a=a[i--].removeFromSet(a));return a}marksAcross(e){let n=this.parent.maybeChild(this.index());if(!n||!n.isInline)return null;let o=n.marks,r=e.parent.maybeChild(e.index());for(var a=0;a<o.length;a++)o[a].type.spec.inclusive===!1&&(!r||!o[a].isInSet(r.marks))&&(o=o[a--].removeFromSet(o));return o}sharedDepth(e){for(let n=this.depth;n>0;n--)if(this.start(n)<=e&&this.end(n)>=e)return n;return 0}blockRange(e=this,n){if(e.pos<this.pos)return e.blockRange(this);for(let o=this.depth-(this.parent.inlineContent||this.pos==e.pos?1:0);o>=0;o--)if(e.pos<=this.end(o)&&(!n||n(this.node(o))))return new W3(this,e,o);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos<this.pos?e:this}toString(){let e="";for(let n=1;n<=this.depth;n++)e+=(e?"/":"")+this.node(n).type.name+"_"+this.index(n-1);return e+":"+this.parentOffset}static resolve(e,n){if(!(n>=0&&n<=e.content.size))throw new RangeError("Position "+n+" out of range");let o=[],r=0,a=n;for(let i=e;;){let{index:l,offset:s}=i.content.findIndex(a),u=a-s;if(o.push(i,l,r+s),!u||(i=i.child(l),i.isText))break;a=u-1,r+=s+1}return new cm(n,o,a)}static resolveCached(e,n){let o=VT.get(e);if(o)for(let a=0;a<o.elts.length;a++){let i=o.elts[a];if(i.pos==n)return i}else VT.set(e,o=new aX);let r=o.elts[o.i]=cm.resolve(e,n);return o.i=(o.i+1)%iX,r}}class aX{constructor(){this.elts=[],this.i=0}}const iX=12,VT=new WeakMap;class W3{constructor(e,n,o){this.$from=e,this.$to=n,this.depth=o}get start(){return this.$from.before(this.depth+1)}get end(){return this.$to.after(this.depth+1)}get parent(){return this.$from.node(this.depth)}get startIndex(){return this.$from.index(this.depth)}get endIndex(){return this.$to.indexAfter(this.depth)}}const lX=Object.create(null);let $0=class LO{constructor(e,n,o,r=Ho.none){this.type=e,this.attrs=n,this.marks=r,this.content=o||rt.empty}get children(){return this.content.content}get nodeSize(){return this.isLeaf?1:2+this.content.size}get childCount(){return this.content.childCount}child(e){return this.content.child(e)}maybeChild(e){return this.content.maybeChild(e)}forEach(e){this.content.forEach(e)}nodesBetween(e,n,o,r=0){this.content.nodesBetween(e,n,o,r,this)}descendants(e){this.nodesBetween(0,this.content.size,e)}get textContent(){return this.isLeaf&&this.type.spec.leafText?this.type.spec.leafText(this):this.textBetween(0,this.content.size,"")}textBetween(e,n,o,r){return this.content.textBetween(e,n,o,r)}get firstChild(){return this.content.firstChild}get lastChild(){return this.content.lastChild}eq(e){return this==e||this.sameMarkup(e)&&this.content.eq(e.content)}sameMarkup(e){return this.hasMarkup(e.type,e.attrs,e.marks)}hasMarkup(e,n,o){return this.type==e&&H3(this.attrs,n||e.defaultAttrs||lX)&&Ho.sameSet(this.marks,o||Ho.none)}copy(e=null){return e==this.content?this:new LO(this.type,this.attrs,e,this.marks)}mark(e){return e==this.marks?this:new LO(this.type,this.attrs,this.content,e)}cut(e,n=this.content.size){return e==0&&n==this.content.size?this:this.copy(this.content.cut(e,n))}slice(e,n=this.content.size,o=!1){if(e==n)return Bt.empty;let r=this.resolve(e),a=this.resolve(n),i=o?0:r.sharedDepth(n),l=r.start(i),s=r.node(i).content.cut(r.pos-l,a.pos-l);return new Bt(s,r.depth-i,a.depth-i)}replace(e,n,o){return oX(this.resolve(e),this.resolve(n),o)}nodeAt(e){for(let n=this;;){let{index:o,offset:r}=n.content.findIndex(e);if(n=n.maybeChild(o),!n)return null;if(r==e||n.isText)return n;e-=r+1}}childAfter(e){let{index:n,offset:o}=this.content.findIndex(e);return{node:this.content.maybeChild(n),index:n,offset:o}}childBefore(e){if(e==0)return{node:null,index:0,offset:0};let{index:n,offset:o}=this.content.findIndex(e);if(o<e)return{node:this.content.child(n),index:n,offset:o};let r=this.content.child(n-1);return{node:r,index:n-1,offset:o-r.nodeSize}}resolve(e){return cm.resolveCached(this,e)}resolveNoCache(e){return cm.resolve(this,e)}rangeHasMark(e,n,o){let r=!1;return n>e&&this.nodesBetween(e,n,a=>(o.isInSet(a.marks)&&(r=!0),!r)),r}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+="("+this.content.toStringInner()+")"),ZT(this.marks,e)}contentMatchAt(e){let n=this.type.contentMatch.matchFragment(this.content,0,e);if(!n)throw new Error("Called contentMatchAt on a node with invalid content");return n}canReplace(e,n,o=rt.empty,r=0,a=o.childCount){let i=this.contentMatchAt(e).matchFragment(o,r,a),l=i&&i.matchFragment(this.content,n);if(!l||!l.validEnd)return!1;for(let s=r;s<a;s++)if(!this.type.allowsMarks(o.child(s).marks))return!1;return!0}canReplaceWith(e,n,o,r){if(r&&!this.type.allowsMarks(r))return!1;let a=this.contentMatchAt(e).matchType(o),i=a&&a.matchFragment(this.content,n);return i?i.validEnd:!1}canAppend(e){return e.content.size?this.canReplace(this.childCount,this.childCount,e.content):this.type.compatibleContent(e.type)}check(){this.type.checkContent(this.content),this.type.checkAttrs(this.attrs);let e=Ho.none;for(let n=0;n<this.marks.length;n++){let o=this.marks[n];o.type.checkAttrs(o.attrs),e=o.addToSet(e)}if(!Ho.sameSet(e,this.marks))throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(n=>n.type.name)}`);this.content.forEach(n=>n.check())}toJSON(){let e={type:this.type.name};for(let n in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(n=>n.toJSON())),e}static fromJSON(e,n){if(!n)throw new RangeError("Invalid input for Node.fromJSON");let o;if(n.marks){if(!Array.isArray(n.marks))throw new RangeError("Invalid mark data for Node.fromJSON");o=n.marks.map(e.markFromJSON)}if(n.type=="text"){if(typeof n.text!="string")throw new RangeError("Invalid text node in JSON");return e.text(n.text,o)}let r=rt.fromJSON(e,n.content),a=e.nodeType(n.type).create(n.attrs,r,o);return a.type.checkAttrs(a.attrs),a}};$0.prototype.text=void 0;let sX=class AO extends $0{constructor(e,n,o,r){if(super(e,n,null,r),!o)throw new RangeError("Empty text nodes are not allowed");this.text=o}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):ZT(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,n){return this.text.slice(e,n)}get nodeSize(){return this.text.length}mark(e){return e==this.marks?this:new AO(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new AO(this.type,this.attrs,e,this.marks)}cut(e=0,n=this.text.length){return e==0&&n==this.text.length?this:this.withText(this.text.slice(e,n))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function ZT(t,e){for(let n=t.length-1;n>=0;n--)e=t[n].type.name+"("+e+")";return e}class d1{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,n){let o=new cX(e,n);if(o.next==null)return d1.empty;let r=BT(o);o.next&&o.err("Unexpected trailing text");let a=bX(fX(r));return gX(a,o),a}matchType(e){for(let n=0;n<this.next.length;n++)if(this.next[n].type==e)return this.next[n].next;return null}matchFragment(e,n=0,o=e.childCount){let r=this;for(let a=n;r&&a<o;a++)r=r.matchType(e.child(a).type);return r}get inlineContent(){return this.next.length!=0&&this.next[0].type.isInline}get defaultType(){for(let e=0;e<this.next.length;e++){let{type:n}=this.next[e];if(!(n.isText||n.hasRequiredAttrs()))return n}return null}compatible(e){for(let n=0;n<this.next.length;n++)for(let o=0;o<e.next.length;o++)if(this.next[n].type==e.next[o].type)return!0;return!1}fillBefore(e,n=!1,o=0){let r=[this];function a(i,l){let s=i.matchFragment(e,o);if(s&&(!n||s.validEnd))return rt.from(l.map(u=>u.createAndFill()));for(let u=0;u<i.next.length;u++){let{type:p,next:m}=i.next[u];if(!(p.isText||p.hasRequiredAttrs())&&r.indexOf(m)==-1){r.push(m);let b=a(m,l.concat(p));if(b)return b}}return null}return a(this,[])}findWrapping(e){for(let o=0;o<this.wrapCache.length;o+=2)if(this.wrapCache[o]==e)return this.wrapCache[o+1];let n=this.computeWrapping(e);return this.wrapCache.push(e,n),n}computeWrapping(e){let n=Object.create(null),o=[{match:this,type:null,via:null}];for(;o.length;){let r=o.shift(),a=r.match;if(a.matchType(e)){let i=[];for(let l=r;l.type;l=l.via)i.push(l.type);return i.reverse()}for(let i=0;i<a.next.length;i++){let{type:l,next:s}=a.next[i];!l.isLeaf&&!l.hasRequiredAttrs()&&!(l.name in n)&&(!r.type||s.validEnd)&&(o.push({match:l.contentMatch,type:l,via:r}),n[l.name]=!0)}}return null}get edgeCount(){return this.next.length}edge(e){if(e>=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function n(o){e.push(o);for(let r=0;r<o.next.length;r++)e.indexOf(o.next[r].next)==-1&&n(o.next[r].next)}return n(this),e.map((o,r)=>{let a=r+(o.validEnd?"*":" ")+" ";for(let i=0;i<o.next.length;i++)a+=(i?", ":"")+o.next[i].type.name+"->"+e.indexOf(o.next[i].next);return a}).join(`
|
|
41
41
|
`)}}d1.empty=new d1(!0);class cX{constructor(e,n){this.string=e,this.nodeTypes=n,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),this.tokens[this.tokens.length-1]==""&&this.tokens.pop(),this.tokens[0]==""&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw new SyntaxError(e+" (in content expression '"+this.string+"')")}}function BT(t){let e=[];do e.push(dX(t));while(t.eat("|"));return e.length==1?e[0]:{type:"choice",exprs:e}}function dX(t){let e=[];do e.push(uX(t));while(t.next&&t.next!=")"&&t.next!="|");return e.length==1?e[0]:{type:"seq",exprs:e}}function uX(t){let e=hX(t);for(;;)if(t.eat("+"))e={type:"plus",expr:e};else if(t.eat("*"))e={type:"star",expr:e};else if(t.eat("?"))e={type:"opt",expr:e};else if(t.eat("{"))e=pX(t,e);else break;return e}function FT(t){/\D/.test(t.next)&&t.err("Expected number, got '"+t.next+"'");let e=Number(t.next);return t.pos++,e}function pX(t,e){let n=FT(t),o=n;return t.eat(",")&&(t.next!="}"?o=FT(t):o=-1),t.eat("}")||t.err("Unclosed braced range"),{type:"range",min:n,max:o,expr:e}}function mX(t,e){let n=t.nodeTypes,o=n[e];if(o)return[o];let r=[];for(let a in n){let i=n[a];i.isInGroup(e)&&r.push(i)}return r.length==0&&t.err("No node type or group '"+e+"' found"),r}function hX(t){if(t.eat("(")){let e=BT(t);return t.eat(")")||t.err("Missing closing paren"),e}else if(/\W/.test(t.next))t.err("Unexpected token '"+t.next+"'");else{let e=mX(t,t.next).map(n=>(t.inline==null?t.inline=n.isInline:t.inline!=n.isInline&&t.err("Mixing inline and block content"),{type:"name",value:n}));return t.pos++,e.length==1?e[0]:{type:"choice",exprs:e}}}function fX(t){let e=[[]];return r(a(t,0),n()),e;function n(){return e.push([])-1}function o(i,l,s){let u={term:s,to:l};return e[i].push(u),u}function r(i,l){i.forEach(s=>s.to=l)}function a(i,l){if(i.type=="choice")return i.exprs.reduce((s,u)=>s.concat(a(u,l)),[]);if(i.type=="seq")for(let s=0;;s++){let u=a(i.exprs[s],l);if(s==i.exprs.length-1)return u;r(u,l=n())}else if(i.type=="star"){let s=n();return o(l,s),r(a(i.expr,s),s),[o(s)]}else if(i.type=="plus"){let s=n();return r(a(i.expr,l),s),r(a(i.expr,s),s),[o(s)]}else{if(i.type=="opt")return[o(l)].concat(a(i.expr,l));if(i.type=="range"){let s=l;for(let u=0;u<i.min;u++){let p=n();r(a(i.expr,s),p),s=p}if(i.max==-1)r(a(i.expr,s),s);else for(let u=i.min;u<i.max;u++){let p=n();o(s,p),r(a(i.expr,s),p),s=p}return[o(s)]}else{if(i.type=="name")return[o(l,void 0,i.value)];throw new Error("Unknown expr type")}}}}function HT(t,e){return e-t}function UT(t,e){let n=[];return o(e),n.sort(HT);function o(r){let a=t[r];if(a.length==1&&!a[0].term)return o(a[0].to);n.push(r);for(let i=0;i<a.length;i++){let{term:l,to:s}=a[i];!l&&n.indexOf(s)==-1&&o(s)}}}function bX(t){let e=Object.create(null);return n(UT(t,0));function n(o){let r=[];o.forEach(i=>{t[i].forEach(({term:l,to:s})=>{if(!l)return;let u;for(let p=0;p<r.length;p++)r[p][0]==l&&(u=r[p][1]);UT(t,s).forEach(p=>{u||r.push([l,u=[]]),u.indexOf(p)==-1&&u.push(p)})})});let a=e[o.join(",")]=new d1(o.indexOf(t.length-1)>-1);for(let i=0;i<r.length;i++){let l=r[i][1].sort(HT);a.next.push({type:r[i][0],next:e[l.join(",")]||n(l)})}return a}}function gX(t,e){for(let n=0,o=[t];n<o.length;n++){let r=o[n],a=!r.validEnd,i=[];for(let l=0;l<r.next.length;l++){let{type:s,next:u}=r.next[l];i.push(s.name),a&&!(s.isText||s.hasRequiredAttrs())&&(a=!1),o.indexOf(u)==-1&&o.push(u)}a&&e.err("Only non-generatable nodes ("+i.join(", ")+") in a required position (see https://prosemirror.net/docs/guide/#generatable)")}}function XT(t){let e=Object.create(null);for(let n in t){let o=t[n];if(!o.hasDefault)return null;e[n]=o.default}return e}function WT(t,e){let n=Object.create(null);for(let o in t){let r=e&&e[o];if(r===void 0){let a=t[o];if(a.hasDefault)r=a.default;else throw new RangeError("No value supplied for attribute "+o)}n[o]=r}return n}function qT(t,e,n,o){for(let r in e)if(!(r in t))throw new RangeError(`Unsupported attribute ${r} for ${n} of type ${r}`);for(let r in t){let a=t[r];a.validate&&a.validate(e[r])}}function GT(t,e){let n=Object.create(null);if(e)for(let o in e)n[o]=new yX(t,o,e[o]);return n}let YT=class JV{constructor(e,n,o){this.name=e,this.schema=n,this.spec=o,this.markSet=null,this.groups=o.group?o.group.split(" "):[],this.attrs=GT(e,o.attrs),this.defaultAttrs=XT(this.attrs),this.contentMatch=null,this.inlineContent=null,this.isBlock=!(o.inline||e=="text"),this.isText=e=="text"}get isInline(){return!this.isBlock}get isTextblock(){return this.isBlock&&this.inlineContent}get isLeaf(){return this.contentMatch==d1.empty}get isAtom(){return this.isLeaf||!!this.spec.atom}isInGroup(e){return this.groups.indexOf(e)>-1}get whitespace(){return this.spec.whitespace||(this.spec.code?"pre":"normal")}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:WT(this.attrs,e)}create(e=null,n,o){if(this.isText)throw new Error("NodeType.create can't construct text nodes");return new $0(this,this.computeAttrs(e),rt.from(n),Ho.setFrom(o))}createChecked(e=null,n,o){return n=rt.from(n),this.checkContent(n),new $0(this,this.computeAttrs(e),n,Ho.setFrom(o))}createAndFill(e=null,n,o){if(e=this.computeAttrs(e),n=rt.from(n),n.size){let i=this.contentMatch.fillBefore(n);if(!i)return null;n=i.append(n)}let r=this.contentMatch.matchFragment(n),a=r&&r.fillBefore(rt.empty,!0);return a?new $0(this,e,n.append(a),Ho.setFrom(o)):null}validContent(e){let n=this.contentMatch.matchFragment(e);if(!n||!n.validEnd)return!1;for(let o=0;o<e.childCount;o++)if(!this.allowsMarks(e.child(o).marks))return!1;return!0}checkContent(e){if(!this.validContent(e))throw new RangeError(`Invalid content for node ${this.name}: ${e.toString().slice(0,50)}`)}checkAttrs(e){qT(this.attrs,e,"node",this.name)}allowsMarkType(e){return this.markSet==null||this.markSet.indexOf(e)>-1}allowsMarks(e){if(this.markSet==null)return!0;for(let n=0;n<e.length;n++)if(!this.allowsMarkType(e[n].type))return!1;return!0}allowedMarks(e){if(this.markSet==null)return e;let n;for(let o=0;o<e.length;o++)this.allowsMarkType(e[o].type)?n&&n.push(e[o]):n||(n=e.slice(0,o));return n?n.length?n:Ho.none:e}static compile(e,n){let o=Object.create(null);e.forEach((a,i)=>o[a]=new JV(a,n,i));let r=n.spec.topNode||"doc";if(!o[r])throw new RangeError("Schema is missing its top node type ('"+r+"')");if(!o.text)throw new RangeError("Every schema needs a 'text' type");for(let a in o.text.attrs)throw new RangeError("The text node type should not have attributes");return o}};function vX(t,e,n){let o=n.split("|");return r=>{let a=r===null?"null":typeof r;if(o.indexOf(a)<0)throw new RangeError(`Expected value of type ${o} for attribute ${e} on type ${t}, got ${a}`)}}let yX=class{constructor(t,e,n){this.hasDefault=Object.prototype.hasOwnProperty.call(n,"default"),this.default=n.default,this.validate=typeof n.validate=="string"?vX(t,e,n.validate):n.validate}get isRequired(){return!this.hasDefault}};class q3{constructor(e,n,o,r){this.name=e,this.rank=n,this.schema=o,this.spec=r,this.attrs=GT(e,r.attrs),this.excluded=null;let a=XT(this.attrs);this.instance=a?new Ho(this,a):null}create(e=null){return!e&&this.instance?this.instance:new Ho(this,WT(this.attrs,e))}static compile(e,n){let o=Object.create(null),r=0;return e.forEach((a,i)=>o[a]=new q3(a,r++,n,i)),o}removeFromSet(e){for(var n=0;n<e.length;n++)e[n].type==this&&(e=e.slice(0,n).concat(e.slice(n+1)),n--);return e}isInSet(e){for(let n=0;n<e.length;n++)if(e[n].type==this)return e[n]}checkAttrs(e){qT(this.attrs,e,"mark",this.name)}excludes(e){return this.excluded.indexOf(e)>-1}}let KT=class{constructor(t){this.linebreakReplacement=null,this.cached=Object.create(null);let e=this.spec={};for(let o in t)e[o]=t[o];e.nodes=Ta.from(t.nodes),e.marks=Ta.from(t.marks||{}),this.nodes=YT.compile(this.spec.nodes,this),this.marks=q3.compile(this.spec.marks,this);let n=Object.create(null);for(let o in this.nodes){if(o in this.marks)throw new RangeError(o+" can not be both a node and a mark");let r=this.nodes[o],a=r.spec.content||"",i=r.spec.marks;if(r.contentMatch=n[a]||(n[a]=d1.parse(a,this.nodes)),r.inlineContent=r.contentMatch.inlineContent,r.spec.linebreakReplacement){if(this.linebreakReplacement)throw new RangeError("Multiple linebreak nodes defined");if(!r.isInline||!r.isLeaf)throw new RangeError("Linebreak replacement nodes must be inline leaf nodes");this.linebreakReplacement=r}r.markSet=i=="_"?null:i?JT(this,i.split(" ")):i==""||!r.inlineContent?[]:null}for(let o in this.marks){let r=this.marks[o],a=r.spec.excludes;r.excluded=a==null?[r]:a==""?[]:JT(this,a.split(" "))}this.nodeFromJSON=o=>$0.fromJSON(this,o),this.markFromJSON=o=>Ho.fromJSON(this,o),this.topNodeType=this.nodes[this.spec.topNode||"doc"],this.cached.wrappings=Object.create(null)}node(t,e=null,n,o){if(typeof t=="string")t=this.nodeType(t);else if(t instanceof YT){if(t.schema!=this)throw new RangeError("Node type from different schema used ("+t.name+")")}else throw new RangeError("Invalid node type: "+t);return t.createChecked(e,n,o)}text(t,e){let n=this.nodes.text;return new sX(n,n.defaultAttrs,t,Ho.setFrom(e))}mark(t,e){return typeof t=="string"&&(t=this.marks[t]),t.create(e)}nodeType(t){let e=this.nodes[t];if(!e)throw new RangeError("Unknown node type: "+t);return e}};function JT(t,e){let n=[];for(let o=0;o<e.length;o++){let r=e[o],a=t.marks[r],i=a;if(a)n.push(a);else for(let l in t.marks){let s=t.marks[l];(r=="_"||s.spec.group&&s.spec.group.split(" ").indexOf(r)>-1)&&n.push(i=s)}if(!i)throw new SyntaxError("Unknown mark type: '"+e[o]+"'")}return n}function CX(t){return t.tag!=null}function xX(t){return t.style!=null}class Os{constructor(e,n){this.schema=e,this.rules=n,this.tags=[],this.styles=[];let o=this.matchedStyles=[];n.forEach(r=>{if(CX(r))this.tags.push(r);else if(xX(r)){let a=/[^=]*/.exec(r.style)[0];o.indexOf(a)<0&&o.push(a),this.styles.push(r)}}),this.normalizeLists=!this.tags.some(r=>{if(!/^(ul|ol)\b/.test(r.tag)||!r.node)return!1;let a=e.nodes[r.node];return a.contentMatch.matchType(a)})}parse(e,n={}){let o=new oE(this,n,!1);return o.addAll(e,Ho.none,n.from,n.to),o.finish()}parseSlice(e,n={}){let o=new oE(this,n,!0);return o.addAll(e,Ho.none,n.from,n.to),Bt.maxOpen(o.finish())}matchTag(e,n,o){for(let r=o?this.tags.indexOf(o)+1:0;r<this.tags.length;r++){let a=this.tags[r];if(SX(e,a.tag)&&(a.namespace===void 0||e.namespaceURI==a.namespace)&&(!a.context||n.matchesContext(a.context))){if(a.getAttrs){let i=a.getAttrs(e);if(i===!1)continue;a.attrs=i||void 0}return a}}}matchStyle(e,n,o,r){for(let a=r?this.styles.indexOf(r)+1:0;a<this.styles.length;a++){let i=this.styles[a],l=i.style;if(!(l.indexOf(e)!=0||i.context&&!o.matchesContext(i.context)||l.length>e.length&&(l.charCodeAt(e.length)!=61||l.slice(e.length+1)!=n))){if(i.getAttrs){let s=i.getAttrs(n);if(s===!1)continue;i.attrs=s||void 0}return i}}}static schemaRules(e){let n=[];function o(r){let a=r.priority==null?50:r.priority,i=0;for(;i<n.length;i++){let l=n[i];if((l.priority==null?50:l.priority)<a)break}n.splice(i,0,r)}for(let r in e.marks){let a=e.marks[r].spec.parseDOM;a&&a.forEach(i=>{o(i=rE(i)),i.mark||i.ignore||i.clearMark||(i.mark=r)})}for(let r in e.nodes){let a=e.nodes[r].spec.parseDOM;a&&a.forEach(i=>{o(i=rE(i)),i.node||i.ignore||i.mark||(i.node=r)})}return n}static fromSchema(e){return e.cached.domParser||(e.cached.domParser=new Os(e,Os.schemaRules(e)))}}const eE={address:!0,article:!0,aside:!0,blockquote:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},wX={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},tE={ol:!0,ul:!0},dm=1,nb=2,um=4;function nE(t,e,n){return e!=null?(e?dm:0)|(e==="full"?nb:0):t&&t.whitespace=="pre"?dm|nb:n&~um}class G3{constructor(e,n,o,r,a,i){this.type=e,this.attrs=n,this.marks=o,this.solid=r,this.options=i,this.content=[],this.activeMarks=Ho.none,this.match=a||(i&um?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let n=this.type.contentMatch.fillBefore(rt.from(e));if(n)this.match=this.type.contentMatch.matchFragment(n);else{let o=this.type.contentMatch,r;return(r=o.findWrapping(e.type))?(this.match=o,r):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&dm)){let o=this.content[this.content.length-1],r;if(o&&o.isText&&(r=/[ \t\r\n\u000c]+$/.exec(o.text))){let a=o;o.text.length==r[0].length?this.content.pop():this.content[this.content.length-1]=a.withText(a.text.slice(0,a.text.length-r[0].length))}}let n=rt.from(this.content);return!e&&this.match&&(n=n.append(this.match.fillBefore(rt.empty,!0))),this.type?this.type.create(this.attrs,n,this.marks):n}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!eE.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}}let oE=class{constructor(t,e,n){this.parser=t,this.options=e,this.isOpen=n,this.open=0,this.localPreserveWS=!1;let o=e.topNode,r,a=nE(null,e.preserveWhitespace,0)|(n?um:0);o?r=new G3(o.type,o.attrs,Ho.none,!0,e.topMatch||o.type.contentMatch,a):n?r=new G3(null,null,Ho.none,!0,null,a):r=new G3(t.schema.topNodeType,null,Ho.none,!0,null,a),this.nodes=[r],this.find=e.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(t,e){t.nodeType==3?this.addTextNode(t,e):t.nodeType==1&&this.addElement(t,e)}addTextNode(t,e){let n=t.nodeValue,o=this.top,r=o.options&nb?"full":this.localPreserveWS||(o.options&dm)>0,{schema:a}=this.parser;if(r==="full"||o.inlineContext(t)||/[^ \t\r\n\u000c]/.test(n)){if(r)if(r==="full")n=n.replace(/\r\n?/g,`
|
|
42
42
|
`);else if(a.linebreakReplacement&&/[\r\n]/.test(n)&&this.top.findWrapping(a.linebreakReplacement.create())){let i=n.split(/\r?\n|\r/);for(let l=0;l<i.length;l++)l&&this.insertNode(a.linebreakReplacement.create(),e,!0),i[l]&&this.insertNode(a.text(i[l]),e,!/\S/.test(i[l]));n=""}else n=n.replace(/\r?\n|\r/g," ");else if(n=n.replace(/[ \t\r\n\u000c]+/g," "),/^[ \t\r\n\u000c]/.test(n)&&this.open==this.nodes.length-1){let i=o.content[o.content.length-1],l=t.previousSibling;(!i||l&&l.nodeName=="BR"||i.isText&&/[ \t\r\n\u000c]$/.test(i.text))&&(n=n.slice(1))}n&&this.insertNode(a.text(n),e,!/\S/.test(n)),this.findInText(t)}else this.findInside(t)}addElement(t,e,n){let o=this.localPreserveWS,r=this.top;(t.tagName=="PRE"||/pre/.test(t.style&&t.style.whiteSpace))&&(this.localPreserveWS=!0);let a=t.nodeName.toLowerCase(),i;tE.hasOwnProperty(a)&&this.parser.normalizeLists&&OX(t);let l=this.options.ruleFromNode&&this.options.ruleFromNode(t)||(i=this.parser.matchTag(t,this,n));e:if(l?l.ignore:wX.hasOwnProperty(a))this.findInside(t),this.ignoreFallback(t,e);else if(!l||l.skip||l.closeParent){l&&l.closeParent?this.open=Math.max(0,this.open-1):l&&l.skip.nodeType&&(t=l.skip);let s,u=this.needsBlock;if(eE.hasOwnProperty(a))r.content.length&&r.content[0].isInline&&this.open&&(this.open--,r=this.top),s=!0,r.type||(this.needsBlock=!0);else if(!t.firstChild){this.leafFallback(t,e);break e}let p=l&&l.skip?e:this.readStyles(t,e);p&&this.addAll(t,p),s&&this.sync(r),this.needsBlock=u}else{let s=this.readStyles(t,e);s&&this.addElementByRule(t,l,s,l.consuming===!1?i:void 0)}this.localPreserveWS=o}leafFallback(t,e){t.nodeName=="BR"&&this.top.type&&this.top.type.inlineContent&&this.addTextNode(t.ownerDocument.createTextNode(`
|
|
43
43
|
`),e)}ignoreFallback(t,e){t.nodeName=="BR"&&(!this.top.type||!this.top.type.inlineContent)&&this.findPlace(this.parser.schema.text("-"),e,!0)}readStyles(t,e){let n=t.style;if(n&&n.length)for(let o=0;o<this.parser.matchedStyles.length;o++){let r=this.parser.matchedStyles[o],a=n.getPropertyValue(r);if(a)for(let i=void 0;;){let l=this.parser.matchStyle(r,a,this,i);if(!l)break;if(l.ignore)return null;if(l.clearMark?e=e.filter(s=>!l.clearMark(s)):e=e.concat(this.parser.schema.marks[l.mark].create(l.attrs)),l.consuming===!1)i=l;else break}}return e}addElementByRule(t,e,n,o){let r,a;if(e.node)if(a=this.parser.schema.nodes[e.node],a.isLeaf)this.insertNode(a.create(e.attrs),n,t.nodeName=="BR")||this.leafFallback(t,n);else{let l=this.enter(a,e.attrs||null,n,e.preserveWhitespace);l&&(r=!0,n=l)}else{let l=this.parser.schema.marks[e.mark];n=n.concat(l.create(e.attrs))}let i=this.top;if(a&&a.isLeaf)this.findInside(t);else if(o)this.addElement(t,n,o);else if(e.getContent)this.findInside(t),e.getContent(t,this.parser.schema).forEach(l=>this.insertNode(l,n,!1));else{let l=t;typeof e.contentElement=="string"?l=t.querySelector(e.contentElement):typeof e.contentElement=="function"?l=e.contentElement(t):e.contentElement&&(l=e.contentElement),this.findAround(t,l,!0),this.addAll(l,n),this.findAround(t,l,!1)}r&&this.sync(i)&&this.open--}addAll(t,e,n,o){let r=n||0;for(let a=n?t.childNodes[n]:t.firstChild,i=o==null?null:t.childNodes[o];a!=i;a=a.nextSibling,++r)this.findAtPoint(t,r),this.addDOM(a,e);this.findAtPoint(t,r)}findPlace(t,e,n){let o,r;for(let a=this.open,i=0;a>=0;a--){let l=this.nodes[a],s=l.findWrapping(t);if(s&&(!o||o.length>s.length+i)&&(o=s,r=l,!s.length))break;if(l.solid){if(n)break;i+=2}}if(!o)return null;this.sync(r);for(let a=0;a<o.length;a++)e=this.enterInner(o[a],null,e,!1);return e}insertNode(t,e,n){if(t.isInline&&this.needsBlock&&!this.top.type){let r=this.textblockFromContext();r&&(e=this.enterInner(r,null,e))}let o=this.findPlace(t,e,n);if(o){this.closeExtra();let r=this.top;r.match&&(r.match=r.match.matchType(t.type));let a=Ho.none;for(let i of o.concat(t.marks))(r.type?r.type.allowsMarkType(i.type):aE(i.type,t.type))&&(a=i.addToSet(a));return r.content.push(t.mark(a)),!0}return!1}enter(t,e,n,o){let r=this.findPlace(t.create(e),n,!1);return r&&(r=this.enterInner(t,e,n,!0,o)),r}enterInner(t,e,n,o=!1,r){this.closeExtra();let a=this.top;a.match=a.match&&a.match.matchType(t);let i=nE(t,r,a.options);a.options&um&&a.content.length==0&&(i|=um);let l=Ho.none;return n=n.filter(s=>(a.type?a.type.allowsMarkType(s.type):aE(s.type,t))?(l=s.addToSet(l),!1):!0),this.nodes.push(new G3(t,e,l,o,null,i)),this.open++,n}closeExtra(t=!1){let e=this.nodes.length-1;if(e>this.open){for(;e>this.open;e--)this.nodes[e-1].content.push(this.nodes[e].finish(t));this.nodes.length=this.open+1}}finish(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(!!(this.isOpen||this.options.topOpen))}sync(t){for(let e=this.open;e>=0;e--){if(this.nodes[e]==t)return this.open=e,!0;this.localPreserveWS&&(this.nodes[e].options|=dm)}return!1}get currentPos(){this.closeExtra();let t=0;for(let e=this.open;e>=0;e--){let n=this.nodes[e].content;for(let o=n.length-1;o>=0;o--)t+=n[o].nodeSize;e&&t++}return t}findAtPoint(t,e){if(this.find)for(let n=0;n<this.find.length;n++)this.find[n].node==t&&this.find[n].offset==e&&(this.find[n].pos=this.currentPos)}findInside(t){if(this.find)for(let e=0;e<this.find.length;e++)this.find[e].pos==null&&t.nodeType==1&&t.contains(this.find[e].node)&&(this.find[e].pos=this.currentPos)}findAround(t,e,n){if(t!=e&&this.find)for(let o=0;o<this.find.length;o++)this.find[o].pos==null&&t.nodeType==1&&t.contains(this.find[o].node)&&e.compareDocumentPosition(this.find[o].node)&(n?2:4)&&(this.find[o].pos=this.currentPos)}findInText(t){if(this.find)for(let e=0;e<this.find.length;e++)this.find[e].node==t&&(this.find[e].pos=this.currentPos-(t.nodeValue.length-this.find[e].offset))}matchesContext(t){if(t.indexOf("|")>-1)return t.split(/\s*\|\s*/).some(this.matchesContext,this);let e=t.split("/"),n=this.options.context,o=!this.isOpen&&(!n||n.parent.type==this.nodes[0].type),r=-(n?n.depth+1:0)+(o?0:1),a=(i,l)=>{for(;i>=0;i--){let s=e[i];if(s==""){if(i==e.length-1||i==0)continue;for(;l>=r;l--)if(a(i-1,l))return!0;return!1}else{let u=l>0||l==0&&o?this.nodes[l].type:n&&l>=r?n.node(l-r).type:null;if(!u||u.name!=s&&!u.isInGroup(s))return!1;l--}}return!0};return a(e.length-1,this.open)}textblockFromContext(){let t=this.options.context;if(t)for(let e=t.depth;e>=0;e--){let n=t.node(e).contentMatchAt(t.indexAfter(e)).defaultType;if(n&&n.isTextblock&&n.defaultAttrs)return n}for(let e in this.parser.schema.nodes){let n=this.parser.schema.nodes[e];if(n.isTextblock&&n.defaultAttrs)return n}}};function OX(t){for(let e=t.firstChild,n=null;e;e=e.nextSibling){let o=e.nodeType==1?e.nodeName.toLowerCase():null;o&&tE.hasOwnProperty(o)&&n?(n.appendChild(e),e=n):o=="li"?n=e:o&&(n=null)}}function SX(t,e){return(t.matches||t.msMatchesSelector||t.webkitMatchesSelector||t.mozMatchesSelector).call(t,e)}function rE(t){let e={};for(let n in t)e[n]=t[n];return e}function aE(t,e){let n=e.schema.nodes;for(let o in n){let r=n[o];if(!r.allowsMarkType(t))continue;let a=[],i=l=>{a.push(l);for(let s=0;s<l.edgeCount;s++){let{type:u,next:p}=l.edge(s);if(u==e||a.indexOf(p)<0&&i(p))return!0}};if(i(r.contentMatch))return!0}}class L0{constructor(e,n){this.nodes=e,this.marks=n}serializeFragment(e,n={},o){o||(o=ob(n).createDocumentFragment());let r=o,a=[];return e.forEach(i=>{if(a.length||i.marks.length){let l=0,s=0;for(;l<a.length&&s<i.marks.length;){let u=i.marks[s];if(!this.marks[u.type.name]){s++;continue}if(!u.eq(a[l][0])||u.type.spec.spanning===!1)break;l++,s++}for(;l<a.length;)r=a.pop()[1];for(;s<i.marks.length;){let u=i.marks[s++],p=this.serializeMark(u,i.isInline,n);p&&(a.push([u,r]),r.appendChild(p.dom),r=p.contentDOM||p.dom)}}r.appendChild(this.serializeNodeInner(i,n))}),o}serializeNodeInner(e,n){let{dom:o,contentDOM:r}=Y3(ob(n),this.nodes[e.type.name](e),null,e.attrs);if(r){if(e.isLeaf)throw new RangeError("Content hole not allowed in a leaf node spec");this.serializeFragment(e.content,n,r)}return o}serializeNode(e,n={}){let o=this.serializeNodeInner(e,n);for(let r=e.marks.length-1;r>=0;r--){let a=this.serializeMark(e.marks[r],e.isInline,n);a&&((a.contentDOM||a.dom).appendChild(o),o=a.dom)}return o}serializeMark(e,n,o={}){let r=this.marks[e.type.name];return r&&Y3(ob(o),r(e,n),null,e.attrs)}static renderSpec(e,n,o=null,r){return Y3(e,n,o,r)}static fromSchema(e){return e.cached.domSerializer||(e.cached.domSerializer=new L0(this.nodesFromSchema(e),this.marksFromSchema(e)))}static nodesFromSchema(e){let n=iE(e.nodes);return n.text||(n.text=o=>o.text),n}static marksFromSchema(e){return iE(e.marks)}}function iE(t){let e={};for(let n in t){let o=t[n].spec.toDOM;o&&(e[n]=o)}return e}function ob(t){return t.document||window.document}const lE=new WeakMap;function kX(t){let e=lE.get(t);return e===void 0&&lE.set(t,e=TX(t)),e}function TX(t){let e=null;function n(o){if(o&&typeof o=="object")if(Array.isArray(o))if(typeof o[0]=="string")e||(e=[]),e.push(o);else for(let r=0;r<o.length;r++)n(o[r]);else for(let r in o)n(o[r])}return n(t),e}function Y3(t,e,n,o){if(typeof e=="string")return{dom:t.createTextNode(e)};if(e.nodeType!=null)return{dom:e};if(e.dom&&e.dom.nodeType!=null)return e;let r=e[0],a;if(typeof r!="string")throw new RangeError("Invalid array passed to renderSpec");if(o&&(a=kX(o))&&a.indexOf(e)>-1)throw new RangeError("Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.");let i=r.indexOf(" ");i>0&&(n=r.slice(0,i),r=r.slice(i+1));let l,s=n?t.createElementNS(n,r):t.createElement(r),u=e[1],p=1;if(u&&typeof u=="object"&&u.nodeType==null&&!Array.isArray(u)){p=2;for(let m in u)if(u[m]!=null){let b=m.indexOf(" ");b>0?s.setAttributeNS(m.slice(0,b),m.slice(b+1),u[m]):m=="style"&&s.style?s.style.cssText=u[m]:s.setAttribute(m,u[m])}}for(let m=p;m<e.length;m++){let b=e[m];if(b===0){if(m<e.length-1||m>p)throw new RangeError("Content hole must be the only child of its parent node");return{dom:s,contentDOM:s}}else{let{dom:v,contentDOM:C}=Y3(t,b,n,o);if(s.appendChild(v),C){if(l)throw new RangeError("Multiple content holes");l=C}}}return{dom:s,contentDOM:l}}const sE=65535,cE=Math.pow(2,16);function EX(t,e){return t+e*cE}function dE(t){return t&sE}function MX(t){return(t-(t&sE))/cE}const uE=1,pE=2,K3=4,mE=8;class rb{constructor(e,n,o){this.pos=e,this.delInfo=n,this.recover=o}get deleted(){return(this.delInfo&mE)>0}get deletedBefore(){return(this.delInfo&(uE|K3))>0}get deletedAfter(){return(this.delInfo&(pE|K3))>0}get deletedAcross(){return(this.delInfo&K3)>0}}class Y2{constructor(e,n=!1){if(this.ranges=e,this.inverted=n,!e.length&&Y2.empty)return Y2.empty}recover(e){let n=0,o=dE(e);if(!this.inverted)for(let r=0;r<o;r++)n+=this.ranges[r*3+2]-this.ranges[r*3+1];return this.ranges[o*3]+n+MX(e)}mapResult(e,n=1){return this._map(e,n,!1)}map(e,n=1){return this._map(e,n,!0)}_map(e,n,o){let r=0,a=this.inverted?2:1,i=this.inverted?1:2;for(let l=0;l<this.ranges.length;l+=3){let s=this.ranges[l]-(this.inverted?r:0);if(s>e)break;let u=this.ranges[l+a],p=this.ranges[l+i],m=s+u;if(e<=m){let b=u?e==s?-1:e==m?1:n:n,v=s+r+(b<0?0:p);if(o)return v;let C=e==(n<0?s:m)?null:EX(l/3,e-s),k=e==s?pE:e==m?uE:K3;return(n<0?e!=s:e!=m)&&(k|=mE),new rb(v,k,C)}r+=p-u}return o?e+r:new rb(e+r,0,null)}touches(e,n){let o=0,r=dE(n),a=this.inverted?2:1,i=this.inverted?1:2;for(let l=0;l<this.ranges.length;l+=3){let s=this.ranges[l]-(this.inverted?o:0);if(s>e)break;let u=this.ranges[l+a],p=s+u;if(e<=p&&l==r*3)return!0;o+=this.ranges[l+i]-u}return!1}forEach(e){let n=this.inverted?2:1,o=this.inverted?1:2;for(let r=0,a=0;r<this.ranges.length;r+=3){let i=this.ranges[r],l=i-(this.inverted?a:0),s=i+(this.inverted?0:a),u=this.ranges[r+n],p=this.ranges[r+o];e(l,l+u,s,s+p),a+=p-u}}invert(){return new Y2(this.ranges,!this.inverted)}toString(){return(this.inverted?"-":"")+JSON.stringify(this.ranges)}static offset(e){return e==0?Y2.empty:new Y2(e<0?[0,-e,0]:[0,0,e])}}Y2.empty=new Y2([]);class pm{constructor(e,n,o=0,r=e?e.length:0){this.mirror=n,this.from=o,this.to=r,this._maps=e||[],this.ownData=!(e||n)}get maps(){return this._maps}slice(e=0,n=this.maps.length){return new pm(this._maps,this.mirror,e,n)}appendMap(e,n){this.ownData||(this._maps=this._maps.slice(),this.mirror=this.mirror&&this.mirror.slice(),this.ownData=!0),this.to=this._maps.push(e),n!=null&&this.setMirror(this._maps.length-1,n)}appendMapping(e){for(let n=0,o=this._maps.length;n<e._maps.length;n++){let r=e.getMirror(n);this.appendMap(e._maps[n],r!=null&&r<n?o+r:void 0)}}getMirror(e){if(this.mirror){for(let n=0;n<this.mirror.length;n++)if(this.mirror[n]==e)return this.mirror[n+(n%2?-1:1)]}}setMirror(e,n){this.mirror||(this.mirror=[]),this.mirror.push(e,n)}appendMappingInverted(e){for(let n=e.maps.length-1,o=this._maps.length+e._maps.length;n>=0;n--){let r=e.getMirror(n);this.appendMap(e._maps[n].invert(),r!=null&&r>n?o-r-1:void 0)}}invert(){let e=new pm;return e.appendMappingInverted(this),e}map(e,n=1){if(this.mirror)return this._map(e,n,!0);for(let o=this.from;o<this.to;o++)e=this._maps[o].map(e,n);return e}mapResult(e,n=1){return this._map(e,n,!1)}_map(e,n,o){let r=0;for(let a=this.from;a<this.to;a++){let i=this._maps[a],l=i.mapResult(e,n);if(l.recover!=null){let s=this.getMirror(a);if(s!=null&&s>a&&s<this.to){a=s,e=this._maps[s].recover(l.recover);continue}}r|=l.delInfo,e=l.pos}return o?e:new rb(e,r,null)}}const ab=Object.create(null);class Fa{getMap(){return Y2.empty}merge(e){return null}static fromJSON(e,n){if(!n||!n.stepType)throw new RangeError("Invalid input for Step.fromJSON");let o=ab[n.stepType];if(!o)throw new RangeError(`No step type ${n.stepType} defined`);return o.fromJSON(e,n)}static jsonID(e,n){if(e in ab)throw new RangeError("Duplicate use of step JSON ID "+e);return ab[e]=n,n.prototype.jsonID=e,n}}class Br{constructor(e,n){this.doc=e,this.failed=n}static ok(e){return new Br(e,null)}static fail(e){return new Br(null,e)}static fromReplace(e,n,o,r){try{return Br.ok(e.replace(n,o,r))}catch(a){if(a instanceof U3)return Br.fail(a.message);throw a}}}function ib(t,e,n){let o=[];for(let r=0;r<t.childCount;r++){let a=t.child(r);a.content.size&&(a=a.copy(ib(a.content,e,a))),a.isInline&&(a=e(a,n,r)),o.push(a)}return rt.fromArray(o)}class A0 extends Fa{constructor(e,n,o){super(),this.from=e,this.to=n,this.mark=o}apply(e){let n=e.slice(this.from,this.to),o=e.resolve(this.from),r=o.node(o.sharedDepth(this.to)),a=new Bt(ib(n.content,(i,l)=>!i.isAtom||!l.type.allowsMarkType(this.mark.type)?i:i.mark(this.mark.addToSet(i.marks)),r),n.openStart,n.openEnd);return Br.fromReplace(e,this.from,this.to,a)}invert(){return new Ll(this.from,this.to,this.mark)}map(e){let n=e.mapResult(this.from,1),o=e.mapResult(this.to,-1);return n.deleted&&o.deleted||n.pos>=o.pos?null:new A0(n.pos,o.pos,this.mark)}merge(e){return e instanceof A0&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new A0(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"addMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,n){if(typeof n.from!="number"||typeof n.to!="number")throw new RangeError("Invalid input for AddMarkStep.fromJSON");return new A0(n.from,n.to,e.markFromJSON(n.mark))}}Fa.jsonID("addMark",A0);class Ll extends Fa{constructor(e,n,o){super(),this.from=e,this.to=n,this.mark=o}apply(e){let n=e.slice(this.from,this.to),o=new Bt(ib(n.content,r=>r.mark(this.mark.removeFromSet(r.marks)),e),n.openStart,n.openEnd);return Br.fromReplace(e,this.from,this.to,o)}invert(){return new A0(this.from,this.to,this.mark)}map(e){let n=e.mapResult(this.from,1),o=e.mapResult(this.to,-1);return n.deleted&&o.deleted||n.pos>=o.pos?null:new Ll(n.pos,o.pos,this.mark)}merge(e){return e instanceof Ll&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new Ll(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"removeMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,n){if(typeof n.from!="number"||typeof n.to!="number")throw new RangeError("Invalid input for RemoveMarkStep.fromJSON");return new Ll(n.from,n.to,e.markFromJSON(n.mark))}}Fa.jsonID("removeMark",Ll);class P0 extends Fa{constructor(e,n){super(),this.pos=e,this.mark=n}apply(e){let n=e.nodeAt(this.pos);if(!n)return Br.fail("No node at mark step's position");let o=n.type.create(n.attrs,null,this.mark.addToSet(n.marks));return Br.fromReplace(e,this.pos,this.pos+1,new Bt(rt.from(o),0,n.isLeaf?0:1))}invert(e){let n=e.nodeAt(this.pos);if(n){let o=this.mark.addToSet(n.marks);if(o.length==n.marks.length){for(let r=0;r<n.marks.length;r++)if(!n.marks[r].isInSet(o))return new P0(this.pos,n.marks[r]);return new P0(this.pos,this.mark)}}return new u1(this.pos,this.mark)}map(e){let n=e.mapResult(this.pos,1);return n.deletedAfter?null:new P0(n.pos,this.mark)}toJSON(){return{stepType:"addNodeMark",pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(e,n){if(typeof n.pos!="number")throw new RangeError("Invalid input for AddNodeMarkStep.fromJSON");return new P0(n.pos,e.markFromJSON(n.mark))}}Fa.jsonID("addNodeMark",P0);class u1 extends Fa{constructor(e,n){super(),this.pos=e,this.mark=n}apply(e){let n=e.nodeAt(this.pos);if(!n)return Br.fail("No node at mark step's position");let o=n.type.create(n.attrs,null,this.mark.removeFromSet(n.marks));return Br.fromReplace(e,this.pos,this.pos+1,new Bt(rt.from(o),0,n.isLeaf?0:1))}invert(e){let n=e.nodeAt(this.pos);return!n||!this.mark.isInSet(n.marks)?this:new P0(this.pos,this.mark)}map(e){let n=e.mapResult(this.pos,1);return n.deletedAfter?null:new u1(n.pos,this.mark)}toJSON(){return{stepType:"removeNodeMark",pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(e,n){if(typeof n.pos!="number")throw new RangeError("Invalid input for RemoveNodeMarkStep.fromJSON");return new u1(n.pos,e.markFromJSON(n.mark))}}Fa.jsonID("removeNodeMark",u1);class Fr extends Fa{constructor(e,n,o,r=!1){super(),this.from=e,this.to=n,this.slice=o,this.structure=r}apply(e){return this.structure&&lb(e,this.from,this.to)?Br.fail("Structure replace would overwrite content"):Br.fromReplace(e,this.from,this.to,this.slice)}getMap(){return new Y2([this.from,this.to-this.from,this.slice.size])}invert(e){return new Fr(this.from,this.from+this.slice.size,e.slice(this.from,this.to))}map(e){let n=e.mapResult(this.to,-1),o=this.from==this.to&&Fr.MAP_BIAS<0?n:e.mapResult(this.from,1);return o.deletedAcross&&n.deletedAcross?null:new Fr(o.pos,Math.max(o.pos,n.pos),this.slice,this.structure)}merge(e){if(!(e instanceof Fr)||e.structure||this.structure)return null;if(this.from+this.slice.size==e.from&&!this.slice.openEnd&&!e.slice.openStart){let n=this.slice.size+e.slice.size==0?Bt.empty:new Bt(this.slice.content.append(e.slice.content),this.slice.openStart,e.slice.openEnd);return new Fr(this.from,this.to+(e.to-e.from),n,this.structure)}else if(e.to==this.from&&!this.slice.openStart&&!e.slice.openEnd){let n=this.slice.size+e.slice.size==0?Bt.empty:new Bt(e.slice.content.append(this.slice.content),e.slice.openStart,this.slice.openEnd);return new Fr(e.from,this.to,n,this.structure)}else return null}toJSON(){let e={stepType:"replace",from:this.from,to:this.to};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,n){if(typeof n.from!="number"||typeof n.to!="number")throw new RangeError("Invalid input for ReplaceStep.fromJSON");return new Fr(n.from,n.to,Bt.fromJSON(e,n.slice),!!n.structure)}}Fr.MAP_BIAS=1,Fa.jsonID("replace",Fr);class ba extends Fa{constructor(e,n,o,r,a,i,l=!1){super(),this.from=e,this.to=n,this.gapFrom=o,this.gapTo=r,this.slice=a,this.insert=i,this.structure=l}apply(e){if(this.structure&&(lb(e,this.from,this.gapFrom)||lb(e,this.gapTo,this.to)))return Br.fail("Structure gap-replace would overwrite content");let n=e.slice(this.gapFrom,this.gapTo);if(n.openStart||n.openEnd)return Br.fail("Gap is not a flat range");let o=this.slice.insertAt(this.insert,n.content);return o?Br.fromReplace(e,this.from,this.to,o):Br.fail("Content does not fit in gap")}getMap(){return new Y2([this.from,this.gapFrom-this.from,this.insert,this.gapTo,this.to-this.gapTo,this.slice.size-this.insert])}invert(e){let n=this.gapTo-this.gapFrom;return new ba(this.from,this.from+this.slice.size+n,this.from+this.insert,this.from+this.insert+n,e.slice(this.from,this.to).removeBetween(this.gapFrom-this.from,this.gapTo-this.from),this.gapFrom-this.from,this.structure)}map(e){let n=e.mapResult(this.from,1),o=e.mapResult(this.to,-1),r=this.from==this.gapFrom?n.pos:e.map(this.gapFrom,-1),a=this.to==this.gapTo?o.pos:e.map(this.gapTo,1);return n.deletedAcross&&o.deletedAcross||r<n.pos||a>o.pos?null:new ba(n.pos,o.pos,r,a,this.slice,this.insert,this.structure)}toJSON(){let e={stepType:"replaceAround",from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,n){if(typeof n.from!="number"||typeof n.to!="number"||typeof n.gapFrom!="number"||typeof n.gapTo!="number"||typeof n.insert!="number")throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON");return new ba(n.from,n.to,n.gapFrom,n.gapTo,Bt.fromJSON(e,n.slice),n.insert,!!n.structure)}}Fa.jsonID("replaceAround",ba);function lb(t,e,n){let o=t.resolve(e),r=n-e,a=o.depth;for(;r>0&&a>0&&o.indexAfter(a)==o.node(a).childCount;)a--,r--;if(r>0){let i=o.node(a).maybeChild(o.indexAfter(a));for(;r>0;){if(!i||i.isLeaf)return!0;i=i.firstChild,r--}}return!1}function $X(t,e,n,o){let r=[],a=[],i,l;t.doc.nodesBetween(e,n,(s,u,p)=>{if(!s.isInline)return;let m=s.marks;if(!o.isInSet(m)&&p.type.allowsMarkType(o.type)){let b=Math.max(u,e),v=Math.min(u+s.nodeSize,n),C=o.addToSet(m);for(let k=0;k<m.length;k++)m[k].isInSet(C)||(i&&i.to==b&&i.mark.eq(m[k])?i.to=v:r.push(i=new Ll(b,v,m[k])));l&&l.to==b?l.to=v:a.push(l=new A0(b,v,o))}}),r.forEach(s=>t.step(s)),a.forEach(s=>t.step(s))}function LX(t,e,n,o){let r=[],a=0;t.doc.nodesBetween(e,n,(i,l)=>{if(!i.isInline)return;a++;let s=null;if(o instanceof q3){let u=i.marks,p;for(;p=o.isInSet(u);)(s||(s=[])).push(p),u=p.removeFromSet(u)}else o?o.isInSet(i.marks)&&(s=[o]):s=i.marks;if(s&&s.length){let u=Math.min(l+i.nodeSize,n);for(let p=0;p<s.length;p++){let m=s[p],b;for(let v=0;v<r.length;v++){let C=r[v];C.step==a-1&&m.eq(r[v].style)&&(b=C)}b?(b.to=u,b.step=a):r.push({style:m,from:Math.max(l,e),to:u,step:a})}}}),r.forEach(i=>t.step(new Ll(i.from,i.to,i.style)))}function sb(t,e,n,o=n.contentMatch,r=!0){let a=t.doc.nodeAt(e),i=[],l=e+1;for(let s=0;s<a.childCount;s++){let u=a.child(s),p=l+u.nodeSize,m=o.matchType(u.type);if(!m)i.push(new Fr(l,p,Bt.empty));else{o=m;for(let b=0;b<u.marks.length;b++)n.allowsMarkType(u.marks[b].type)||t.step(new Ll(l,p,u.marks[b]));if(r&&u.isText&&n.whitespace!="pre"){let b,v=/\r?\n|\r/g,C;for(;b=v.exec(u.text);)C||(C=new Bt(rt.from(n.schema.text(" ",n.allowedMarks(u.marks))),0,0)),i.push(new Fr(l+b.index,l+b.index+b[0].length,C))}}l=p}if(!o.validEnd){let s=o.fillBefore(rt.empty,!0);t.replace(l,l,new Bt(s,0,0))}for(let s=i.length-1;s>=0;s--)t.step(i[s])}function AX(t,e,n){return(e==0||t.canReplace(e,t.childCount))&&(n==t.childCount||t.canReplace(0,n))}function Id(t){let e=t.parent.content.cutByIndex(t.startIndex,t.endIndex);for(let n=t.depth,o=0,r=0;;--n){let a=t.$from.node(n),i=t.$from.index(n)+o,l=t.$to.indexAfter(n)-r;if(n<t.depth&&a.canReplace(i,l,e))return n;if(n==0||a.type.spec.isolating||!AX(a,i,l))break;i&&(o=1),l<a.childCount&&(r=1)}return null}function PX(t,e,n){let{$from:o,$to:r,depth:a}=e,i=o.before(a+1),l=r.after(a+1),s=i,u=l,p=rt.empty,m=0;for(let C=a,k=!1;C>n;C--)k||o.index(C)>0?(k=!0,p=rt.from(o.node(C).copy(p)),m++):s--;let b=rt.empty,v=0;for(let C=a,k=!1;C>n;C--)k||r.after(C+1)<r.end(C)?(k=!0,b=rt.from(r.node(C).copy(b)),v++):u++;t.step(new ba(s,u,i,l,new Bt(p.append(b),m,v),p.size-m,!0))}function cb(t,e,n=null,o=t){let r=NX(t,e),a=r&&_X(o,e);return a?r.map(hE).concat({type:e,attrs:n}).concat(a.map(hE)):null}function hE(t){return{type:t,attrs:null}}function NX(t,e){let{parent:n,startIndex:o,endIndex:r}=t,a=n.contentMatchAt(o).findWrapping(e);if(!a)return null;let i=a.length?a[0]:e;return n.canReplaceWith(o,r,i)?a:null}function _X(t,e){let{parent:n,startIndex:o,endIndex:r}=t,a=n.child(o),i=e.contentMatch.findWrapping(a.type);if(!i)return null;let l=(i.length?i[i.length-1]:e).contentMatch;for(let s=o;l&&s<r;s++)l=l.matchType(n.child(s).type);return!l||!l.validEnd?null:i}function jX(t,e,n){let o=rt.empty;for(let i=n.length-1;i>=0;i--){if(o.size){let l=n[i].type.contentMatch.matchFragment(o);if(!l||!l.validEnd)throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper")}o=rt.from(n[i].type.create(n[i].attrs,o))}let r=e.start,a=e.end;t.step(new ba(r,a,r,a,new Bt(o,0,0),n.length,!0))}function IX(t,e,n,o,r){if(!o.isTextblock)throw new RangeError("Type given to setBlockType should be a textblock");let a=t.steps.length;t.doc.nodesBetween(e,n,(i,l)=>{let s=typeof r=="function"?r(i):r;if(i.isTextblock&&!i.hasMarkup(o,s)&&RX(t.doc,t.mapping.slice(a).map(l),o)){let u=null;if(o.schema.linebreakReplacement){let v=o.whitespace=="pre",C=!!o.contentMatch.matchType(o.schema.linebreakReplacement);v&&!C?u=!1:!v&&C&&(u=!0)}u===!1&&bE(t,i,l,a),sb(t,t.mapping.slice(a).map(l,1),o,void 0,u===null);let p=t.mapping.slice(a),m=p.map(l,1),b=p.map(l+i.nodeSize,1);return t.step(new ba(m,b,m+1,b-1,new Bt(rt.from(o.create(s,null,i.marks)),0,0),1,!0)),u===!0&&fE(t,i,l,a),!1}})}function fE(t,e,n,o){e.forEach((r,a)=>{if(r.isText){let i,l=/\r?\n|\r/g;for(;i=l.exec(r.text);){let s=t.mapping.slice(o).map(n+1+a+i.index);t.replaceWith(s,s+1,e.type.schema.linebreakReplacement.create())}}})}function bE(t,e,n,o){e.forEach((r,a)=>{if(r.type==r.type.schema.linebreakReplacement){let i=t.mapping.slice(o).map(n+1+a);t.replaceWith(i,i+1,e.type.schema.text(`
|
|
@@ -220,7 +220,7 @@ ${Ye.map(Ut=>`- ${Ut.crop}: ${Ut.error}`).join(`
|
|
|
220
220
|
font-size: 14px;
|
|
221
221
|
font-weight: 500;
|
|
222
222
|
transition: all 0.2s ease;
|
|
223
|
-
`,f.addEventListener("mouseenter",()=>{f.style.backgroundColor="#334793",f.style.transform="translateY(-1px)"}),f.addEventListener("mouseleave",()=>{f.style.backgroundColor="#001978",f.style.transform="translateY(0)"}),f.addEventListener("click",()=>{this.open()}),this.container.appendChild(f),this.button=f,this.mounted=!0}_resolveContainer(){const{container:f}=this.config;return f?typeof f=="string"?document.querySelector(f):f instanceof Element?f:null:null}_renderApp(){var f,x;return A.createElement("div",{id:`limbo-component-container-${this.id}`,className:"limbo-scope limbo-instance limbo-component-container-wrapper lb:h-full lb:w-full lb:py-2 lb:pb-0 lb:bg-white","data-limbo-id":this.id,"data-limbo-mode":this.config.mode,"data-limbo-version":"3.8.
|
|
223
|
+
`,f.addEventListener("mouseenter",()=>{f.style.backgroundColor="#334793",f.style.transform="translateY(-1px)"}),f.addEventListener("mouseleave",()=>{f.style.backgroundColor="#001978",f.style.transform="translateY(0)"}),f.addEventListener("click",()=>{this.open()}),this.container.appendChild(f),this.button=f,this.mounted=!0}_resolveContainer(){const{container:f}=this.config;return f?typeof f=="string"?document.querySelector(f):f instanceof Element?f:null:null}_renderApp(){var f,x;return A.createElement("div",{id:`limbo-component-container-${this.id}`,className:"limbo-scope limbo-instance limbo-component-container-wrapper lb:h-full lb:w-full lb:py-2 lb:pb-0 lb:bg-white","data-limbo-id":this.id,"data-limbo-mode":this.config.mode,"data-limbo-version":"3.8.3","data-limbo-isolated":"true","aria-label":"Limbo Image Manager",role:"region"},A.createElement(Qme,{apiKey:this.config.apiKey||null,publicKey:this.config.publicKey||null,token:this.config.token||null,prod:this.config.prod||!1,url:this.config.url,features:this.config.features,modeUI:this.config.modeUI||"full",ui:this.config.ui,callbacks:this._createCallbacks(),instanceId:this.id,authMode:this.config.authMode||(this.config.publicKey?"session":"manual"),_externalImage:this.config._externalImage||null,cropperConfig:this.config.cropper||null,allowedCategories:((f=this.config.validation)==null?void 0:f.allowedCategories)||null,accept:((x=this.config.validation)==null?void 0:x.accept)||null,returnConfig:this.config.returnConfig||null,folderConfig:this.config.folders||{include:[],exclude:[],includeNoFolder:!0},itemsPerPage:this.config.itemsPerPage||30}))}_createCallbacks(){return{onSelect:f=>{var $,_;const x=(_=($=this.config)==null?void 0:$.callbacks)==null?void 0:_.onSelect,O=this._createStandardPayload(f,"select");x&&Promise.resolve(x(O)).catch(R=>{console.error("[LimboInstance] Error en onSelect callback:",R)}),this.destroyed||this._emitDOMEvent("select",O)},onUpload:f=>{var $,_;const x=(_=($=this.config)==null?void 0:$.callbacks)==null?void 0:_.onUpload,O=this._createStandardPayload(f,"upload");x&&Promise.resolve(x(O)).catch(R=>{console.error("[LimboInstance] Error en onUpload callback:",R)}),this.destroyed||this._emitDOMEvent("upload",O)},onError:f=>{var $,_;const x=(_=($=this.config)==null?void 0:$.callbacks)==null?void 0:_.onError,O={instance:this,error:{message:f.message||"Unknown error",code:f.code||"UNKNOWN",timestamp:Date.now()}};x&&x(O.error),this.destroyed||this._emitDOMEvent("error",O)},onClose:()=>{var O,$;const f=($=(O=this.config)==null?void 0:O.callbacks)==null?void 0:$.onClose,x={instance:this,timestamp:Date.now()};f&&f(),this.destroyed||this._emitDOMEvent("close",x)},onCropsSaved:f=>{var $,_,R;console.log("[LimboInstance] onCropsSaved recibido:",f),console.log("[LimboInstance] this.config?.callbacks:",($=this.config)==null?void 0:$.callbacks);const x=(R=(_=this.config)==null?void 0:_.callbacks)==null?void 0:R.onCropsSaved;console.log("[LimboInstance] userCallback existe:",!!x);const O={instance:this,eventType:"cropsSaved",timestamp:Date.now(),instanceId:this.id,...f};if(console.log("[LimboInstance] payload.crops:",O.crops),x){console.log("[LimboInstance] Llamando userCallback onCropsSaved");try{x(O),console.log("[LimboInstance] userCallback ejecutado correctamente")}catch(Q){console.error("[LimboInstance] Error en userCallback:",Q)}}else console.warn("[LimboInstance] ⚠️ userCallback onCropsSaved NO existe");this.destroyed||this._emitDOMEvent("cropsSaved",O)},onCropperComplete:f=>{var $,_;console.log("[LimboInstance] onCropperComplete recibido:",f);const x=(_=($=this.config)==null?void 0:$.callbacks)==null?void 0:_.onCropperComplete,O={instance:this,eventType:"cropperComplete",timestamp:Date.now(),instanceId:this.id,...f};x&&(console.log("[LimboInstance] Llamando userCallback onCropperComplete"),x(O)),this.destroyed||this._emitDOMEvent("cropperComplete",O)}}}_createStandardPayload(f,x){var $,_;const O={instance:this,eventType:x,timestamp:Date.now(),instanceId:this.id,mode:($=this.config)==null?void 0:$.mode,features:(_=this.config)==null?void 0:_.features};return f&&(f.assetId||f.id?(O.assetId=f.assetId||f.id,O.variants=f.variants||[],O.master=f.master||{urlSigned:f.url||f.urlSigned,width:f.width,height:f.height,mime:f.mime||f.mimeType},O.fileName=f.fileName||f.name,O.mime=f.mime||f.mimeType,O.width=f.width,O.height=f.height,O.fileBlob=f.fileBlob||f.file,O.metadata={uploadedBy:f.uploadedBy,uploadedAt:f.uploadedAt||f.timestamp,size:f.size,...f.metadata}):Object.assign(O,f)),O}_emitDOMEvent(f,x){var $;if(this.destroyed)return;const O=new CustomEvent(`limbo:${f}`,{detail:x,bubbles:!0,cancelable:!0});(this.getContainer()||document).dispatchEvent(O),($=this.eventManager)==null||$.emit(f,x)}_validateConfig(){var x,O,$,_,R;const f=ao();if(!((x=this.config.auth)!=null&&x.apiKey||(O=this.config.auth)!=null&&O.publicKey||($=this.config.auth)!=null&&$.token||this.config.apiKey||this.config.publicKey||this.config.token||this.config.tokenProvider||(_=this.config.auth)!=null&&_.tokenProvider||f.token||f.publicKey||f.tokenProvider))throw new Error(`LimboInstance ${this.id}: Authentication is required. Provide either auth.publicKey (recommended), auth.apiKey (for server-side only), token, or tokenProvider`);if(((R=this.config.auth)!=null&&R.apiKey||this.config.apiKey)&&typeof window<"u"&&console.warn(`⚠️ SECURITY WARNING: API Key detected in client-side code.
|
|
224
224
|
This is a security risk! Use publicKey instead for client applications.
|
|
225
225
|
API Keys should only be used in server-side environments.`),!["embed","modal","button"].includes(this.config.mode))throw new Error(`LimboInstance ${this.id}: invalid mode ${this.config.mode}`);if(this.config.mode==="embed"&&!this.config.container)throw new Error(`LimboInstance ${this.id}: container is required for embed mode`);if(this.config.mode==="button"&&!this.config.container)throw new Error(`LimboInstance ${this.id}: container is required for button mode`)}}class zme{constructor(){this.instances=new Map,this.counter=0}create(f,x,O){const $="limbo-"+ ++this.counter,_=new Dme($,f,x,O);return this.instances.set($,_),_}get(f){return this.instances.get(f)}getAll(){return Array.from(this.instances.values())}getActive(){return this.getAll().filter(f=>f.isMounted())}destroy(f){const x=this.instances.get(f);return!!x&&(x.destroy(),this.instances.delete(f),!0)}destroyAll(){this.instances.forEach(f=>f.destroy()),this.instances.clear()}cleanupOrphans(){const f=[];return this.instances.forEach((x,O)=>{x.isContainerInDOM()||f.push(O)}),f.forEach(x=>this.destroy(x)),f.length}getStats(){const f=this.getAll();return{total:f.length,active:f.filter(x=>x.isMounted()).length,embed:f.filter(x=>x.getMode()==="embed").length,modal:f.filter(x=>x.getMode()==="modal").length,button:f.filter(x=>x.getMode()==="button").length}}}class Vme{constructor(){this.config=null,this.instances=new Map,this.observer=null,this.initialized=!1}configure(f,x,O){return this.config={selector:f.selector||null,dataset:f.dataset||"data-limbo-input-file",return:f.return||f.returnType||"json",mode:f.mode||"modal",features:f.features||["gallery","upload","cropper"],crop:f.crop||"free",quality:f.quality||.9,format:f.format||"webp",modeUI:f.modeUI||"full",modalSize:f.modalSize||"fullscreen",theme:f.theme||"light",compact:f.compact||!1,maxSize:f.maxSize||"10MB",formats:f.formats||["jpg","jpeg","png","svg","webp"],minWidth:f.minWidth||null,minHeight:f.minHeight||null,maxWidth:f.maxWidth||null,maxHeight:f.maxHeight||null,buttonText:f.buttonText||"Seleccionar archivo",buttonClass:f.buttonClass||"limbo-auto-button",buttonStyle:f.buttonStyle||"primary",showPreview:f.showPreview!==!1,allowMultiple:f.allowMultiple||!1,autoAssign:f.autoAssign!==!1,localCropsOnly:f.localCropsOnly||!1,...f},this.configManager=x,this.eventManager=O,this._initialize(),this}cleanup(){this.observer&&(this.observer.disconnect(),this.observer=null),this.instances.forEach(({input:f,button:x})=>{this._restoreInput(f,x)}),this.instances.clear(),this.config=null,this.initialized=!1}getStats(){var f,x;return{configured:this.config!==null,totalInputs:this.instances.size,dataset:(f=this.config)==null?void 0:f.dataset,returnType:(x=this.config)==null?void 0:x.return}}_initialize(){this.initialized||(this._scanExistingInputs(),this._setupObserver(),this.initialized=!0,this.eventManager.emit("autoInputs:initialized",{config:this.config,inputsFound:this.instances.size}))}_scanExistingInputs(){const f=this.config.selector||`input[${this.config.dataset}]`;document.querySelectorAll(f).forEach(x=>this._processInput(x))}_processInput(f){const x=this._getInputId(f);if(this.instances.has(x)||!this._validateInput(f))return;const O=this._createButton(f);this._hideInput(f),this._insertButton(f,O),this.instances.set(x,{input:f,button:O,config:this._getInputConfig(f)}),this.eventManager.emit("autoInputs:processed",{inputId:x,input:f,button:O})}_createButton(f){const x=document.createElement("button"),O=this._getInputConfig(f);x.type="button";const $=f.dataset.buttontext||f.getAttribute("data-limbo-button-text")||null;x.textContent=$||p(O.accept||null,!1);const _=[this.config.buttonClass];return O.buttonClass&&O.buttonClass!==this.config.buttonClass&&_.push(O.buttonClass),x.className=_.join(" "),this._styleButton(x,O),this._attachButtonEvents(x,f),x.setAttribute("aria-label",O.buttonText||this.config.buttonText),x.setAttribute("data-limbo-trigger","true"),x.setAttribute("data-limbo-input-id",O.inputId),O.disabled&&(x.disabled=!0),x}_styleButton(f,x){const O=x.buttonStyle||this.config.buttonStyle,$=x.theme||this.config.theme,_=x.compact||this.config.compact,R={border:"none",borderRadius:"8px",cursor:"pointer",fontFamily:"inherit",fontSize:_?"12px":"14px",fontWeight:"500",transition:"all 0.2s ease",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:"8px",padding:_?"6px 12px":"8px 16px",textDecoration:"none",userSelect:"none"},Q={primary:{backgroundColor:$==="dark"?"#3b82f6":"#001978",color:"white",hoverBg:$==="dark"?"#2563eb":"#334793"},secondary:{backgroundColor:$==="dark"?"#374151":"#f3f4f6",color:$==="dark"?"#f9fafb":"#374151",border:"1px solid "+($==="dark"?"#4b5563":"#d1d5db"),hoverBg:$==="dark"?"#4b5563":"#e5e7eb"},outline:{backgroundColor:"transparent",color:$==="dark"?"#3b82f6":"#001978",border:"2px solid "+($==="dark"?"#3b82f6":"#001978"),hoverBg:$==="dark"?"#3b82f6":"#001978",hoverColor:"white"},ghost:{backgroundColor:"transparent",color:$==="dark"?"#f9fafb":"#374151",hoverBg:$==="dark"?"#374151":"#f3f4f6"}},D=Q[O]||Q.primary;Object.assign(f.style,{...R,...D});const z=D.backgroundColor,B=D.color;f.addEventListener("mouseenter",()=>{f.style.backgroundColor=D.hoverBg||D.backgroundColor,D.hoverColor&&(f.style.color=D.hoverColor),f.style.transform="translateY(-1px)",f.style.boxShadow="0 4px 12px rgba(0, 0, 0, 0.15)"}),f.addEventListener("mouseleave",()=>{f.style.backgroundColor=z,f.style.color=B,f.style.transform="translateY(0)",f.style.boxShadow="none"}),x.disabled&&(f.style.opacity="0.5",f.style.cursor="not-allowed")}_attachButtonEvents(f,x){f.addEventListener("click",O=>{O.preventDefault(),this._handleButtonClick(x)})}_handleButtonClick(f){const x=this._getInputConfig(f),O=this._createModalConfig(x);this.eventManager.emit("autoInputs:modalRequest",{input:f,config:O,callback:async $=>await this._handleImageSelection(f,$)})}async _handleImageSelection(f,x){var _;const O=this._getInputConfig(f);let $=x;try{if(!x.original&&!x.images&&(x.id||x.assetId)){console.log("[AutoInputManager] 🔗 Selección directa detectada, obteniendo URL permanente...");const Q=x.id||x.assetId;try{const D=await(async function(z,B=!0,ae=!0,J=0){try{const G=new URLSearchParams({include_variants:B.toString(),include_metadata:ae.toString(),url_expires:J.toString()});return Zt(await ue({endpoint:`/assets/${z}?${G}`,method:"GET",basePath:qn,useJWT:!0}))}catch(G){throw yn(G)}})(Q,!1,!1,!0);(_=D==null?void 0:D.result)!=null&&_.url?(console.log("[AutoInputManager] ✅ URL permanente obtenida:",D.result.url),$={original:{url:D.result.url,width:D.result.width||x.width,height:D.result.height||x.height,assetId:Q},images:[]}):(console.warn("[AutoInputManager] ⚠️ No se pudo obtener URL permanente, usando URL temporal"),$={original:{url:x.url||x.path,width:x.width,height:x.height,assetId:Q},images:[]})}catch(D){console.error("[AutoInputManager] Error obteniendo URL permanente:",D),$={original:{url:x.url||x.path,width:x.width,height:x.height,assetId:Q},images:[]}}}const R=await this._formatImageData($,O);console.log("[AutoInputManager] Valor formateado:",R),console.log("[AutoInputManager] Tipo de valor:",typeof R),O.autoAssign!==!1&&(f.value=R,console.log("[AutoInputManager] Valor asignado al input:",f.value)),this._updateButtonFeedback(f,$),f.dispatchEvent(new Event("change",{bubbles:!0})),f.dispatchEvent(new CustomEvent("limbo:resultReady",{detail:{imageData:$,input:f,value:R,config:O,assignment:{format:O.return,smartAssign:O.smartAssign!==!1,autoAssign:O.autoAssign!==!1},legacy:{imageData:$,formatted:this._createFormattedResult($,O)}},bubbles:!0})),f.dispatchEvent(new CustomEvent("limbo:imageSelected",{detail:{imageData:$,input:f,value:R,config:O,formatted:this._createFormattedResult($,O)},bubbles:!0})),this.eventManager.emit("autoInputs:imageSelected",{input:f,imageData:$,value:R,config:O})}catch(R){console.error("Error handling image selection:",R),f.dispatchEvent(new CustomEvent("limbo:error",{detail:{error:R.message,input:f,imageData:$,config:O},bubbles:!0})),this._handleImageSelectionLegacy(f,x)}}_updateButtonFeedback(f,x){var J;const O=this._getInputId(f),$=this.instances.get(O);if(!$||!$.button)return;const _=$.button,R=_.nextElementSibling;R&&R.classList.contains("limbo-button-feedback")&&R.remove();const Q=document.createElement("span");Q.className="limbo-button-feedback",Q.style.cssText=`
|
|
226
226
|
display: inline-flex;
|