@fiddle-digital/string-tune 1.2.1-alpha.6 → 1.2.1-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -16,7 +16,7 @@
16
16
  -ms-overflow-style: none; /* IE and Edge */
17
17
  scrollbar-width: none; /* Firefox */
18
18
  }
19
- `,document.head.appendChild(t)}createScrollbar(){this.scrollbar=document.createElement("div"),this.scrollbar.classList.add("scrollbar"),this.thumb=document.createElement("div"),this.thumb.classList.add("thumb"),this.scrollbar.appendChild(this.thumb),document.body.appendChild(this.scrollbar),this.scrollbarStateHorizontal=new Je(this.data,this.scrollbar,this.thumb,this.requestScrollTo),this.scrollbarStateVertical=new tr(this.data,this.scrollbar,this.thumb,this.requestScrollTo),this.scrollbarState=this.scrollbarStateVertical}updateThumb(){this.scrollbarState.updateThumb()}mouseDownEvent(t){this.isDragging=!0,this.scrollbarState.mouseDownEvent(t),document.body.style.userSelect="none",this.scrollbar.classList.add("-touch")}mouseMoveEvent(t){this.isDragging&&this.scrollbarState.mouseMoveEvent(t)}mouseUpEvent(){this.isDragging=!1,document.body.style.userSelect="",this.hideScrollbar(),this.scrollbar.classList.remove("-touch")}showScrollbar(){this.scrollbar.classList.add("-scroll")}hideScrollbar(){this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout(()=>{this.scrollbar.classList.remove("-scroll")},1e3)}};var Et={BEFORE_ELEMENT:"-before-element",AFTER_ELEMENT:"-after-element"};function fs(l){if(!l||!Array.isArray(l.chars)||l.chars.length===0)return[];let t=null;for(let e of l.chars){let r=e.splitClass??[];if(r.length!==0){if(t===null){t=r;continue}if(r.length!==t.length)return[];for(let i=0;i<r.length;i++)if(r[i]!==t[i])return[]}}return t??[]}function mi(l){return l.chars[0]?.token?.meta?.wrappers??[]}function vs(l,t,e){if(e.trimInlineGaps!==!0||!t)return!1;let r=mi(l),i=mi(t);if(r.length===0||i.length===0)return!1;if(r.length!==i.length)return!0;for(let n=0;n<r.length;n++)if(r[n].id!==i[n].id)return!0;return!1}function Zi(l,t,e){let r=document.createDocumentFragment(),i=K(t,"line")||K(t,"charLine")||K(t,"wordLine"),n=0,s=K(t,"char")||K(t,"charLine")||K(t,"charWord"),o=0;l.forEach(p=>o+=p.words.length);let a=0;l.forEach(p=>p.words.forEach(g=>a+=g.chars.length));let d=l.length,c=o,u=new Map;return l.forEach((p,g)=>{let m=g===l.length-1,h=r,f="";i&&(h=document.createElement("span"),h.setAttribute("aria-hidden","true"),h.classList.add("-s-line"),p.isBeforeElement&&h.classList.add(Et.BEFORE_ELEMENT),p.isAfterElement&&h.classList.add(Et.AFTER_ELEMENT),h.style.setProperty("--line-index",String(p.lineIndex)),h.style.setProperty("--word-total",String(p.words.length)),p.fitFontSize!==void 0&&h.style.setProperty("--fit-font-size",String(p.fitFontSize)),hi(h,p.calculatedValues,t));let b=[],y=h;p.words.forEach((v,S)=>{let E=S===p.words.length-1,M=mi(v),C=0;for(;C<b.length&&C<M.length&&b[C].info.id===M[C].id;)C++;for(;b.length>C;)b.pop();y=b.length>0?b[b.length-1].element:h;for(let T=C;T<M.length;T++){let P=M[T],R=document.createElement(P.tag);for(let[B,W]of P.attributes)R.setAttribute(B,W);y.appendChild(R),b.push({info:P,element:R}),y=R}if(v.chars.length===1&&v.chars[0].token.type==="element"){let T=v.chars[0].token.node.cloneNode(!0);y.appendChild(T);return}let I=v.chars.map(T=>T.char).join("");I&&(f+=f.length===0||v.noSpaceBefore?I:` ${I}`);let H=K(t,"word")||K(t,"charWord")||K(t,"wordLine"),w=H?document.createElement("span"):y,_=fs(v);if(H&&(w.setAttribute("aria-hidden","true"),w.classList.add("-s-word"),v.isBeforeElement&&w.classList.add(Et.BEFORE_ELEMENT),v.isAfterElement&&w.classList.add(Et.AFTER_ELEMENT),w.style.setProperty("--word-index",String(v.wordIndexGlobal)),w.style.setProperty("--char-total",String(v.chars.length)),w.setAttribute("data-split-content",I),hi(w,v.calculatedValues,t),_.length&&w.classList.add(..._)),s)v.chars.forEach((T,P)=>{if(T.char===" "||T.char===" ")return;let R=document.createElement("span");R.setAttribute("aria-hidden","true");let B=R;B.classList.add("-s-char"),T.isBeforeElement&&B.classList.add(Et.BEFORE_ELEMENT),T.isAfterElement&&B.classList.add(Et.AFTER_ELEMENT),B.textContent=T.char,B.setAttribute("data-split-content",T.char),B.style.setProperty("--char-index",String(n++));let W=v.chars[P+1];if(W){let z=e.getKerning(T.char,W.char);Math.abs(z)>.01&&(B.style.setProperty("--kerning",`${z.toFixed(2)}px`),B.style.marginRight="var(--kerning)")}hi(B,T.calculatedValues,t);let N=T.splitClass??[];N.length&&(!_.length||!H)&&B.classList.add(...N),w.appendChild(R)});else{let T=document.createTextNode(I);w.appendChild(T)}H&&y.appendChild(w);let k=p.words[S+1],O=k?.noSpaceBefore||vs(v,k,t);i?E?m||h.appendChild(document.createElement("br")):O||w.appendChild(document.createTextNode("\xA0")):!E&&!O&&w.appendChild(document.createTextNode("\xA0"))}),i&&(h.setAttribute("data-split-content",f),r.appendChild(h))}),i&&u.set("--line-global-total",String(d)),s&&u.set("--char-global-total",String(a)),(K(t,"word")||K(t,"charWord")||K(t,"wordLine"))&&u.set("--word-global-total",String(c)),{fragment:r,extraProps:u}}function hi(l,t,e){if(t)for(let r of t){if(!bs(r.type,r.align,e))continue;let i=ys(r.type,r.align);l.style.setProperty(i,String(r.value))}}function bs(l,t,e){let r=e[l]??[];return Array.isArray(r)&&r.some(i=>t.startsWith("random")?i.align.startsWith("random"):i.align===t)}function ys(l,t){let e=t.startsWith("random")?"random":t;return`--${l}-${e}`}function K(l,t){return Array.isArray(l[t])&&l[t].length>0}var Ss=new Set(["img","video","audio","canvas","iframe","object","svg","input","textarea","select","button","area","base","col","embed","hr","link","meta","param","source","track","wbr","picture","table"]);function Ls(l){let t=[];for(let e=0;e<l.attributes.length;e++){let r=l.attributes[e];t.push([r.name,r.value])}return t}var It=0;function Qi(l){It=0;let t=[],e=(i,n)=>{n&&Object.keys(n).length&&(i.meta={...i.meta||{},...n}),t.push(i)},r=(i,n)=>{if(i.nodeType===Node.ELEMENT_NODE){let s=i,o=s.tagName.toLowerCase();if(o==="split-class"){let a=(s.getAttribute("class")??"").split(/\s+/).filter(Boolean),d={...n||{},splitClass:[...n?.splitClass??[],...a]};s.childNodes.forEach(c=>r(c,d));return}if(o==="br"){e({type:"br",id:`br_${It++}`,node:s,tagName:"br"},n);return}if(!Ss.has(o)&&s.childNodes.length>0){let a={id:`wrapper_${It++}`,tag:o,attributes:Ls(s)},d=n?.wrappers??[],c={...n||{},wrappers:[...d,a]};s.childNodes.forEach(u=>r(u,c));return}e({type:"element",id:`el_${It++}`,node:s,tagName:o},n);return}if(i.nodeType===Node.TEXT_NODE){let s=i.nodeValue??"",o=`text_${It++}`;s.trim()?e({type:"text",id:o,node:i,content:s},n):e({type:"space",id:o,node:i,content:s},n);return}e({type:"other",id:`node_${It++}`,node:i},n)};return l.forEach(i=>r(i)),t}var rr=class{ctx;font="";cache={kerning:new Map,charWidth:new Map};constructor(t){let e=document.createElement("canvas");this.ctx=e.getContext("2d"),this.setFontFromElement(t)}setFontFromElement(t){let e=window.getComputedStyle(t),r=`${e.fontStyle} ${e.fontVariant} ${e.fontWeight} ${e.fontSize}/${e.lineHeight} ${e.fontFamily}`;r!==this.font&&(this.font=r,this.ctx.font=this.font,this.cache.kerning.clear(),this.cache.charWidth.clear())}getCharWidth(t){if(this.cache.charWidth.has(t))return this.cache.charWidth.get(t);let e=this.ctx.measureText(t).width;return this.cache.charWidth.set(t,e),e}getKerning(t,e){let r=`${t}${e}`,i=`${this.font}|${r}`;if(this.cache.kerning.has(i))return this.cache.kerning.get(i);let n=this.ctx.measureText(r).width,s=this.getCharWidth(t)+this.getCharWidth(e),o=n-s;return this.cache.kerning.set(i,o),o}measureWord(t){let e=0;for(let r=0;r<t.length;r++){let i=t[r];if(e+=this.getCharWidth(i),r>0){let n=t[r-1];e+=this.getKerning(n,i)}}return e}};function Es(l,t){let e=t.contentWidth,r=l.cloneNode(!0);r.removeAttribute("string"),r.removeAttribute("data-string"),r.removeAttribute("string-split"),r.removeAttribute("data-string-split"),r.removeAttribute("string-id"),r.removeAttribute("data-string-id"),r.removeAttribute("string-inited"),r.classList.remove("-splitted","-inview","-restored"),r.innerHTML=l.getAttribute("string-split-original-html")??l.innerHTML,r.style.setProperty("position","absolute","important"),r.style.setProperty("visibility","hidden","important"),r.style.setProperty("pointer-events","none","important"),r.style.setProperty("left","0","important"),r.style.setProperty("top","0","important"),r.style.setProperty("display","block","important"),r.style.setProperty("width",`${e}px`,"important"),r.style.setProperty("min-width",`${e}px`,"important"),r.style.setProperty("max-width",`${e}px`,"important"),r.style.setProperty("padding","0","important"),r.style.setProperty("border","0","important"),r.style.setProperty("margin","0","important"),r.style.setProperty("transform","none","important"),r.style.setProperty("scale","1","important"),(l.parentElement??document.body).appendChild(r);let n=new Map,s=document.createTreeWalker(l,NodeFilter.SHOW_ALL),o=document.createTreeWalker(r,NodeFilter.SHOW_ALL),a=s.currentNode,d=o.currentNode;for(n.set(a,d);(a=s.nextNode())&&(d=o.nextNode());)n.set(a,d);return{resolveNode(c){return n.get(c)??c},cleanup(){r.remove()}}}var ir=class{id="flex";supports(t,e){return e.display==="flex"||e.display==="inline-flex"}createSource(t,e){return Es(t,e)}};function Ms(){return{resolveNode(l){return l},cleanup(){}}}var nr=class{id="inline-flow";supports(t,e){return e.display!=="flex"&&e.display!=="inline-flex"}createSource(t,e){return Ms()}};var fi=[new ir,new nr];function ws(l){let t=window.getComputedStyle(l),e=l.getBoundingClientRect(),r=parseFloat(t.borderLeftWidth)||0,i=parseFloat(t.borderRightWidth)||0,n=parseFloat(t.paddingLeft)||0,s=parseFloat(t.paddingRight)||0;return Math.max(0,e.width-r-i-n-s)}function xs(l){let t=l.parentElement;for(;t;){let e=window.getComputedStyle(t),r=e.display;if(!(r==="inline"||r==="inline-block"||r==="ruby")){let n=t.getBoundingClientRect(),s=parseFloat(e.borderLeftWidth)||0,o=parseFloat(e.borderRightWidth)||0,a=parseFloat(e.paddingLeft)||0,d=parseFloat(e.paddingRight)||0;return Math.max(0,n.width-s-o-a-d)}t=t.parentElement}return 0}function Ji(l){let t=window.getComputedStyle(l),e=ws(l),r=xs(l),i=t.display==="inline"||t.display==="inline-flex"||t.display==="inline-grid",n=e;return(i&&r>e+1&&!l.style.width||n<=0)&&(n=r),{display:t.display,contentWidth:n,ownContentWidth:e,blockContainerContentWidth:r}}function tn(l,t){return fi.find(e=>e.supports(l,t))??fi[fi.length-1]}var sr=typeof Intl<"u"&&"Segmenter"in Intl?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;function en(l,t){return t.segment!=="visual"?Cs(l):Ps(l)}function rn(l,t){return t.segment!=="visual"||!l||!sr?Array.from(l):Array.from(sr.segment(l),({segment:e})=>e)}function Cs(l){let t=[],e=/\S+/g,r;for(;(r=e.exec(l))!==null;)Ts(r[0],r.index,t);return t}function Ts(l,t,e){let r=0;for(let i=1;i<l.length-1;i++){let n=l[i];if(n==="-"||n==="\u2010"){let s=l.slice(r,i+1),o=t+r;e.push({text:s,start:o,end:o+s.length,noSpaceBefore:e.length>0&&o===e[e.length-1].end}),r=i+1}}if(r<l.length){let i=l.slice(r),n=t+r;e.push({text:i,start:n,end:n+i.length,noSpaceBefore:e.length>0&&n===e[e.length-1].end})}}function Ps(l){let t=As(l),e=[],r=null,i=()=>{r&&(e.push({text:r.text,start:r.start,end:r.end,noSpaceBefore:e.length>0&&r.start===e[e.length-1].end}),r=null)};return t.forEach(({segment:n,index:s})=>{if(/\s/u.test(n)){i();return}let o=Os(n),a=s+n.length;if(o==="visual"){if(ks(n)){if(r){r.text+=n,r.end=a;return}if(e.length>0&&s===e[e.length-1].end){e[e.length-1].text+=n,e[e.length-1].end=a;return}}i(),e.push({text:n,start:s,end:a,noSpaceBefore:e.length>0&&s===e[e.length-1].end});return}let d=r!==null&&(r.text.endsWith("-")||r.text.endsWith("\u2010"));if(!r||r.end!==s||d){i(),r={text:n,start:s,end:a};return}r.text+=n,r.end=a}),i(),e}function As(l){if(!sr){let t=[],e=0;return Array.from(l).forEach(r=>{t.push({segment:r,index:e}),e+=r.length}),t}return Array.from(sr.segment(l),({segment:t,index:e})=>({segment:t,index:e}))}function ks(l){return/[\)\]\})」』〕〉》›»"']/u.test(l)}function Os(l){return/\p{Script=Han}|\p{Script=Hiragana}|\p{Script=Katakana}/u.test(l)?"visual":/[\p{Script=Latin}\p{Script=Cyrillic}\p{Script=Greek}\p{Script=Hangul}\p{Number}]/u.test(l)||/[\p{Mark}\p{Connector_Punctuation}\p{Dash_Punctuation}'’._+#&/@]/u.test(l)?"word":"visual"}function Ds(l,t){return!l?.length&&!t?.length?!0:!l||!t||l.length!==t.length?!1:l.every((e,r)=>e.id===t[r].id)}function Is(l,t){return l.length!==t.length?!1:l.every((e,r)=>e===t[r])}function on(l,t,e,r){let i=document.createRange(),n=[],s=!1,o=!1,a=!1,d,c=[];try{for(let u=0;u<l.length;u++){let p=l[u];switch(p.type){case"br":{n.push({token:p,rect:new DOMRect(0,0,0,0)}),o=!0,a=!1,d=void 0,c=[],s=!1;break}case"space":o=!Rs(l,u,r);break;case"other":a=!1,o=!1;break;case"text":{let g=p.content,m=/^\s/.test(g),h=p.meta?.wrappers??[],f=p.meta?.splitClass??[],b=en(g,r),y=0;for(let v of b){let S=v.text,E=new DOMRect(0,0,0,0),M=t.resolveNode(p.node);try{i.setStart(M,v.start),i.setEnd(M,v.end),E=i.getBoundingClientRect()}catch{}let C=y===0&&!m&&!o&&a,A=y>0||Ds(d,h),I=y===0&&!Is(c,f),H=e.measureWord(S),w=new DOMRect(E.x,E.y,H,E.height),_={...p.meta||{},joinPrev:C&&A&&!I,noSpaceBefore:v.noSpaceBefore||C&&(!A||I)};s&&y===0&&(_.isAfterElement=!0,s=!1),n.push({token:{type:"text",id:"",node:p.node,content:S,meta:_},rect:w,browserWidth:E.width}),y++}y>0&&(o=/\s$/.test(g),a=!0,d=h,c=f);break}case"element":{let g=t.resolveNode(p.node).getBoundingClientRect();n.push({token:p,rect:g,browserWidth:g.width});let m=n[n.length-2];m?.token.type==="text"&&(m.token.meta={...m.token.meta||{},isBeforeElement:!0}),s=!0,a=!1,c=[],o=!1;break}}}}finally{i.detach?.(),t.cleanup()}return n}function Rs(l,t,e){if(e.trimInlineGaps!==!0)return!1;let r=l[t];if(r?.type!=="space"||!/[\n\r\t]/.test(r.content)&&r.content.length<=1)return!1;let i=Hs(l,t-1),n=Bs(l,t+1);if(!i||!n||!nn(i)||!nn(n))return!1;let s=sn(i),o=sn(n);return s.length===0||o.length===0?!1:s.join("|")!==o.join("|")}function Hs(l,t){for(let e=t;e>=0;e--){let r=l[e];if(!(r.type==="space"||r.type==="other"))return r}return null}function Bs(l,t){for(let e=t;e<l.length;e++){let r=l[e];if(!(r.type==="space"||r.type==="other"))return r}return null}function nn(l){return l.type==="text"||l.type==="element"}function sn(l){return(l.meta?.wrappers??[]).map(e=>e.id)}function an(l,t,e,r){let i=Ji(t),s=tn(t,i).createSource(t,i);return on(l,s,e,r)}var ln=5;function dn(l,t,e,r){let i=[],n=null,s=0,o=0,a=0,d=0;return l.forEach(c=>{let u=c.token,p=u.meta?.isBeforeElement??!1,g=u.meta?.isAfterElement??!1;if(u.type==="br"){n=null;return}if(u.type==="text"){let m=u.content,h=u.meta?.splitClass??[],f=!!u.meta?.joinPrev,b=[],y=0,v=rn(m,r);for(let w=0;w<v.length;w++){let _=v[w],k=w>0?v[w-1]:null,O=e.getCharWidth(_),T=k?e.getKerning(k,_):0;y+=T;let P=new DOMRect(c.rect.left+y,c.rect.top,O,c.rect.height),R={char:_,rect:P,token:u,charIndexInWord:w,charIndexInLine:0,charIndexGlobal:o++};h.length&&(R.splitClass=h),b.push(R),y+=O}if(b.length>0){let w=b[b.length-1];p&&(w.isBeforeElement=!0),g&&(w.isAfterElement=!0)}let S=Math.round(c.rect.top),E=Math.round(s);if((!n||Math.abs(S-E)>ln)&&(s=S,n={words:[],rect:c.rect,lineIndex:i.length},d=0,i.push(n)),!n)return;let C=c.rect.left+(c.browserWidth??c.rect.width);if(f&&n.words.length>0){let w=n.words[n.words.length-1],_=n.words.reduce((O,T)=>O+T.chars.length,0),k=w.chars.length;b.forEach((O,T)=>{O.charIndexInLine=_+T,O.charIndexInWord=k+T}),w.chars.push(...b),w.rect=or([w.rect,c.rect]),n.rect=or(n.words.map(O=>O.rect)),d=Math.max(d,C),n.fitWidth=d-n.rect.left,n.browserWordWidthSum=(n.browserWordWidthSum??0)+(c.browserWidth??c.rect.width),p&&(w.isBeforeElement=!0),g&&(w.isAfterElement=!0);return}let A=n.words.length,I=n.words.reduce((w,_)=>w+_.chars.length,0);b.forEach((w,_)=>w.charIndexInLine=I+_);let H={chars:b,rect:c.rect,wordIndexGlobal:a++,wordIndexInLine:A,isBeforeElement:p,isAfterElement:g,noSpaceBefore:!!u.meta?.noSpaceBefore};n.words.push(H),n.rect=or(n.words.map(w=>w.rect)),d=Math.max(d,C),n.fitWidth=d-n.rect.left,n.browserWordWidthSum=(n.browserWordWidthSum??0)+(c.browserWidth??c.rect.width),p&&(n.isBeforeElement=!0),g&&(n.isAfterElement=!0);return}if(u.type==="element"){let m=c.rect,h=Math.round(m.top),f=Math.round(s);if((!n||Math.abs(h-f)>ln)&&(s=h,n={words:[],rect:m,lineIndex:i.length},d=0,i.push(n)),!n)return;let y=n.words.length,v=n.words.reduce((M,C)=>M+C.chars.length,0),E={chars:[{char:"[E]",rect:m,token:u,charIndexInWord:0,charIndexInLine:v,charIndexGlobal:o++}],rect:m,wordIndexGlobal:a++,wordIndexInLine:y,isBeforeElement:!1,isAfterElement:!1};n.words.push(E),n.rect=or(n.words.map(M=>M.rect)),d=Math.max(d,c.rect.left+(c.browserWidth??c.rect.width)),n.fitWidth=d-n.rect.left,n.browserWordWidthSum=(n.browserWordWidthSum??0)+(c.browserWidth??c.rect.width)}}),i}function or(l){if(l.length===0)return new DOMRect(0,0,0,0);let t=Math.min(...l.map(n=>n.left)),e=Math.min(...l.map(n=>n.top)),r=Math.max(...l.map(n=>n.right)),i=Math.max(...l.map(n=>n.bottom));return new DOMRect(t,e,r-t,i-e)}var ar=class extends x{lastSplitWidth=new WeakMap;constructor(t){super(t),this.htmlKey="split",this.permissions.mobile.rebuild.height=!1,this.permissions.mobile.rebuild.width=!1}onInit(){let t=()=>{this.objectsOnPage.forEach(e=>{let r=e.htmlElement;if(!r)return;let i=this.getSplitOptions(r);this.needsForcedRebuildOnFontLoad(i)&&this.lastSplitWidth.delete(r),this.onObjectConnected(e)})};document.fonts.ready.then(t),document.fonts.addEventListener("loadingdone",t)}onObjectDisconnected(t){t.htmlElement&&this.lastSplitWidth.delete(t.htmlElement)}onResizeWidth(){this.objectsOnPage.forEach(t=>{let e=t.htmlElement;if(!e)return;let r=this.getSplitOptions(e);this.needsWidthRebuild(r)&&this.onObjectConnected(t)})}onObjectConnected(t){let e=t.htmlElement;if(!e)return;let r=this.isDebugEnabled(e),i=e.classList.contains("-splitted"),n=e.getAttribute("string-split-original-html"),s=e.getAttribute("string-split-original");n===null&&s!==null&&i&&(n=s,s=this.extractTextContent(n),e.setAttribute("string-split-original-html",n),e.setAttribute("string-split-original",s)),(!i||n===null||s===null)&&(n=this.escapeAttribute(e.innerHTML),s=e.textContent??"",e.setAttribute("string-split-original-html",n),e.setAttribute("string-split-original",s)),i&&e.classList.remove("-splitted");let o=window.getComputedStyle(e),a=this.getElementContentWidth(e,o);r&&this.logConnectionStart(e,{isAlreadySplit:i,currentContentWidth:a,lastWidth:this.lastSplitWidth.get(e),originalHtml:n,originalText:s});let d=this.lastSplitWidth.get(e);if(i&&d!==void 0&&Math.abs(a-d)<1){i&&e.classList.add("-splitted");return}this.lastSplitWidth.set(e,a);try{t.htmlElement.innerHTML=n;let c=e.getAttribute("string-split")??e.getAttribute("data-string-split")??"",u=this.tools.optionsParser.process({attributeValue:c}),{fragment:p,result:g,extraProps:m}=this.split(e,u,r);t.setProperty("nodes",p.childNodes),e.setAttribute("aria-label",s),e.innerHTML="",e.appendChild(g),this.applyFlexLineBreaks(e,u),e.classList.add("-splitted"),m.forEach((f,b)=>{e.style.setProperty(b,f)}),r&&this.logRenderedState(e,u,m);let h=e.getAttribute("string-split-restore-after");h&&!isNaN(Number(h))&&setTimeout(()=>{e.innerHTML=n,e.classList.add("-restored")},Number(h))}finally{e.classList.contains("-splitted")||e.classList.add("-splitted")}}extractTextContent(t){let e=document.createElement("div");return e.innerHTML=t,e.textContent??""}getSplitOptions(t){let e=t.getAttribute("string-split")??t.getAttribute("data-string-split")??"";return this.tools.optionsParser.process({attributeValue:e})}hasLineDrivenSplit(t){return(t.line?.length??0)>0||(t.wordLine?.length??0)>0||(t.charLine?.length??0)>0}needsWidthRebuild(t){return this.hasLineDrivenSplit(t)||t.fit===!0}needsForcedRebuildOnFontLoad(t){return this.needsWidthRebuild(t)}getDebugStoreKey(t){let e=t.getAttribute("string-debug-save")??t.getAttribute("data-string-debug-save")??"";return e?e==="true"||e==="1"?this.getDebugLabel(t):e:null}writeDebugRecord(t,e,r){let i=this.getDebugStoreKey(t);if(!i)return;let n=window,s=n.__stringSplitDebug??={},o=s[i]??{label:this.getDebugLabel(t),timestamp:Date.now()};o.timestamp=Date.now(),o[e]=r,s[i]=o}isDebugEnabled(t){let e=t.getAttribute("string-debug")??t.getAttribute("data-string-debug")??"";return e?e===""||e==="true"||e==="1"||e.includes("split")||e==="all":!1}getDebugLabel(t){return t.getAttribute("string-id")??t.id??t.className??t.tagName.toLowerCase()}logConnectionStart(t,e){let r=window.getComputedStyle(t),i=this.captureBaselineSnapshot(t,r),n={text:e.originalText,html:e.originalHtml,baseline:i,flags:{isAlreadySplit:e.isAlreadySplit,display:r.display,whiteSpace:r.whiteSpace,position:r.position},widths:{currentContentWidth:e.currentContentWidth,lastWidth:e.lastWidth,rectWidth:t.getBoundingClientRect().width,clientWidth:t.clientWidth,parentContentWidth:this.getBlockContainerContentWidth(t)}};this.writeDebugRecord(t,"connect",n)}captureBaselineSnapshot(t,e){let r=t.getBoundingClientRect(),i=parseFloat(e.lineHeight);return{rectWidth:Number(r.width.toFixed(2)),rectHeight:Number(r.height.toFixed(2)),fontSize:Number(parseFloat(e.fontSize).toFixed(2)),lineHeight:Number.isFinite(i)?Number(i.toFixed(2)):e.lineHeight,estimatedLineCount:Number.isFinite(i)&&i>0?Number((r.height/i).toFixed(2)):null}}logSplitAnalysis(t,e,r,i){let n={tokens:e.map(s=>({type:s.type,text:this.getTokenDebugText(s),wrappers:s.meta?.wrappers?.map(o=>o.tag)??[]})),measured:r.map(s=>({type:s.token.type,text:this.getTokenDebugText(s.token),left:Number(s.rect.left.toFixed(2)),top:Number(s.rect.top.toFixed(2)),width:Number(s.rect.width.toFixed(2)),browserWidth:Number((s.browserWidth??s.rect.width).toFixed(2))})),layoutLines:i.map(s=>({index:s.lineIndex,text:s.words.map(o=>o.chars.map(a=>a.char).join("")).join(" "),wordCount:s.words.length,rect:{left:Number(s.rect.left.toFixed(2)),top:Number(s.rect.top.toFixed(2)),width:Number(s.rect.width.toFixed(2)),height:Number(s.rect.height.toFixed(2))},fitWidth:Number((s.fitWidth??s.rect.width).toFixed(2))}))};this.writeDebugRecord(t,"measure",n)}getTokenDebugText(t){return"content"in t?t.content:"tagName"in t?t.tagName:"#other"}logRenderedState(t,e,r){let i=window.getComputedStyle(t),n=Array.from(t.querySelectorAll(".-s-line")),s={mode:{attr:t.getAttribute("string-split")??t.getAttribute("data-string-split"),line:e.line?.length??0,wordLine:e.wordLine?.length??0,charLine:e.charLine?.length??0},root:{display:i.display,flexWrap:i.flexWrap,rectWidth:Number(t.getBoundingClientRect().width.toFixed(2)),rectHeight:Number(t.getBoundingClientRect().height.toFixed(2)),childCount:t.children.length,extraProps:Object.fromEntries(r.entries())},children:Array.from(t.children).map(o=>{let a=o,d=a.getBoundingClientRect();return{tag:a.tagName.toLowerCase(),className:a.className,text:a.textContent?.replace(/\s+/g," ").trim(),width:Number(d.width.toFixed(2)),height:Number(d.height.toFixed(2))}}),lineNodes:n.map((o,a)=>{let d=o.getBoundingClientRect(),c=window.getComputedStyle(o);return{index:a,text:o.getAttribute("data-split-content"),top:Number(d.top.toFixed(2)),left:Number(d.left.toFixed(2)),width:Number(d.width.toFixed(2)),height:Number(d.height.toFixed(2)),display:c.display,lineHeight:c.lineHeight,scale:c.scale,transform:c.transform}})};this.writeDebugRecord(t,"rendered",s)}applyFlexLineBreaks(t,e){if(!((e.line?.length??0)>0||(e.wordLine?.length??0)>0||(e.charLine?.length??0)>0))return;let i=window.getComputedStyle(t).display;if(i!=="flex"&&i!=="inline-flex")return;let n=Array.from(t.children).filter(s=>s.classList.contains("-s-line"));if(!(n.length<2))for(let s=0;s<n.length-1;s++){let o=document.createElement("span");o.setAttribute("aria-hidden","true"),o.classList.add("-s-line-break"),o.style.flexBasis="100%",o.style.width="0",o.style.height="0",o.style.overflow="hidden",o.style.pointerEvents="none",n[s].after(o)}}getBlockContainerContentWidth(t){let e=t.parentElement;for(;e;){let r=window.getComputedStyle(e),i=r.display;if(!(i==="inline"||i==="inline-block"||i==="ruby")){let s=e.getBoundingClientRect().width||e.clientWidth;return Math.max(0,s-(parseFloat(r.paddingLeft)||0)-(parseFloat(r.paddingRight)||0))}e=e.parentElement}return 0}getElementContentWidth(t,e=window.getComputedStyle(t)){let r=(parseFloat(e.paddingLeft)||0)+(parseFloat(e.paddingRight)||0),i=t.clientWidth||t.getBoundingClientRect().width,n=this.getBlockContainerContentWidth(t);return n>i+1&&!t.style.width&&(e.display==="inline"||e.display==="inline-flex"||e.display==="inline-grid")?Math.max(0,n-r):i>0?Math.max(0,i-r):Math.max(0,n-r)}split(t,e,r=!1){let i=new rr(t),n=document.createDocumentFragment();t.childNodes.forEach(p=>n.appendChild(p.cloneNode(!0)));let s=Qi(t.childNodes),o=an(s,t,i,e),a=dn(o,t,i,e);r&&this.logSplitAnalysis(t,s,o,a);let d=e.fit?this.getFitContext(a,t):null,c=d?this.applyFit(a,e,d):new Map;this.applyCalculatedValues(a,e);let u=Zi(a,e,i);return c.forEach((p,g)=>u.extraProps.set(g,p)),d&&this.refineFitFontSize(t,u.fragment,u.extraProps,a,e,d),{fragment:n,result:u.fragment,extraProps:u.extraProps}}getFitContext(t,e){let r=window.getComputedStyle(e),i=parseFloat(r.fontSize);if(!i)return null;let n=this.getElementContentWidth(e,r);if(n<=0)return null;let s=0;for(let d of t){let c=d.fitWidth??d.rect.width;c>s&&(s=c)}if(s<=0)return null;let o=n;if(Math.abs(n-s)<2&&e.parentElement){let d=window.getComputedStyle(e.parentElement),c=e.parentElement.clientWidth-(parseFloat(d.paddingLeft)||0)-(parseFloat(d.paddingRight)||0);c>n&&(o=c)}let a=parseFloat(r.lineHeight)||0;return{currentFontSize:i,contentWidth:o,lineHeightPx:a}}applyFit(t,e,r){let i=new Map,{currentFontSize:n,contentWidth:s}=r,o=(e.line?.length??0)>0||(e.wordLine?.length??0)>0||(e.charLine?.length??0)>0,a=(e.char?.length??0)>0||(e.charLine?.length??0)>0||(e.charWord?.length??0)>0;if(o)for(let d of t){let c=d.fitWidth??d.rect.width;c>0&&(d.fitFontSize=this.computeFitFontSize(n,s,c,a?d.browserWordWidthSum:void 0))}else{let d=t.reduce((p,g)=>(g.fitWidth??g.rect.width)>(p.fitWidth??p.rect.width)?g:p,t[0]),c=d.fitWidth??d.rect.width,u=this.computeFitFontSize(n,s,c,a?d.browserWordWidthSum:void 0);i.set("--fit-font-size",String(Math.floor(u)))}return i}refineFitFontSize(t,e,r,i,n,s){let o=(n.line?.length??0)>0||(n.wordLine?.length??0)>0||(n.charLine?.length??0)>0,a=(n.char?.length??0)>0||(n.charLine?.length??0)>0||(n.charWord?.length??0)>0,d=t.innerHTML;try{if(t.innerHTML="",t.appendChild(e.cloneNode(!0)),o){let c=Array.from(t.querySelectorAll(".-s-line")),u=Array.from(e.querySelectorAll(".-s-line"));c.forEach((p,g)=>{let m=u[g];if(!m)return;let h=parseFloat(m.style.getPropertyValue("--fit-font-size"));if(!h)return;let f=this.solveRenderedFitFontSize(p,s.currentFontSize,h,s.contentWidth,a);f&&(i[g].fitFontSize=f,m.style.setProperty("--fit-font-size",String(Math.floor(f))))})}else{let c=parseFloat(r.get("--fit-font-size")??"");if(!c)return;let u=this.solveRenderedFitFontSize(t,s.currentFontSize,c,s.contentWidth,a);if(!u)return;let p=Math.floor(u);r.set("--fit-font-size",String(p));let{lineHeightPx:g,currentFontSize:m,contentWidth:h}=s;if(g>0&&m>0){let f=g*(p/m);f>0&&(r.set("--fit-scale-y",String(window.innerHeight/f)),r.set("--fit-aspect-ratio",String(h/f)))}}}finally{t.innerHTML=d}}solveRenderedFitFontSize(t,e,r,i,n){if(!Number.isFinite(e)||!Number.isFinite(r)||e<=0||r<=0)return null;let s=this.measureScopeAtFontSize(t,n,e);if(s<=0)return null;if(Math.abs(i-s)<.01)return e;let o=Math.abs(r-e)<.01?s:this.measureScopeAtFontSize(t,n,r);if(o<=0)return e*(i/s);let a=(o-s)/(r-e);if(!Number.isFinite(a)||Math.abs(a)<1e-4)return e*(i/s);let d=e+(i-s)/a;return!Number.isFinite(d)||d<=0?null:d}measureScopeAtFontSize(t,e,r){if(e){let s=Array.from(t.querySelectorAll(".-s-char")),o=s.map(d=>d.style.fontSize);s.forEach(d=>{d.style.fontSize=`${r}px`}),t.offsetWidth;let a=this.measureCharScopeWidth(t);return s.forEach((d,c)=>{d.style.fontSize=o[c]}),a}let i=t.style.fontSize;t.style.fontSize=`${r}px`,t.offsetWidth;let n=this.measureContentWidth(t);return t.style.fontSize=i,n}measureCharScopeWidth(t){let e=0;Array.from(t.querySelectorAll(".-s-char")).forEach(o=>{let a=o.getBoundingClientRect(),d=window.getComputedStyle(o);e+=a.width+(parseFloat(d.marginLeft)||0)+(parseFloat(d.marginRight)||0)});let i=document.createTreeWalker(t,NodeFilter.SHOW_TEXT),n=i.nextNode();for(;n;){let o=n.parentElement,a=!!o?.closest(".-s-char"),d=!!o&&!o.classList.contains("-s-char")&&!o.classList.contains("-s-word")&&!o.classList.contains("-s-line")&&!o.querySelector(".-s-char, .-s-word, .-s-line");if(!a&&!d&&n.textContent?.length){let c=document.createRange();c.selectNodeContents(n),e+=c.getBoundingClientRect().width}n=i.nextNode()}return Array.from(t.querySelectorAll("*")).filter(o=>{let a=o;return!a.classList.contains("-s-char")&&!a.classList.contains("-s-word")&&!a.classList.contains("-s-line")&&!a.querySelector(".-s-char, .-s-word, .-s-line")}).forEach(o=>{e+=o.getBoundingClientRect().width}),e}measureContentWidth(t){if(!t.childNodes.length)return t.getBoundingClientRect().width;let e=document.createRange();return e.selectNodeContents(t),e.getBoundingClientRect().width}computeFitFontSize(t,e,r,i){let n=i!==void 0?r-i:0,s=r-n;return s<=0?t*(e/r):t*(e-n)/s}computeValue(t,e,r){if(t.align.startsWith("random")){let i=t.random?.min??0,n=t.random?.max??r-1;return Math.floor(Math.random()*(n-i+1))+i}switch(t.align){case"start":return e;case"end":return r-e-1;case"center":{let i=Math.floor((r-1)/2);return Math.abs(e-i)}default:return e}}applyCalculatedValues(t,e){let r=s=>s.words.reduce((o,a)=>o+a.chars.length,0),i=t.reduce((s,o)=>s+o.words.length,0),n=t.reduce((s,o)=>s+o.words.reduce((a,d)=>a+d.chars.length,0),0);t.forEach((s,o)=>{e.line&&(s.calculatedValues=e.line.map(a=>({type:"line",align:a.align,value:this.computeValue(a,o,t.length)}))),s.words.forEach(a=>{e.word&&(a.calculatedValues=e.word.map(c=>({type:"word",align:c.align,value:this.computeValue(c,a.wordIndexGlobal,i)}))),e.wordLine&&(a.calculatedValues??=[],a.calculatedValues.push(...e.wordLine.map(c=>({type:"wordLine",align:c.align,value:this.computeValue(c,a.wordIndexInLine,s.words.length)}))));let d=r(s);a.chars.forEach(c=>{let u=[];e.char&&u.push(...e.char.map(p=>({type:"char",align:p.align,value:this.computeValue(p,c.charIndexGlobal,n)}))),e.charWord&&u.push(...e.charWord.map(p=>({type:"charWord",align:p.align,value:this.computeValue(p,c.charIndexInWord,a.chars.length)}))),e.charLine&&u.push(...e.charLine.map(p=>({type:"charLine",align:p.align,value:this.computeValue(p,c.charIndexInLine,d)}))),c.calculatedValues=u})})})}escapeAttribute(t){return t.replace(/src="(https?:\/\/[^"\s]+)"/g,"src=$1")}};var lr=class extends x{canvas;context;history=[];maxPoints=0;height=0;value=0;target=0;constructor(t){super(t),this._type=2}onInit(){this.initCanvas(),this.maxPoints=this.canvas.width}onScroll(t){let e=Math.abs(t.scroll.displacement);this.value=e,this.history.push(e),this.history.length>this.maxPoints&&this.history.shift(),this.draw()}draw(){let t=this.context,e=this.canvas.width,r=this.canvas.height;t.clearRect(0,0,e,r),t.strokeStyle="red",t.lineWidth=2,t.beginPath(),this.history.forEach((i,n)=>{let s=n,o=r-i*this.height;n===0?t.moveTo(s,o):t.lineTo(s,o)}),t.stroke()}initCanvas(){let t=document.createElement("canvas"),e=window.innerWidth*.5;this.height=window.innerHeight/15-20,t.width=e,t.height=this.height,Object.assign(t.style,{position:"fixed",bottom:`${window.innerHeight/20+10}px`,left:"50%",transform:"translateX(-50%)",backgroundColor:"#000000",border:"1px solid rgba(255, 255, 255, 0.2)",zIndex:"1000",pointerEvents:"none"}),this.canvas=t,this.context=t.getContext("2d"),document.body.appendChild(t)}setTarget(t){this.target=t}clear(){this.canvas.remove(),this.history=[]}};var ht="data-fps",dr=class extends x{displayElement=null;intervalId=0;frameCount=0;fpsElements=new Set;observer=null;lastFps=-1;constructor(t){super(t),this._type=2}onInit(){this.data.system.fpsTracker&&this.createDisplayElement(),this.events.on("tracker:fps:visible",this.onVisibilityChange.bind(this)),this.scanElements(),this.observeDOM(),this.intervalId=window.setInterval(()=>{this.updateFPS(this.frameCount),this.frameCount=0},1e3)}onFrame(t){this.frameCount++}destroy(){clearInterval(this.intervalId),this.observer?.disconnect(),this.removeDisplayElement(),this.fpsElements.clear()}onVisibilityChange(t){t?this.createDisplayElement():this.removeDisplayElement()}removeDisplayElement(){this.displayElement?.remove(),this.displayElement=null}updateFPS(t){if(t===this.lastFps)return;this.lastFps=t;let e=String(t);for(let r of this.fpsElements)r.isConnected&&r.setAttribute(ht,e);this.displayElement&&this.displayElement.setAttribute(ht,e),this.events.emit("fps",t)}scanElements(){this.fpsElements.clear(),document.querySelectorAll(`[${ht}]`).forEach(t=>{t!==this.displayElement&&this.fpsElements.add(t)})}observeDOM(){this.observer=new MutationObserver(t=>{let e=!1;for(let r of t){for(let i of Array.from(r.addedNodes))if(i.nodeType===Node.ELEMENT_NODE){let n=i;n.hasAttribute(ht)&&(e=!0),n.querySelector(`[${ht}]`)&&(e=!0)}for(let i of Array.from(r.removedNodes))i.nodeType===Node.ELEMENT_NODE&&this.fpsElements.delete(i)}e&&this.scanElements()}),this.observer.observe(document.body,{childList:!0,subtree:!0})}createDisplayElement(){if(this.displayElement)return;let t=document.createElement("div");Object.assign(t.style,{position:"fixed",bottom:"10px",right:"10px",backgroundColor:"#000",color:"#fff",padding:"4px 8px",fontSize:"12px",fontFamily:"monospace",border:"1px solid rgba(255,255,255,0.2)",zIndex:"1000",pointerEvents:"none"}),t.setAttribute(ht,"0"),document.body.appendChild(t);let e="string-fps-tracker-style";if(!document.getElementById(e)){let r=document.createElement("style");r.id=e,r.innerHTML=`
19
+ `,document.head.appendChild(t)}createScrollbar(){this.scrollbar=document.createElement("div"),this.scrollbar.classList.add("scrollbar"),this.thumb=document.createElement("div"),this.thumb.classList.add("thumb"),this.scrollbar.appendChild(this.thumb),document.body.appendChild(this.scrollbar),this.scrollbarStateHorizontal=new Je(this.data,this.scrollbar,this.thumb,this.requestScrollTo),this.scrollbarStateVertical=new tr(this.data,this.scrollbar,this.thumb,this.requestScrollTo),this.scrollbarState=this.scrollbarStateVertical}updateThumb(){this.scrollbarState.updateThumb()}mouseDownEvent(t){this.isDragging=!0,this.scrollbarState.mouseDownEvent(t),document.body.style.userSelect="none",this.scrollbar.classList.add("-touch")}mouseMoveEvent(t){this.isDragging&&this.scrollbarState.mouseMoveEvent(t)}mouseUpEvent(){this.isDragging=!1,document.body.style.userSelect="",this.hideScrollbar(),this.scrollbar.classList.remove("-touch")}showScrollbar(){this.scrollbar.classList.add("-scroll")}hideScrollbar(){this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout(()=>{this.scrollbar.classList.remove("-scroll")},1e3)}};var Et={BEFORE_ELEMENT:"-before-element",AFTER_ELEMENT:"-after-element"};function fs(l){if(!l||!Array.isArray(l.chars)||l.chars.length===0)return[];let t=null;for(let e of l.chars){let r=e.splitClass??[];if(r.length!==0){if(t===null){t=r;continue}if(r.length!==t.length)return[];for(let i=0;i<r.length;i++)if(r[i]!==t[i])return[]}}return t??[]}function mi(l){return l.chars[0]?.token?.meta?.wrappers??[]}function vs(l,t,e){if(e.trimInlineGaps!==!0||!t)return!1;let r=mi(l),i=mi(t);if(r.length===0||i.length===0)return!1;if(r.length!==i.length)return!0;for(let n=0;n<r.length;n++)if(r[n].id!==i[n].id)return!0;return!1}function Zi(l,t,e){let r=document.createDocumentFragment(),i=K(t,"line")||K(t,"charLine")||K(t,"wordLine"),n=0,s=K(t,"char")||K(t,"charLine")||K(t,"charWord"),o=0;l.forEach(p=>o+=p.words.length);let a=0;l.forEach(p=>p.words.forEach(g=>a+=g.chars.length));let d=l.length,c=o,u=new Map;return l.forEach((p,g)=>{let m=g===l.length-1,h=r,f="";i&&(h=document.createElement("span"),h.setAttribute("aria-hidden","true"),h.classList.add("-s-line"),p.isBeforeElement&&h.classList.add(Et.BEFORE_ELEMENT),p.isAfterElement&&h.classList.add(Et.AFTER_ELEMENT),h.style.setProperty("--line-index",String(p.lineIndex)),h.style.setProperty("--word-total",String(p.words.length)),p.fitFontSize!==void 0&&h.style.setProperty("--fit-font-size",String(p.fitFontSize)),hi(h,p.calculatedValues,t));let b=[],y=h;p.words.forEach((v,S)=>{let E=S===p.words.length-1,M=mi(v),C=0;for(;C<b.length&&C<M.length&&b[C].info.id===M[C].id;)C++;for(;b.length>C;)b.pop();y=b.length>0?b[b.length-1].element:h;for(let T=C;T<M.length;T++){let P=M[T],R=document.createElement(P.tag);for(let[B,W]of P.attributes)R.setAttribute(B,W);y.appendChild(R),b.push({info:P,element:R}),y=R}if(v.chars.length===1&&v.chars[0].token.type==="element"){let T=v.chars[0].token.node.cloneNode(!0);y.appendChild(T);return}let I=v.chars.map(T=>T.char).join("");I&&(f+=f.length===0||v.noSpaceBefore?I:` ${I}`);let H=K(t,"word")||K(t,"charWord")||K(t,"wordLine"),w=H?document.createElement("span"):y,_=fs(v);if(H&&(w.setAttribute("aria-hidden","true"),w.classList.add("-s-word"),v.isBeforeElement&&w.classList.add(Et.BEFORE_ELEMENT),v.isAfterElement&&w.classList.add(Et.AFTER_ELEMENT),w.style.setProperty("--word-index",String(v.wordIndexGlobal)),w.style.setProperty("--char-total",String(v.chars.length)),w.setAttribute("data-split-content",I),hi(w,v.calculatedValues,t),_.length&&w.classList.add(..._)),s)v.chars.forEach((T,P)=>{if(T.char===" "||T.char===" ")return;let R=document.createElement("span");R.setAttribute("aria-hidden","true");let B=R;B.classList.add("-s-char"),T.isBeforeElement&&B.classList.add(Et.BEFORE_ELEMENT),T.isAfterElement&&B.classList.add(Et.AFTER_ELEMENT),B.textContent=T.char,B.setAttribute("data-split-content",T.char),B.style.setProperty("--char-index",String(n++));let W=v.chars[P+1];if(W){let z=e.getKerning(T.char,W.char);Math.abs(z)>.01&&(B.style.setProperty("--kerning",`${z.toFixed(2)}px`),B.style.marginRight="var(--kerning)")}hi(B,T.calculatedValues,t);let N=T.splitClass??[];N.length&&(!_.length||!H)&&B.classList.add(...N),w.appendChild(R)});else{let T=document.createTextNode(I);w.appendChild(T)}H&&y.appendChild(w);let k=p.words[S+1],O=k?.noSpaceBefore||vs(v,k,t);i?E?m||h.appendChild(document.createElement("br")):O||w.appendChild(document.createTextNode("\xA0")):!E&&!O&&w.appendChild(document.createTextNode("\xA0"))}),i&&(h.setAttribute("data-split-content",f),r.appendChild(h))}),i&&u.set("--line-global-total",String(d)),s&&u.set("--char-global-total",String(a)),(K(t,"word")||K(t,"charWord")||K(t,"wordLine"))&&u.set("--word-global-total",String(c)),{fragment:r,extraProps:u}}function hi(l,t,e){if(t)for(let r of t){if(!bs(r.type,r.align,e))continue;let i=ys(r.type,r.align);l.style.setProperty(i,String(r.value))}}function bs(l,t,e){let r=e[l]??[];return Array.isArray(r)&&r.some(i=>t.startsWith("random")?i.align.startsWith("random"):i.align===t)}function ys(l,t){let e=t.startsWith("random")?"random":t;return`--${l}-${e}`}function K(l,t){return Array.isArray(l[t])&&l[t].length>0}var Ss=new Set(["img","video","audio","canvas","iframe","object","svg","input","textarea","select","button","area","base","col","embed","hr","link","meta","param","source","track","wbr","picture","table"]);function Ls(l){let t=[];for(let e=0;e<l.attributes.length;e++){let r=l.attributes[e];t.push([r.name,r.value])}return t}var It=0;function Qi(l){It=0;let t=[],e=(i,n)=>{n&&Object.keys(n).length&&(i.meta={...i.meta||{},...n}),t.push(i)},r=(i,n)=>{if(i.nodeType===Node.ELEMENT_NODE){let s=i,o=s.tagName.toLowerCase();if(o==="split-class"){let a=(s.getAttribute("class")??"").split(/\s+/).filter(Boolean),d={...n||{},splitClass:[...n?.splitClass??[],...a]};s.childNodes.forEach(c=>r(c,d));return}if(o==="br"){e({type:"br",id:`br_${It++}`,node:s,tagName:"br"},n);return}if(!Ss.has(o)&&s.childNodes.length>0){let a={id:`wrapper_${It++}`,tag:o,attributes:Ls(s)},d=n?.wrappers??[],c={...n||{},wrappers:[...d,a]};s.childNodes.forEach(u=>r(u,c));return}e({type:"element",id:`el_${It++}`,node:s,tagName:o},n);return}if(i.nodeType===Node.TEXT_NODE){let s=i.nodeValue??"",o=`text_${It++}`;s.trim()?e({type:"text",id:o,node:i,content:s},n):e({type:"space",id:o,node:i,content:s},n);return}e({type:"other",id:`node_${It++}`,node:i},n)};return l.forEach(i=>r(i)),t}var rr=class{ctx;font="";cache={kerning:new Map,charWidth:new Map};constructor(t){let e=document.createElement("canvas");this.ctx=e.getContext("2d"),this.setFontFromElement(t)}setFontFromElement(t){let e=window.getComputedStyle(t),r=`${e.fontStyle} ${e.fontVariant} ${e.fontWeight} ${e.fontSize}/${e.lineHeight} ${e.fontFamily}`;r!==this.font&&(this.font=r,this.ctx.font=this.font,this.cache.kerning.clear(),this.cache.charWidth.clear())}getCharWidth(t){if(this.cache.charWidth.has(t))return this.cache.charWidth.get(t);let e=this.ctx.measureText(t).width;return this.cache.charWidth.set(t,e),e}getKerning(t,e){let r=`${t}${e}`,i=`${this.font}|${r}`;if(this.cache.kerning.has(i))return this.cache.kerning.get(i);let n=this.ctx.measureText(r).width,s=this.getCharWidth(t)+this.getCharWidth(e),o=n-s;return this.cache.kerning.set(i,o),o}measureWord(t){let e=0;for(let r=0;r<t.length;r++){let i=t[r];if(e+=this.getCharWidth(i),r>0){let n=t[r-1];e+=this.getKerning(n,i)}}return e}};function Es(l,t){let e=t.contentWidth,r=l.cloneNode(!0);r.removeAttribute("string"),r.removeAttribute("data-string"),r.removeAttribute("string-split"),r.removeAttribute("data-string-split"),r.removeAttribute("string-id"),r.removeAttribute("data-string-id"),r.removeAttribute("string-inited"),r.classList.remove("-splitted","-inview","-restored"),r.innerHTML=l.getAttribute("string-split-original-html")??l.innerHTML,r.style.setProperty("position","absolute","important"),r.style.setProperty("visibility","hidden","important"),r.style.setProperty("pointer-events","none","important"),r.style.setProperty("left","0","important"),r.style.setProperty("top","0","important"),r.style.setProperty("display","block","important"),r.style.setProperty("width",`${e}px`,"important"),r.style.setProperty("min-width",`${e}px`,"important"),r.style.setProperty("max-width",`${e}px`,"important"),r.style.setProperty("padding","0","important"),r.style.setProperty("border","0","important"),r.style.setProperty("margin","0","important"),r.style.setProperty("transform","none","important"),r.style.setProperty("scale","1","important"),(l.parentElement??document.body).appendChild(r);let n=new Map,s=document.createTreeWalker(l,NodeFilter.SHOW_ALL),o=document.createTreeWalker(r,NodeFilter.SHOW_ALL),a=s.currentNode,d=o.currentNode;for(n.set(a,d);(a=s.nextNode())&&(d=o.nextNode());)n.set(a,d);return{resolveNode(c){return n.get(c)??c},cleanup(){r.remove()}}}var ir=class{id="flex";supports(t,e){return e.display==="flex"||e.display==="inline-flex"}createSource(t,e){return Es(t,e)}};function Ms(){return{resolveNode(l){return l},cleanup(){}}}var nr=class{id="inline-flow";supports(t,e){return e.display!=="flex"&&e.display!=="inline-flex"}createSource(t,e){return Ms()}};var fi=[new ir,new nr];function ws(l){let t=window.getComputedStyle(l),e=l.getBoundingClientRect(),r=parseFloat(t.borderLeftWidth)||0,i=parseFloat(t.borderRightWidth)||0,n=parseFloat(t.paddingLeft)||0,s=parseFloat(t.paddingRight)||0;return Math.max(0,e.width-r-i-n-s)}function xs(l){let t=l.parentElement;for(;t;){let e=window.getComputedStyle(t),r=e.display;if(!(r==="inline"||r==="inline-block"||r==="ruby")){let n=t.getBoundingClientRect(),s=parseFloat(e.borderLeftWidth)||0,o=parseFloat(e.borderRightWidth)||0,a=parseFloat(e.paddingLeft)||0,d=parseFloat(e.paddingRight)||0;return Math.max(0,n.width-s-o-a-d)}t=t.parentElement}return 0}function Ji(l){let t=window.getComputedStyle(l),e=ws(l),r=xs(l),i=t.display==="inline"||t.display==="inline-flex"||t.display==="inline-grid",n=e;return(i&&r>e+1&&!l.style.width||n<=0)&&(n=r),{display:t.display,contentWidth:n,ownContentWidth:e,blockContainerContentWidth:r}}function tn(l,t){return fi.find(e=>e.supports(l,t))??fi[fi.length-1]}var sr=typeof Intl<"u"&&"Segmenter"in Intl?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;function en(l,t){return t.segment!=="visual"?Cs(l):Ps(l)}function rn(l,t){return t.segment!=="visual"||!l||!sr?Array.from(l):Array.from(sr.segment(l),({segment:e})=>e)}function Cs(l){let t=[],e=/\S+/g,r;for(;(r=e.exec(l))!==null;)Ts(r[0],r.index,t);return t}function Ts(l,t,e){let r=0;for(let i=1;i<l.length-1;i++){let n=l[i];if(n==="-"||n==="\u2010"){let s=l.slice(r,i+1),o=t+r;e.push({text:s,start:o,end:o+s.length,noSpaceBefore:e.length>0&&o===e[e.length-1].end}),r=i+1}}if(r<l.length){let i=l.slice(r),n=t+r;e.push({text:i,start:n,end:n+i.length,noSpaceBefore:e.length>0&&n===e[e.length-1].end})}}function Ps(l){let t=As(l),e=[],r=null,i=()=>{r&&(e.push({text:r.text,start:r.start,end:r.end,noSpaceBefore:e.length>0&&r.start===e[e.length-1].end}),r=null)};return t.forEach(({segment:n,index:s})=>{if(/\s/u.test(n)){i();return}let o=Os(n),a=s+n.length;if(o==="visual"){if(ks(n)){if(r){r.text+=n,r.end=a;return}if(e.length>0&&s===e[e.length-1].end){e[e.length-1].text+=n,e[e.length-1].end=a;return}}i(),e.push({text:n,start:s,end:a,noSpaceBefore:e.length>0&&s===e[e.length-1].end});return}let d=r!==null&&(r.text.endsWith("-")||r.text.endsWith("\u2010"));if(!r||r.end!==s||d){i(),r={text:n,start:s,end:a};return}r.text+=n,r.end=a}),i(),e}function As(l){if(!sr){let t=[],e=0;return Array.from(l).forEach(r=>{t.push({segment:r,index:e}),e+=r.length}),t}return Array.from(sr.segment(l),({segment:t,index:e})=>({segment:t,index:e}))}function ks(l){return/[\)\]\})》」』】〕〗〙〛〉》〞〟›»"'\u3001\u3002\uFF0C\uFF0E\uFF01\uFF1F\uFF1A\uFF1B\u2026]/u.test(l)}function Os(l){return/\p{Script=Han}|\p{Script=Hiragana}|\p{Script=Katakana}/u.test(l)?"visual":/[\p{Script=Latin}\p{Script=Cyrillic}\p{Script=Greek}\p{Script=Hangul}\p{Number}]/u.test(l)||/[\p{Mark}\p{Connector_Punctuation}\p{Dash_Punctuation}'’._+#&/@]/u.test(l)?"word":"visual"}function Ds(l,t){return!l?.length&&!t?.length?!0:!l||!t||l.length!==t.length?!1:l.every((e,r)=>e.id===t[r].id)}function Is(l,t){return l.length!==t.length?!1:l.every((e,r)=>e===t[r])}function on(l,t,e,r){let i=document.createRange(),n=[],s=!1,o=!1,a=!1,d,c=[];try{for(let u=0;u<l.length;u++){let p=l[u];switch(p.type){case"br":{n.push({token:p,rect:new DOMRect(0,0,0,0)}),o=!0,a=!1,d=void 0,c=[],s=!1;break}case"space":o=!Rs(l,u,r);break;case"other":a=!1,o=!1;break;case"text":{let g=p.content,m=/^\s/.test(g),h=p.meta?.wrappers??[],f=p.meta?.splitClass??[],b=en(g,r),y=0;for(let v of b){let S=v.text,E=new DOMRect(0,0,0,0),M=t.resolveNode(p.node);try{i.setStart(M,v.start),i.setEnd(M,v.end),E=i.getBoundingClientRect()}catch{}let C=y===0&&!m&&!o&&a,A=y>0||Ds(d,h),I=y===0&&!Is(c,f),H=e.measureWord(S),w=new DOMRect(E.x,E.y,H,E.height),_={...p.meta||{},joinPrev:C&&A&&!I,noSpaceBefore:v.noSpaceBefore||C&&(!A||I)};s&&y===0&&(_.isAfterElement=!0,s=!1),n.push({token:{type:"text",id:"",node:p.node,content:S,meta:_},rect:w,browserWidth:E.width}),y++}y>0&&(o=/\s$/.test(g),a=!0,d=h,c=f);break}case"element":{let g=t.resolveNode(p.node).getBoundingClientRect();n.push({token:p,rect:g,browserWidth:g.width});let m=n[n.length-2];m?.token.type==="text"&&(m.token.meta={...m.token.meta||{},isBeforeElement:!0}),s=!0,a=!1,c=[],o=!1;break}}}}finally{i.detach?.(),t.cleanup()}return n}function Rs(l,t,e){if(e.trimInlineGaps!==!0)return!1;let r=l[t];if(r?.type!=="space"||!/[\n\r\t]/.test(r.content)&&r.content.length<=1)return!1;let i=Hs(l,t-1),n=Bs(l,t+1);if(!i||!n||!nn(i)||!nn(n))return!1;let s=sn(i),o=sn(n);return s.length===0||o.length===0?!1:s.join("|")!==o.join("|")}function Hs(l,t){for(let e=t;e>=0;e--){let r=l[e];if(!(r.type==="space"||r.type==="other"))return r}return null}function Bs(l,t){for(let e=t;e<l.length;e++){let r=l[e];if(!(r.type==="space"||r.type==="other"))return r}return null}function nn(l){return l.type==="text"||l.type==="element"}function sn(l){return(l.meta?.wrappers??[]).map(e=>e.id)}function an(l,t,e,r){let i=Ji(t),s=tn(t,i).createSource(t,i);return on(l,s,e,r)}var ln=5;function dn(l,t,e,r){let i=[],n=null,s=0,o=0,a=0,d=0;return l.forEach(c=>{let u=c.token,p=u.meta?.isBeforeElement??!1,g=u.meta?.isAfterElement??!1;if(u.type==="br"){n=null;return}if(u.type==="text"){let m=u.content,h=u.meta?.splitClass??[],f=!!u.meta?.joinPrev,b=[],y=0,v=rn(m,r);for(let w=0;w<v.length;w++){let _=v[w],k=w>0?v[w-1]:null,O=e.getCharWidth(_),T=k?e.getKerning(k,_):0;y+=T;let P=new DOMRect(c.rect.left+y,c.rect.top,O,c.rect.height),R={char:_,rect:P,token:u,charIndexInWord:w,charIndexInLine:0,charIndexGlobal:o++};h.length&&(R.splitClass=h),b.push(R),y+=O}if(b.length>0){let w=b[b.length-1];p&&(w.isBeforeElement=!0),g&&(w.isAfterElement=!0)}let S=Math.round(c.rect.top),E=Math.round(s);if((!n||Math.abs(S-E)>ln)&&(s=S,n={words:[],rect:c.rect,lineIndex:i.length},d=0,i.push(n)),!n)return;let C=c.rect.left+(c.browserWidth??c.rect.width);if(f&&n.words.length>0){let w=n.words[n.words.length-1],_=n.words.reduce((O,T)=>O+T.chars.length,0),k=w.chars.length;b.forEach((O,T)=>{O.charIndexInLine=_+T,O.charIndexInWord=k+T}),w.chars.push(...b),w.rect=or([w.rect,c.rect]),n.rect=or(n.words.map(O=>O.rect)),d=Math.max(d,C),n.fitWidth=d-n.rect.left,n.browserWordWidthSum=(n.browserWordWidthSum??0)+(c.browserWidth??c.rect.width),p&&(w.isBeforeElement=!0),g&&(w.isAfterElement=!0);return}let A=n.words.length,I=n.words.reduce((w,_)=>w+_.chars.length,0);b.forEach((w,_)=>w.charIndexInLine=I+_);let H={chars:b,rect:c.rect,wordIndexGlobal:a++,wordIndexInLine:A,isBeforeElement:p,isAfterElement:g,noSpaceBefore:!!u.meta?.noSpaceBefore};n.words.push(H),n.rect=or(n.words.map(w=>w.rect)),d=Math.max(d,C),n.fitWidth=d-n.rect.left,n.browserWordWidthSum=(n.browserWordWidthSum??0)+(c.browserWidth??c.rect.width),p&&(n.isBeforeElement=!0),g&&(n.isAfterElement=!0);return}if(u.type==="element"){let m=c.rect,h=Math.round(m.top),f=Math.round(s);if((!n||Math.abs(h-f)>ln)&&(s=h,n={words:[],rect:m,lineIndex:i.length},d=0,i.push(n)),!n)return;let y=n.words.length,v=n.words.reduce((M,C)=>M+C.chars.length,0),E={chars:[{char:"[E]",rect:m,token:u,charIndexInWord:0,charIndexInLine:v,charIndexGlobal:o++}],rect:m,wordIndexGlobal:a++,wordIndexInLine:y,isBeforeElement:!1,isAfterElement:!1};n.words.push(E),n.rect=or(n.words.map(M=>M.rect)),d=Math.max(d,c.rect.left+(c.browserWidth??c.rect.width)),n.fitWidth=d-n.rect.left,n.browserWordWidthSum=(n.browserWordWidthSum??0)+(c.browserWidth??c.rect.width)}}),i}function or(l){if(l.length===0)return new DOMRect(0,0,0,0);let t=Math.min(...l.map(n=>n.left)),e=Math.min(...l.map(n=>n.top)),r=Math.max(...l.map(n=>n.right)),i=Math.max(...l.map(n=>n.bottom));return new DOMRect(t,e,r-t,i-e)}var ar=class extends x{lastSplitWidth=new WeakMap;constructor(t){super(t),this.htmlKey="split",this.permissions.mobile.rebuild.height=!1,this.permissions.mobile.rebuild.width=!1}onInit(){let t=()=>{this.objectsOnPage.forEach(e=>{let r=e.htmlElement;if(!r)return;let i=this.getSplitOptions(r);this.needsForcedRebuildOnFontLoad(i)&&this.lastSplitWidth.delete(r),this.onObjectConnected(e)})};document.fonts.ready.then(t),document.fonts.addEventListener("loadingdone",t)}onObjectDisconnected(t){t.htmlElement&&this.lastSplitWidth.delete(t.htmlElement)}onResizeWidth(){this.objectsOnPage.forEach(t=>{let e=t.htmlElement;if(!e)return;let r=this.getSplitOptions(e);this.needsWidthRebuild(r)&&this.onObjectConnected(t)})}onObjectConnected(t){let e=t.htmlElement;if(!e)return;let r=this.isDebugEnabled(e),i=e.classList.contains("-splitted"),n=e.getAttribute("string-split-original-html"),s=e.getAttribute("string-split-original");n===null&&s!==null&&i&&(n=s,s=this.extractTextContent(n),e.setAttribute("string-split-original-html",n),e.setAttribute("string-split-original",s)),(!i||n===null||s===null)&&(n=this.escapeAttribute(e.innerHTML),s=e.textContent??"",e.setAttribute("string-split-original-html",n),e.setAttribute("string-split-original",s)),i&&e.classList.remove("-splitted");let o=window.getComputedStyle(e),a=this.getElementContentWidth(e,o);r&&this.logConnectionStart(e,{isAlreadySplit:i,currentContentWidth:a,lastWidth:this.lastSplitWidth.get(e),originalHtml:n,originalText:s});let d=this.lastSplitWidth.get(e);if(i&&d!==void 0&&Math.abs(a-d)<1){i&&e.classList.add("-splitted");return}this.lastSplitWidth.set(e,a);try{t.htmlElement.innerHTML=n;let c=e.getAttribute("string-split")??e.getAttribute("data-string-split")??"",u=this.tools.optionsParser.process({attributeValue:c}),{fragment:p,result:g,extraProps:m}=this.split(e,u,r);t.setProperty("nodes",p.childNodes),e.setAttribute("aria-label",s),e.innerHTML="",e.appendChild(g),this.applyFlexLineBreaks(e,u),e.classList.add("-splitted"),m.forEach((f,b)=>{e.style.setProperty(b,f)}),r&&this.logRenderedState(e,u,m);let h=e.getAttribute("string-split-restore-after");h&&!isNaN(Number(h))&&setTimeout(()=>{e.innerHTML=n,e.classList.add("-restored")},Number(h))}finally{e.classList.contains("-splitted")||e.classList.add("-splitted")}}extractTextContent(t){let e=document.createElement("div");return e.innerHTML=t,e.textContent??""}getSplitOptions(t){let e=t.getAttribute("string-split")??t.getAttribute("data-string-split")??"";return this.tools.optionsParser.process({attributeValue:e})}hasLineDrivenSplit(t){return(t.line?.length??0)>0||(t.wordLine?.length??0)>0||(t.charLine?.length??0)>0}needsWidthRebuild(t){return this.hasLineDrivenSplit(t)||t.fit===!0}needsForcedRebuildOnFontLoad(t){return this.needsWidthRebuild(t)}getDebugStoreKey(t){let e=t.getAttribute("string-debug-save")??t.getAttribute("data-string-debug-save")??"";return e?e==="true"||e==="1"?this.getDebugLabel(t):e:null}writeDebugRecord(t,e,r){let i=this.getDebugStoreKey(t);if(!i)return;let n=window,s=n.__stringSplitDebug??={},o=s[i]??{label:this.getDebugLabel(t),timestamp:Date.now()};o.timestamp=Date.now(),o[e]=r,s[i]=o}isDebugEnabled(t){let e=t.getAttribute("string-debug")??t.getAttribute("data-string-debug")??"";return e?e===""||e==="true"||e==="1"||e.includes("split")||e==="all":!1}getDebugLabel(t){return t.getAttribute("string-id")??t.id??t.className??t.tagName.toLowerCase()}logConnectionStart(t,e){let r=window.getComputedStyle(t),i=this.captureBaselineSnapshot(t,r),n={text:e.originalText,html:e.originalHtml,baseline:i,flags:{isAlreadySplit:e.isAlreadySplit,display:r.display,whiteSpace:r.whiteSpace,position:r.position},widths:{currentContentWidth:e.currentContentWidth,lastWidth:e.lastWidth,rectWidth:t.getBoundingClientRect().width,clientWidth:t.clientWidth,parentContentWidth:this.getBlockContainerContentWidth(t)}};this.writeDebugRecord(t,"connect",n)}captureBaselineSnapshot(t,e){let r=t.getBoundingClientRect(),i=parseFloat(e.lineHeight);return{rectWidth:Number(r.width.toFixed(2)),rectHeight:Number(r.height.toFixed(2)),fontSize:Number(parseFloat(e.fontSize).toFixed(2)),lineHeight:Number.isFinite(i)?Number(i.toFixed(2)):e.lineHeight,estimatedLineCount:Number.isFinite(i)&&i>0?Number((r.height/i).toFixed(2)):null}}logSplitAnalysis(t,e,r,i){let n={tokens:e.map(s=>({type:s.type,text:this.getTokenDebugText(s),wrappers:s.meta?.wrappers?.map(o=>o.tag)??[]})),measured:r.map(s=>({type:s.token.type,text:this.getTokenDebugText(s.token),left:Number(s.rect.left.toFixed(2)),top:Number(s.rect.top.toFixed(2)),width:Number(s.rect.width.toFixed(2)),browserWidth:Number((s.browserWidth??s.rect.width).toFixed(2))})),layoutLines:i.map(s=>({index:s.lineIndex,text:s.words.map(o=>o.chars.map(a=>a.char).join("")).join(" "),wordCount:s.words.length,rect:{left:Number(s.rect.left.toFixed(2)),top:Number(s.rect.top.toFixed(2)),width:Number(s.rect.width.toFixed(2)),height:Number(s.rect.height.toFixed(2))},fitWidth:Number((s.fitWidth??s.rect.width).toFixed(2))}))};this.writeDebugRecord(t,"measure",n)}getTokenDebugText(t){return"content"in t?t.content:"tagName"in t?t.tagName:"#other"}logRenderedState(t,e,r){let i=window.getComputedStyle(t),n=Array.from(t.querySelectorAll(".-s-line")),s={mode:{attr:t.getAttribute("string-split")??t.getAttribute("data-string-split"),line:e.line?.length??0,wordLine:e.wordLine?.length??0,charLine:e.charLine?.length??0},root:{display:i.display,flexWrap:i.flexWrap,rectWidth:Number(t.getBoundingClientRect().width.toFixed(2)),rectHeight:Number(t.getBoundingClientRect().height.toFixed(2)),childCount:t.children.length,extraProps:Object.fromEntries(r.entries())},children:Array.from(t.children).map(o=>{let a=o,d=a.getBoundingClientRect();return{tag:a.tagName.toLowerCase(),className:a.className,text:a.textContent?.replace(/\s+/g," ").trim(),width:Number(d.width.toFixed(2)),height:Number(d.height.toFixed(2))}}),lineNodes:n.map((o,a)=>{let d=o.getBoundingClientRect(),c=window.getComputedStyle(o);return{index:a,text:o.getAttribute("data-split-content"),top:Number(d.top.toFixed(2)),left:Number(d.left.toFixed(2)),width:Number(d.width.toFixed(2)),height:Number(d.height.toFixed(2)),display:c.display,lineHeight:c.lineHeight,scale:c.scale,transform:c.transform}})};this.writeDebugRecord(t,"rendered",s)}applyFlexLineBreaks(t,e){if(!((e.line?.length??0)>0||(e.wordLine?.length??0)>0||(e.charLine?.length??0)>0))return;let i=window.getComputedStyle(t).display;if(i!=="flex"&&i!=="inline-flex")return;let n=Array.from(t.children).filter(s=>s.classList.contains("-s-line"));if(!(n.length<2))for(let s=0;s<n.length-1;s++){let o=document.createElement("span");o.setAttribute("aria-hidden","true"),o.classList.add("-s-line-break"),o.style.flexBasis="100%",o.style.width="0",o.style.height="0",o.style.overflow="hidden",o.style.pointerEvents="none",n[s].after(o)}}getBlockContainerContentWidth(t){let e=t.parentElement;for(;e;){let r=window.getComputedStyle(e),i=r.display;if(!(i==="inline"||i==="inline-block"||i==="ruby")){let s=e.getBoundingClientRect().width||e.clientWidth;return Math.max(0,s-(parseFloat(r.paddingLeft)||0)-(parseFloat(r.paddingRight)||0))}e=e.parentElement}return 0}getElementContentWidth(t,e=window.getComputedStyle(t)){let r=(parseFloat(e.paddingLeft)||0)+(parseFloat(e.paddingRight)||0),i=t.clientWidth||t.getBoundingClientRect().width,n=this.getBlockContainerContentWidth(t);return n>i+1&&!t.style.width&&(e.display==="inline"||e.display==="inline-flex"||e.display==="inline-grid")?Math.max(0,n-r):i>0?Math.max(0,i-r):Math.max(0,n-r)}split(t,e,r=!1){let i=new rr(t),n=document.createDocumentFragment();t.childNodes.forEach(p=>n.appendChild(p.cloneNode(!0)));let s=Qi(t.childNodes),o=an(s,t,i,e),a=dn(o,t,i,e);r&&this.logSplitAnalysis(t,s,o,a);let d=e.fit?this.getFitContext(a,t):null,c=d?this.applyFit(a,e,d):new Map;this.applyCalculatedValues(a,e);let u=Zi(a,e,i);return c.forEach((p,g)=>u.extraProps.set(g,p)),d&&this.refineFitFontSize(t,u.fragment,u.extraProps,a,e,d),{fragment:n,result:u.fragment,extraProps:u.extraProps}}getFitContext(t,e){let r=window.getComputedStyle(e),i=parseFloat(r.fontSize);if(!i)return null;let n=this.getElementContentWidth(e,r);if(n<=0)return null;let s=0;for(let d of t){let c=d.fitWidth??d.rect.width;c>s&&(s=c)}if(s<=0)return null;let o=n;if(Math.abs(n-s)<2&&e.parentElement){let d=window.getComputedStyle(e.parentElement),c=e.parentElement.clientWidth-(parseFloat(d.paddingLeft)||0)-(parseFloat(d.paddingRight)||0);c>n&&(o=c)}let a=parseFloat(r.lineHeight)||0;return{currentFontSize:i,contentWidth:o,lineHeightPx:a}}applyFit(t,e,r){let i=new Map,{currentFontSize:n,contentWidth:s}=r,o=(e.line?.length??0)>0||(e.wordLine?.length??0)>0||(e.charLine?.length??0)>0,a=(e.char?.length??0)>0||(e.charLine?.length??0)>0||(e.charWord?.length??0)>0;if(o)for(let d of t){let c=d.fitWidth??d.rect.width;c>0&&(d.fitFontSize=this.computeFitFontSize(n,s,c,a?d.browserWordWidthSum:void 0))}else{let d=t.reduce((p,g)=>(g.fitWidth??g.rect.width)>(p.fitWidth??p.rect.width)?g:p,t[0]),c=d.fitWidth??d.rect.width,u=this.computeFitFontSize(n,s,c,a?d.browserWordWidthSum:void 0);i.set("--fit-font-size",String(Math.floor(u)))}return i}refineFitFontSize(t,e,r,i,n,s){let o=(n.line?.length??0)>0||(n.wordLine?.length??0)>0||(n.charLine?.length??0)>0,a=(n.char?.length??0)>0||(n.charLine?.length??0)>0||(n.charWord?.length??0)>0,d=t.innerHTML;try{if(t.innerHTML="",t.appendChild(e.cloneNode(!0)),o){let c=Array.from(t.querySelectorAll(".-s-line")),u=Array.from(e.querySelectorAll(".-s-line"));c.forEach((p,g)=>{let m=u[g];if(!m)return;let h=parseFloat(m.style.getPropertyValue("--fit-font-size"));if(!h)return;let f=this.solveRenderedFitFontSize(p,s.currentFontSize,h,s.contentWidth,a);f&&(i[g].fitFontSize=f,m.style.setProperty("--fit-font-size",String(Math.floor(f))))})}else{let c=parseFloat(r.get("--fit-font-size")??"");if(!c)return;let u=this.solveRenderedFitFontSize(t,s.currentFontSize,c,s.contentWidth,a);if(!u)return;let p=Math.floor(u);r.set("--fit-font-size",String(p));let{lineHeightPx:g,currentFontSize:m,contentWidth:h}=s;if(g>0&&m>0){let f=g*(p/m);f>0&&(r.set("--fit-scale-y",String(window.innerHeight/f)),r.set("--fit-aspect-ratio",String(h/f)))}}}finally{t.innerHTML=d}}solveRenderedFitFontSize(t,e,r,i,n){if(!Number.isFinite(e)||!Number.isFinite(r)||e<=0||r<=0)return null;let s=this.measureScopeAtFontSize(t,n,e);if(s<=0)return null;if(Math.abs(i-s)<.01)return e;let o=Math.abs(r-e)<.01?s:this.measureScopeAtFontSize(t,n,r);if(o<=0)return e*(i/s);let a=(o-s)/(r-e);if(!Number.isFinite(a)||Math.abs(a)<1e-4)return e*(i/s);let d=e+(i-s)/a;return!Number.isFinite(d)||d<=0?null:d}measureScopeAtFontSize(t,e,r){if(e){let s=Array.from(t.querySelectorAll(".-s-char")),o=s.map(d=>d.style.fontSize);s.forEach(d=>{d.style.fontSize=`${r}px`}),t.offsetWidth;let a=this.measureCharScopeWidth(t);return s.forEach((d,c)=>{d.style.fontSize=o[c]}),a}let i=t.style.fontSize;t.style.fontSize=`${r}px`,t.offsetWidth;let n=this.measureContentWidth(t);return t.style.fontSize=i,n}measureCharScopeWidth(t){let e=0;Array.from(t.querySelectorAll(".-s-char")).forEach(o=>{let a=o.getBoundingClientRect(),d=window.getComputedStyle(o);e+=a.width+(parseFloat(d.marginLeft)||0)+(parseFloat(d.marginRight)||0)});let i=document.createTreeWalker(t,NodeFilter.SHOW_TEXT),n=i.nextNode();for(;n;){let o=n.parentElement,a=!!o?.closest(".-s-char"),d=!!o&&!o.classList.contains("-s-char")&&!o.classList.contains("-s-word")&&!o.classList.contains("-s-line")&&!o.querySelector(".-s-char, .-s-word, .-s-line");if(!a&&!d&&n.textContent?.length){let c=document.createRange();c.selectNodeContents(n),e+=c.getBoundingClientRect().width}n=i.nextNode()}return Array.from(t.querySelectorAll("*")).filter(o=>{let a=o;return!a.classList.contains("-s-char")&&!a.classList.contains("-s-word")&&!a.classList.contains("-s-line")&&!a.querySelector(".-s-char, .-s-word, .-s-line")}).forEach(o=>{e+=o.getBoundingClientRect().width}),e}measureContentWidth(t){if(!t.childNodes.length)return t.getBoundingClientRect().width;let e=document.createRange();return e.selectNodeContents(t),e.getBoundingClientRect().width}computeFitFontSize(t,e,r,i){let n=i!==void 0?r-i:0,s=r-n;return s<=0?t*(e/r):t*(e-n)/s}computeValue(t,e,r){if(t.align.startsWith("random")){let i=t.random?.min??0,n=t.random?.max??r-1;return Math.floor(Math.random()*(n-i+1))+i}switch(t.align){case"start":return e;case"end":return r-e-1;case"center":{let i=Math.floor((r-1)/2);return Math.abs(e-i)}default:return e}}applyCalculatedValues(t,e){let r=s=>s.words.reduce((o,a)=>o+a.chars.length,0),i=t.reduce((s,o)=>s+o.words.length,0),n=t.reduce((s,o)=>s+o.words.reduce((a,d)=>a+d.chars.length,0),0);t.forEach((s,o)=>{e.line&&(s.calculatedValues=e.line.map(a=>({type:"line",align:a.align,value:this.computeValue(a,o,t.length)}))),s.words.forEach(a=>{e.word&&(a.calculatedValues=e.word.map(c=>({type:"word",align:c.align,value:this.computeValue(c,a.wordIndexGlobal,i)}))),e.wordLine&&(a.calculatedValues??=[],a.calculatedValues.push(...e.wordLine.map(c=>({type:"wordLine",align:c.align,value:this.computeValue(c,a.wordIndexInLine,s.words.length)}))));let d=r(s);a.chars.forEach(c=>{let u=[];e.char&&u.push(...e.char.map(p=>({type:"char",align:p.align,value:this.computeValue(p,c.charIndexGlobal,n)}))),e.charWord&&u.push(...e.charWord.map(p=>({type:"charWord",align:p.align,value:this.computeValue(p,c.charIndexInWord,a.chars.length)}))),e.charLine&&u.push(...e.charLine.map(p=>({type:"charLine",align:p.align,value:this.computeValue(p,c.charIndexInLine,d)}))),c.calculatedValues=u})})})}escapeAttribute(t){return t.replace(/src="(https?:\/\/[^"\s]+)"/g,"src=$1")}};var lr=class extends x{canvas;context;history=[];maxPoints=0;height=0;value=0;target=0;constructor(t){super(t),this._type=2}onInit(){this.initCanvas(),this.maxPoints=this.canvas.width}onScroll(t){let e=Math.abs(t.scroll.displacement);this.value=e,this.history.push(e),this.history.length>this.maxPoints&&this.history.shift(),this.draw()}draw(){let t=this.context,e=this.canvas.width,r=this.canvas.height;t.clearRect(0,0,e,r),t.strokeStyle="red",t.lineWidth=2,t.beginPath(),this.history.forEach((i,n)=>{let s=n,o=r-i*this.height;n===0?t.moveTo(s,o):t.lineTo(s,o)}),t.stroke()}initCanvas(){let t=document.createElement("canvas"),e=window.innerWidth*.5;this.height=window.innerHeight/15-20,t.width=e,t.height=this.height,Object.assign(t.style,{position:"fixed",bottom:`${window.innerHeight/20+10}px`,left:"50%",transform:"translateX(-50%)",backgroundColor:"#000000",border:"1px solid rgba(255, 255, 255, 0.2)",zIndex:"1000",pointerEvents:"none"}),this.canvas=t,this.context=t.getContext("2d"),document.body.appendChild(t)}setTarget(t){this.target=t}clear(){this.canvas.remove(),this.history=[]}};var ht="data-fps",dr=class extends x{displayElement=null;intervalId=0;frameCount=0;fpsElements=new Set;observer=null;lastFps=-1;constructor(t){super(t),this._type=2}onInit(){this.data.system.fpsTracker&&this.createDisplayElement(),this.events.on("tracker:fps:visible",this.onVisibilityChange.bind(this)),this.scanElements(),this.observeDOM(),this.intervalId=window.setInterval(()=>{this.updateFPS(this.frameCount),this.frameCount=0},1e3)}onFrame(t){this.frameCount++}destroy(){clearInterval(this.intervalId),this.observer?.disconnect(),this.removeDisplayElement(),this.fpsElements.clear()}onVisibilityChange(t){t?this.createDisplayElement():this.removeDisplayElement()}removeDisplayElement(){this.displayElement?.remove(),this.displayElement=null}updateFPS(t){if(t===this.lastFps)return;this.lastFps=t;let e=String(t);for(let r of this.fpsElements)r.isConnected&&r.setAttribute(ht,e);this.displayElement&&this.displayElement.setAttribute(ht,e),this.events.emit("fps",t)}scanElements(){this.fpsElements.clear(),document.querySelectorAll(`[${ht}]`).forEach(t=>{t!==this.displayElement&&this.fpsElements.add(t)})}observeDOM(){this.observer=new MutationObserver(t=>{let e=!1;for(let r of t){for(let i of Array.from(r.addedNodes))if(i.nodeType===Node.ELEMENT_NODE){let n=i;n.hasAttribute(ht)&&(e=!0),n.querySelector(`[${ht}]`)&&(e=!0)}for(let i of Array.from(r.removedNodes))i.nodeType===Node.ELEMENT_NODE&&this.fpsElements.delete(i)}e&&this.scanElements()}),this.observer.observe(document.body,{childList:!0,subtree:!0})}createDisplayElement(){if(this.displayElement)return;let t=document.createElement("div");Object.assign(t.style,{position:"fixed",bottom:"10px",right:"10px",backgroundColor:"#000",color:"#fff",padding:"4px 8px",fontSize:"12px",fontFamily:"monospace",border:"1px solid rgba(255,255,255,0.2)",zIndex:"1000",pointerEvents:"none"}),t.setAttribute(ht,"0"),document.body.appendChild(t);let e="string-fps-tracker-style";if(!document.getElementById(e)){let r=document.createElement("style");r.id=e,r.innerHTML=`
20
20
  [${ht}]::before {
21
21
  content: 'FPS: ' attr(${ht});
22
22
  }
@@ -1280,7 +1280,7 @@ ${Fs(i," ")}
1280
1280
  }`}function Bt(){if(typeof document>"u")return null;let l="string-devtools-shared-styles",t=document.getElementById(l);if(t instanceof HTMLStyleElement)return t;let e=document.createElement("style");return e.id=l,e.textContent=pn,document.head.appendChild(e),e}function Vs(){return typeof window<"u"&&typeof window.matchMedia=="function"}function Ws(){return Vs()?window.matchMedia("(pointer: coarse)").matches||window.matchMedia("(any-pointer: coarse)").matches:!1}function ot(l=typeof window<"u"?window.innerWidth:1024){let t=Ws(),e=l<=1024||t;return{coarsePointer:t,compact:e}}var Si="";function Ns(l){let t=(l??"").trim();return t?encodeURIComponent(t):""}function Li(l){Si=Ns(l)}function it(l){return Si?`${l}::${Si}`:l}var zs="string-devtools:dock",Gs=600,gn=12,$s="[data-stdg-dock]",Us="[data-stdg-dock-sub-badges]";function hn(l){if(!l)return"";let t=[];return l.ctrlKey&&t.push("Ctrl"),l.altKey&&t.push("Alt"),l.shiftKey&&t.push("Shift"),l.metaKey&&t.push("Meta"),t.push(l.key.length===1?l.key.toUpperCase():l.key),t.join("+")}var Sr=class{root;mainButton;itemsWrap;toolsWrap;fpsSeparator;fpsElement;entries=new Map;collapsed=!1;suppressPersist=!1;preferences;onKeydownBind;onResizeBind;constructor(){Bt(),this.cleanupExistingDockArtifacts(),this.preferences=this.loadPreferences(),this.onResizeBind=()=>{window.requestAnimationFrame(()=>this.handleViewportChange())},this.onKeydownBind=e=>{let r=e.target;r&&(r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement||r instanceof HTMLSelectElement||r.isContentEditable)||e.shiftKey&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.code==="KeyS"&&(e.preventDefault(),this.setCollapsed(!this.collapsed))},window.addEventListener("keydown",this.onKeydownBind),window.addEventListener("resize",this.onResizeBind),this.root=document.createElement("div"),this.root.setAttribute("data-stdg",""),this.root.setAttribute("data-stdg-dock",""),this.root.setAttribute("data-collapsed",this.preferences.collapsed?"true":"false"),this.mainButton=this.createMainButton(),this.itemsWrap=document.createElement("div"),this.itemsWrap.setAttribute("data-stdg-dock-list",""),this.toolsWrap=document.createElement("div"),this.toolsWrap.setAttribute("data-stdg-dock-tools",""),this.fpsSeparator=this.createSeparator(),this.fpsSeparator.setAttribute("data-stdg-dock-fps-separator",""),this.fpsElement=document.createElement("div"),this.fpsElement.setAttribute("data-string-defguides-doc-fps",""),this.fpsElement.title="Current FPS";let t=document.createElement("span");t.textContent="0",this.fpsElement.appendChild(t),this.root.appendChild(this.mainButton),this.itemsWrap.appendChild(this.toolsWrap),this.itemsWrap.appendChild(this.fpsSeparator),this.itemsWrap.appendChild(this.fpsElement),this.root.appendChild(this.itemsWrap),(document.body??document.documentElement).appendChild(this.root),this.setCollapsed(this.preferences.collapsed,!1)}add(t){if(this.entries.has(t.id))return;this.applyStoredActiveState(t);let e=document.createElement("button");e.type="button",e.setAttribute("data-stdg",""),e.setAttribute("data-stdg-button",""),e.setAttribute("data-stdg-button-icon-20",""),e.setAttribute("data-devguides-id",t.id);let r=hn(t.hotkey),i=r?`${t.label} (${r})`:t.label;e.setAttribute("aria-label",i),e.innerHTML=V(20,t.icon),e.title=i,e.addEventListener("click",()=>{let c=!t.getState().active;if(t.setActive(c),!t.subscribe){let u=t.getState();this.renderButton(e,t.label,t.hotkey,u),this.persistActiveState(t.id,u.active)}});let n=document.createElement("div");n.setAttribute("data-stdg",""),n.setAttribute("data-stdg-dock-slot",""),n.setAttribute("data-devguides-slot",t.id),n.appendChild(e);let s=null;t.subBadges&&t.subBadges.length>0&&(n.setAttribute("data-has-sub-badges",""),s=this.createSubBadgeGroup(t));let o=[];s&&o.push(...this.attachSubBadges(n,s));let a=t.subscribe?t.subscribe(c=>{this.renderButton(e,t.label,t.hotkey,c),this.syncSubBadgeState(n,s,c.active),this.persistActiveState(t.id,c.active)}):null;this.entries.set(t.id,{definition:t,button:e,slot:n,subBadges:s,unsubscribe:a,cleanup:o}),this.toolsWrap.appendChild(n),this.sortButtons();let d=t.getState();this.renderButton(e,t.label,t.hotkey,d),this.syncSubBadgeState(n,s,d.active),this.persistActiveState(t.id,d.active)}attachSubBadges(t,e){let r=[];(document.body??document.documentElement).appendChild(e);let i=!1,n=null,s=null,o=0,a=0,d=!1,c=P=>{i!==P&&(i=P,e.setAttribute("data-open",P?"true":"false"),P&&this.positionSubBadges(t,e))},u=()=>ot(window.innerWidth).compact,p=()=>{n!==null&&(window.clearTimeout(n),n=null),s=null},g=()=>{p(),d&&window.setTimeout(()=>{d=!1},0)},m=()=>{window.setTimeout(()=>{t.matches(":hover")||e.matches(":hover")||c(!1)},60)},h=()=>{u()||c(!0)};t.addEventListener("pointerenter",h),r.push(()=>t.removeEventListener("pointerenter",h));let f=()=>{u()||m()};t.addEventListener("pointerleave",f),r.push(()=>t.removeEventListener("pointerleave",f));let b=()=>{u()||c(!0)};e.addEventListener("pointerenter",b),r.push(()=>e.removeEventListener("pointerenter",b));let y=()=>{u()||m()};e.addEventListener("pointerleave",y),r.push(()=>e.removeEventListener("pointerleave",y));let v=()=>c(!1);e.addEventListener("string-devtools-sub-badge-action",v),r.push(()=>e.removeEventListener("string-devtools-sub-badge-action",v));let S=P=>{u()&&(P.target instanceof HTMLElement&&P.target.closest("[data-stdg-dock-sub-badge]")||(p(),s=P.pointerId,o=P.clientX,a=P.clientY,n=window.setTimeout(()=>{n=null,d=!0,c(!0)},Gs)))};t.addEventListener("pointerdown",S),r.push(()=>t.removeEventListener("pointerdown",S));let E=P=>{if(!u()||n===null||P.pointerId!==s)return;let R=Math.abs(P.clientX-o),B=Math.abs(P.clientY-a);(R>gn||B>gn)&&p()};t.addEventListener("pointermove",E),r.push(()=>t.removeEventListener("pointermove",E)),t.addEventListener("pointerup",g),r.push(()=>t.removeEventListener("pointerup",g)),t.addEventListener("pointercancel",g),r.push(()=>t.removeEventListener("pointercancel",g));let M=()=>{u()&&p()};t.addEventListener("pointerleave",M),r.push(()=>t.removeEventListener("pointerleave",M));let C=P=>{!u()||!d||P.preventDefault()};t.addEventListener("contextmenu",C),r.push(()=>t.removeEventListener("contextmenu",C));let A=P=>{u()&&P.preventDefault()};t.addEventListener("selectstart",A),r.push(()=>t.removeEventListener("selectstart",A));let I=P=>{!u()||!d||(d=!1,P.preventDefault(),P.stopImmediatePropagation())};t.addEventListener("click",I,!0),r.push(()=>t.removeEventListener("click",I,!0)),e.addEventListener("pointerdown",g),r.push(()=>e.removeEventListener("pointerdown",g)),e.addEventListener("pointercancel",g),r.push(()=>e.removeEventListener("pointercancel",g));let H=P=>{u()&&P.preventDefault()};e.addEventListener("contextmenu",H),r.push(()=>e.removeEventListener("contextmenu",H));let w=P=>{u()&&P.preventDefault()};e.addEventListener("selectstart",w),r.push(()=>e.removeEventListener("selectstart",w));let _=()=>{d=!1};e.addEventListener("click",_),r.push(()=>e.removeEventListener("click",_));let k=P=>{if(!i)return;let R=P.target;R instanceof Node&&(t.contains(R)||e.contains(R)||c(!1))};document.addEventListener("pointerdown",k),r.push(()=>document.removeEventListener("pointerdown",k));let O=new MutationObserver(()=>{e.querySelector('[data-active="true"]')||m()});O.observe(e,{subtree:!0,attributes:!0,attributeFilter:["data-active"]}),r.push(()=>O.disconnect());let T=()=>{i&&this.positionSubBadges(t,e)};return window.addEventListener("resize",T),window.addEventListener("scroll",T,!0),r.push(()=>window.removeEventListener("resize",T)),r.push(()=>window.removeEventListener("scroll",T,!0)),e.setAttribute("data-open","false"),r.push(()=>e.remove()),r}positionSubBadges(t,e){let r=t.getBoundingClientRect();ot(window.innerWidth).compact?(e.style.left=`${Math.round(r.right+8)}px`,e.style.top=`${Math.round(r.top+r.height/2)}px`,e.style.bottom=""):(e.style.left=`${Math.round(r.left+r.width/2)}px`,e.style.top="",e.style.bottom=`${Math.round(window.innerHeight-r.top+8)}px`)}createSubBadgeGroup(t){let e=document.createElement("div");e.setAttribute("data-stdg",""),e.setAttribute("data-stdg-dock-sub-badges",""),e.setAttribute("data-parent-active","false");for(let r of t.subBadges??[]){let i={"data-stdg":"","data-stdg-dock-sub-badge":"","data-sub-badge-id":r.id,"data-active":"false","data-parent-active":"false"};if(r.selectorAttribute&&(i[r.selectorAttribute]=""),r.attributes)for(let[s,o]of Object.entries(r.attributes))o==null||o===!1||(i[s]=o===!0?"":String(o));let n=tt({icon:r.icon,size:16,label:r.label,modifiers:["toggle"],attrs:i});n.addEventListener("pointerdown",s=>{s.stopPropagation()}),n.addEventListener("click",s=>{s.stopPropagation(),t.getState().active||t.setActive(!0),r.onClick(n),n.setAttribute("data-active","false"),n.dispatchEvent(new CustomEvent("string-devtools-sub-badge-action",{bubbles:!0}))}),e.appendChild(n)}return e}remove(t){let e=this.entries.get(t);if(e){e.unsubscribe?.();for(let r of e.cleanup)r();e.slot.remove(),this.entries.delete(t)}}destroy(){window.removeEventListener("keydown",this.onKeydownBind),window.removeEventListener("resize",this.onResizeBind);for(let t of this.entries.values()){t.unsubscribe?.();for(let e of t.cleanup)e();t.slot.remove()}this.entries.clear(),this.root.remove()}cleanupExistingDockArtifacts(){document.querySelectorAll($s).forEach(t=>t.remove()),document.querySelectorAll(Us).forEach(t=>t.remove())}setFPS(t){let e=this.fpsElement.querySelector("span");e&&(e.textContent=String(Math.max(0,Math.round(t))))}sortButtons(){let t=Array.from(this.entries.values()).sort((r,i)=>{let n=r.definition.order??0,s=i.definition.order??0;return n!==s?n-s:r.definition.label.localeCompare(i.definition.label)});this.toolsWrap.innerHTML="",this.toolsWrap.appendChild(this.createSeparator());let e;for(let r of t){let i=r.definition.group;e!==void 0&&i!==e&&this.toolsWrap.appendChild(this.createSeparator()),e=i,this.toolsWrap.appendChild(r.slot)}this.fpsSeparator.style.display=t.length>0?"block":"none",this.syncCollapsedLayout()}createSeparator(){let t=document.createElement("span");return t.setAttribute("data-stdg-horizontal-line",""),t}createMainButton(){let t=document.createElement("button");return t.type="button",t.setAttribute("data-stdg",""),t.setAttribute("data-stdg-button",""),t.setAttribute("data-stdg-button-hover",""),t.setAttribute("data-stdg-button-icon-20",""),t.setAttribute("data-collapsed",this.preferences.collapsed?"true":"false"),t.setAttribute("aria-label","Toggle Dev Guides"),t.innerHTML=`
1281
1281
  ${V(20,"logo")}
1282
1282
  ${V(12,"chevrone-up")}
1283
- `,t.addEventListener("click",()=>{this.setCollapsed(!this.collapsed)}),t}setCollapsed(t,e=!0){if(this.collapsed=t,this.root.setAttribute("data-collapsed",t?"true":"false"),this.mainButton.setAttribute("data-collapsed",t?"true":"false"),this.mainButton.setAttribute("aria-label",t?"Expand developer tools":"Collapse developer tools"),t){this.suppressPersist=!0;for(let r of this.entries.values())r.definition.getState().active&&r.definition.setActive(!1);this.suppressPersist=!1}else{this.suppressPersist=!0;for(let r of this.entries.values())this.preferences.active[r.definition.id]===!0&&r.definition.setActive(!0);this.suppressPersist=!1}e&&(this.preferences.collapsed=t,this.savePreferences()),this.syncCollapsedLayout()}syncCollapsedLayout(){let t=ot(window.innerWidth).compact,e=t?this.toolsWrap.scrollHeight:this.toolsWrap.scrollWidth;this.toolsWrap.style.maxHeight=t?this.collapsed?"0px":`${e}px`:"",this.toolsWrap.style.maxWidth=t?"":this.collapsed?"0px":`${e}px`,this.toolsWrap.style.opacity=this.collapsed?"0":"1",this.toolsWrap.style.pointerEvents=this.collapsed?"none":"auto"}handleViewportChange(){this.syncCollapsedLayout();for(let t of this.entries.values())t.subBadges&&t.subBadges.getAttribute("data-open")==="true"&&this.positionSubBadges(t.slot,t.subBadges)}renderButton(t,e,r,i){let n=hn(r),s=n?`${e} (${n})`:e;t.setAttribute("data-active",i.active?"true":"false"),t.setAttribute("aria-label",`${s}: ${i.active?"On":"Off"}`),t.title=`${s}: ${i.active?"On":"Off"}`}syncSubBadgeState(t,e,r){let i=r?"true":"false";if(t.setAttribute("data-active",i),!!e){e.setAttribute("data-parent-active",i);for(let n of e.querySelectorAll("[data-stdg-dock-sub-badge]"))n.setAttribute("data-parent-active",i),n.setAttribute("aria-disabled",r?"false":"true")}}applyStoredActiveState(t){let e=this.preferences.active[t.id];if(typeof e!="boolean")return;let r=this.collapsed?!1:e;r!==t.getState().active&&t.setActive(r)}persistActiveState(t,e){this.suppressPersist||this.collapsed||(this.preferences.active[t]=e,this.savePreferences())}loadPreferences(){try{let t=localStorage.getItem(this.dockStorageKey);if(!t)return{collapsed:!1,active:{}};let e=JSON.parse(t);return{collapsed:e.collapsed===!0,active:e.active&&typeof e.active=="object"?e.active:{}}}catch{return{collapsed:!1,active:{}}}}savePreferences(){try{localStorage.setItem(this.dockStorageKey,JSON.stringify(this.preferences))}catch{}}get dockStorageKey(){return it(zs)}};var Lr=class{definitions=new Map;dock=null;register(t){!t||this.definitions.has(t.id)||(this.definitions.set(t.id,t),this.dock||(this.dock=new Sr),this.dock.add(t))}setFPS(t){this.dock?.setFPS(t)}destroy(){this.definitions.clear(),this.dock?.destroy(),this.dock=null}};var Er=class extends x{constructor(t){super(t),this.htmlKey="scroller"}onObjectConnected(t){let e=t.getProperty("scroller-inited");if(e==null||e==""){t.setProperty("scroller-inited","inited");let r=i=>{this.events.emit("wheel",i)};t.setProperty("scroller-wheel-event",r),t.htmlElement.addEventListener("wheel",r)}}onObjectDisconnected(t){t.setProperty("scroller-inited",""),t.htmlElement.removeEventListener("wheel",t.getProperty("scroller-wheel-event"))}};var Mr=class extends x{states=new WeakMap;constructor(t){super(t),this.htmlKey="scroll-container",this.attributesToMap.push({key:"lerp",type:"number",fallback:.1})}onObjectConnected(t){super.onObjectConnected(t);let e=t.htmlElement;getComputedStyle(e).overflowY==="visible"&&(e.style.overflowY="auto");let r={current:e.scrollTop,target:e.scrollTop,maxScroll:e.scrollHeight-e.clientHeight,velocity:0,lerp:t.getProperty("lerp")||.1,isDragging:!1,isActive:!1};this.states.set(e,r),e.addEventListener("wheel",i=>this.handleWheel(i,e,r),{passive:!1}),e.addEventListener("scroll",i=>this.onNativeScroll(i,e,r),{passive:!0}),this.measure(e,r)}onObjectDisconnected(t){this.states.delete(t.htmlElement)}onFrame(t){for(let e of this.objectsOnPage){let r=e.htmlElement,i=this.states.get(r);i&&i.isActive&&!i.isDragging&&this.updateScroll(r,i)}}onResize(){for(let t of this.objectsOnPage){let e=t.htmlElement,r=this.states.get(e);r&&this.measure(e,r)}}measure(t,e){e.maxScroll=t.scrollHeight-t.clientHeight}handleWheel(t,e,r){let i=t.deltaY,n=i<0,s=i>0,o=r.target<=.1,a=r.target>=r.maxScroll-.1;n&&o||s&&a||(t.preventDefault(),t.stopPropagation(),r.target+=i,r.target=Math.max(0,Math.min(r.target,r.maxScroll)),r.isActive=!0,r.isDragging=!1)}onWheel(t){}onNativeScroll(t,e,r){r.isActive||(r.current=e.scrollTop,r.target=e.scrollTop)}updateScroll(t,e){let r=e.target-e.current;Math.abs(r)<.1?(e.current=e.target,e.isActive=!1):e.current+=r*e.lerp,t.scrollTop=e.current}};function mn(l){let t=l.match(/([^[]+)\[([\d.]+)-([\d.]+)\]/);return t?{id:t[1],start:parseFloat(t[2]),end:parseFloat(t[3])}:null}function js(l,t,e,r,i){return r+(i-r)*(l-t)/(e-t)}var wr=class extends x{constructor(t){super(t),this.htmlKey="progress-part",this.attributesToMap=[...this.attributesToMap,{key:"part-of",type:"string",fallback:""},{key:"easing",type:"easing",fallback:this.settings.easing}]}onObjectConnected(t){let e=t.getProperty("part-of"),r=mn(e);if(r){t.setProperty("part-of-id",r.id),t.setProperty("start",r.start),t.setProperty("end",r.end);let i=n=>{if(r){let s=js(n,r?.start,r?.end,0,1),o=Math.max(0,Math.min(1,s)),a=t.getProperty("easing"),d=typeof a=="function"?a(o):o;t.htmlElement.style.setProperty("--progress-slice",d.toString()),this.emitSignal(t,"progress-slice",d),this.events.emit(this.getObjectEventName(t,"object:progress-slice"),d)}};t.setProperty("progress-event",i),this.events.on(`object:progress:${r.id}`,i)}}onObjectDisconnected(t){let e=t.getProperty("part-of-id");e&&this.events.off(`object:progress:${e}`,t.getProperty("progress-event"))}};var Ys=/^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\s*(>=|<=|==|!=|>|<)\s*(-?(?:\d+\.?\d*|\d*\.?\d+))$/,qs=/^(.*?)\s*=>\s*([a-z.]+)\((.*)\)$/;function fn(l){return l.split(";").map(t=>t.trim()).filter(Boolean).flatMap(t=>{let e=t.match(qs);if(!e)return[];let[,r,i,n]=e,s=Xs(r.trim());if(!s.length)return[];let o=Zs(i.trim(),n.trim());return o?[{groups:s,effect:o,raw:t}]:[]})}function Xs(l){return l.split(/\s*\|\|\s*/).filter(Boolean).map(t=>t.split(/\s*&&\s*/).filter(Boolean).map(Ks)).filter(t=>t.length>0&&t.every(Boolean))}function Ks(l){let t=l.match(Ys);if(!t)return null;let[,e,r,i,n]=t,s=parseFloat(n);return Number.isFinite(s)?{sourceId:e,signal:r,operator:i,threshold:s,raw:l}:null}function Zs(l,t){let e=Qs(t);switch(l){case"toggle.class":return e[0]?{type:"class-toggle",key:e[0]}:null;case"class.add":return e[0]?{type:"class-add",key:e[0]}:null;case"class.remove":return e[0]?{type:"class-remove",key:e[0]}:null;case"style.set":return e[0]&&e[1]?{type:"style-set",key:e[0],value:e[1]}:null;case"style.remove":return e[0]?{type:"style-remove",key:e[0]}:null;case"var.set":return e[0]&&e[1]?{type:"var-set",key:e[0],value:e[1]}:null;case"var.remove":return e[0]?{type:"var-remove",key:e[0]}:null;default:return null}}function Qs(l){return l.split(",").map(t=>t.trim()).filter(Boolean)}var xr=class extends x{constructor(t){super(t),this.htmlKey="signal",this.attributesToMap=[...this.attributesToMap,{key:"signal",type:"string",fallback:""}]}onObjectConnected(t){let e=t.getProperty("signal");if(!e)return;let r=fn(e);if(r.length===0)return;let i=[];t.setProperty("signal-rules",i);for(let n=0;n<r.length;n++){let s=r[n],o={rule:s,callbacks:[],previousState:null},a=()=>{this.applyRuleState(t,o)};for(let{sourceId:d,signal:c}of ro(s))o.callbacks.push({sourceId:d,signal:c,callback:a}),this.signals.subscribe(d,c,this.events,a);i.push(o),this.applyRuleState(t,o)}}onObjectDisconnected(t){let e=t.getProperty("signal-rules");if(e)for(let r=0;r<e.length;r++){let i=e[r];for(let n=0;n<i.callbacks.length;n++){let s=i.callbacks[n];this.signals.unsubscribe(s.sourceId,s.signal,this.events,s.callback)}i.rule.effect.type==="class-toggle"&&this.resetEffect(t,i.rule.effect)}}applyRuleState(t,e){let r=Js(e.rule,this.signals);e.previousState!==r&&(e.previousState=r,L.run(()=>{this.applyEffectState(t,e.rule.effect,r)}))}applyEffectState(t,e,r){e.type==="class-toggle"?r?this.applyEffect(t,e):this.resetEffect(t,e):r&&this.applyEffect(t,e)}applyEffect(t,e){this.applyToElementAndConnects(t,r=>io(r,e))}resetEffect(t,e){this.applyToElementAndConnects(t,r=>no(r,e))}};function Js(l,t){for(let e=0;e<l.groups.length;e++){let r=l.groups[e],i=!0;for(let n=0;n<r.length;n++)if(!to(r[n],t)){i=!1;break}if(i)return!0}return!1}function to(l,t){let e=t.get(l.sourceId,l.signal);return typeof e!="number"||!Number.isFinite(e)?!1:eo(e,l.operator,l.threshold)}function eo(l,t,e){switch(t){case">":return l>e;case">=":return l>=e;case"<":return l<e;case"<=":return l<=e;case"==":return l===e;case"!=":return l!==e}}function ro(l){let t=new Set,e=[];for(let r of l.groups)for(let{sourceId:i,signal:n}of r){let s=`${i}::${n}`;t.has(s)||(t.add(s),e.push({sourceId:i,signal:n}))}return e}function io(l,t){switch(t.type){case"class-toggle":case"class-add":l.classList.add(t.key);return;case"class-remove":l.classList.remove(t.key);return;case"style-set":L.setProp(l,t.key,t.value);return;case"style-remove":case"var-remove":l.style.removeProperty(t.key);return;case"var-set":L.setVar(l,t.key,t.value);return}}function no(l,t){switch(t.type){case"class-toggle":l.classList.remove(t.key);return;default:return}}var so=(l,t)=>{let e=Math.min(l,t),r=Math.max(l,t);return e+Math.random()*(r-e)},oo=(l,t)=>{let e=Math.ceil(Math.min(l,t)),r=Math.floor(Math.max(l,t));return r<e?e:Math.floor(Math.random()*(r-e+1))+e},ao=l=>{if(Array.isArray(l)&&l.length>=2){let t=Number(l[0]),e=Number(l[1]);if(Number.isFinite(t)&&Number.isFinite(e))return[t,e]}return typeof l=="number"&&Number.isFinite(l)?[0,l]:[0,1]},Cr=class extends x{constructor(t){super(t),this.htmlKey="random",this.attributesToMap.push({key:"random-number",type:"json",fallback:"[0,1]"}),this.attributesToMap.push({key:"random-type",type:"string",fallback:"int"})}onObjectConnected(t){let e=t.htmlElement,r=ao(t.getProperty("random-number")),n=String(t.getProperty("random-type")??"float").toLowerCase()==="int"?oo(r[0],r[1]):so(r[0],r[1]);L.run(()=>{L.setVars(e,{"--random":n})})}};var Tr=class{constructor(t,e){this.id=t;this.zIndex=e}screenRoot=null;world=null;screen=null;worldHost=null;hostPositionWasPatched=!1;hostPositionInlineValue=null;ensure(t){if(this.screenRoot?.isConnected)return t&&this.attachWorldToHost(t),this.screenRoot;let e=document.querySelector(`[data-string-dev-viewport-layer="${this.id}"]`);if(e)return this.screenRoot=e,this.screen=e.querySelector(`[data-string-dev-viewport-screen="${this.id}"]`),t&&this.attachWorldToHost(t),e;let r=document.createElement("div");r.setAttribute("data-string-dev-viewport-layer",this.id),r.setAttribute("data-string-devtools-theme",""),r.style.position="fixed",r.style.inset="0",r.style.zIndex=String(this.zIndex),r.style.pointerEvents="none",r.style.overflow="hidden";let i=document.createElement("div");return i.setAttribute("data-string-dev-viewport-screen",this.id),i.style.position="absolute",i.style.inset="0",i.style.pointerEvents="none",i.style.overflow="hidden",r.appendChild(i),(document.body??document.documentElement).appendChild(r),this.screenRoot=r,this.screen=i,this.attachWorldToHost(t??document.body??document.documentElement),r}getElement(){return this.screenRoot?.isConnected?this.screenRoot:null}getWorldElement(t){return this.ensure(t),this.world}getScreenElement(){return this.ensure(),this.screen}destroy(){this.restoreHostPosition(),this.screenRoot?.remove(),this.screenRoot=null,this.world?.remove(),this.world=null,this.screen=null,this.worldHost=null}attachWorldToHost(t){if(this.worldHost===t&&this.world?.isConnected)return;if(this.restoreHostPosition(),this.worldHost=t,!this.world){let r=document.createElement("div");r.setAttribute("data-string-dev-viewport-world",this.id),r.setAttribute("data-string-devtools-theme",""),r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="1px",r.style.height="1px",r.style.pointerEvents="none",r.style.overflow="visible",r.style.zIndex=String(this.zIndex),this.world=r}t!==document.body&&t!==document.documentElement&&window.getComputedStyle(t).position==="static"&&(this.hostPositionWasPatched=!0,this.hostPositionInlineValue=t.style.position||null,t.style.position="relative"),t.appendChild(this.world)}restoreHostPosition(){this.world&&this.world.remove(),this.worldHost&&this.hostPositionWasPatched&&(this.hostPositionInlineValue==null||this.hostPositionInlineValue===""?this.worldHost.style.removeProperty("position"):this.worldHost.style.position=this.hostPositionInlineValue),this.hostPositionWasPatched=!1,this.hostPositionInlineValue=null}};var _t=class l{static instance=null;layers=new Map;static getInstance(){return this.instance||(this.instance=new l),this.instance}acquire(t,e){let r=this.layers.get(t);if(r){if(r.zIndex!==e)throw new Error(`Shared devtools layer "${t}" already exists with z-index ${r.zIndex}, requested ${e}.`);return r.refs+=1,r.layer}let i=new Tr(t,e);return this.layers.set(t,{layer:i,refs:1,zIndex:e}),i}release(t){let e=this.layers.get(t);e&&(e.refs-=1,!(e.refs>0)&&(e.layer.destroy(),this.layers.delete(t)))}};var Z=class extends x{static devtool=null;overlayRegistry=_t.getInstance();acquiredViewportLayers=new Map;devtoolListeners=new Set;hotkeyHandler=null;devtoolConfig=null;constructor(t){super(t),this._type=2,Bt();let e=this.constructor.devtool;e&&(this.configureDevtool(e),this.bindDevtoolHotkey(e.hotkey));let r=e?.styles,i=(typeof r=="function"?r():r)??this.getStyles();i&&this.ensureStyle(`${this.getStyleScopeId(i)}-styles`,i)}get respectSelfDisable(){return!1}get connectsConfig(){return this.constructor.devtool?.connects}canConnect(t){let e=this.connectsConfig;return e?!!(e.global===!0||t.keys.includes("dev-inspect")||e.keys?.some(r=>t.keys.includes(r))||e.attributes?.some(r=>t.htmlElement.hasAttribute(r))):super.canConnect(t)}getStyleScopeId(t){let e=this.htmlKey||this.constructor.devtool?.connects?.keys?.[0];if(e)return e;let r=0;for(let i=0;i<t.length;i+=1)r=r*31+t.charCodeAt(i)>>>0;return`string-dev-${r.toString(16)}`}getStyles(){return null}getDevtoolDefinition(){if(!this.devtoolConfig)return null;let t=this.devtoolConfig,e=this.getDevtoolSubBadges();return{id:t.id,label:t.label,icon:t.icon,order:t.order,group:t.group,hotkey:t.hotkey,subBadges:e.length>0?e:void 0,getState:()=>({active:this.getDevtoolActiveState()}),setActive:r=>{this.setDevtoolActiveState(r)},subscribe:r=>(this.devtoolListeners.add(r),r({active:this.getDevtoolActiveState()}),()=>{this.devtoolListeners.delete(r)})}}getDevtoolSubBadges(){return[]}configureDevtool(t){this.devtoolConfig=t}bindDevtoolHotkey(t){typeof window>"u"||!t||(this.hotkeyHandler=e=>{let r=e.target;r&&(r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement||r instanceof HTMLSelectElement||r.isContentEditable)||e.key.toLowerCase()!==t.key.toLowerCase()||e.shiftKey!==(t.shiftKey??!1)||e.ctrlKey!==(t.ctrlKey??!1)||e.altKey!==(t.altKey??!1)||e.metaKey!==(t.metaKey??!1)||(e.preventDefault(),this.setDevtoolActiveState(!this.getDevtoolActiveState()))},window.addEventListener("keydown",this.hotkeyHandler))}emitDevtoolState(t=this.getDevtoolActiveState()){let e={active:t};for(let r of this.devtoolListeners)r(e)}acquireViewportLayer(t,e){let r=this.acquiredViewportLayers.get(t);if(r)return r;let i=this.overlayRegistry.acquire(t,e);return this.acquiredViewportLayers.set(t,i),i}releaseViewportLayer(t){this.acquiredViewportLayers.has(t)&&(this.overlayRegistry.release(t),this.acquiredViewportLayers.delete(t))}ensureStyle(t,e){let r=document.getElementById(t);if(r instanceof HTMLStyleElement)return r;let i=document.createElement("style");return i.id=t,i.textContent=e,document.head.appendChild(i),i}getWorldHost(){return this.data.scroll.container??document.body??document.documentElement}getDevtoolActiveState(){return!1}setDevtoolActiveState(t){}destroy(){this.hotkeyHandler&&(window.removeEventListener("keydown",this.hotkeyHandler),this.hotkeyHandler=null),this.devtoolListeners.clear();for(let t of this.acquiredViewportLayers.keys())this.overlayRegistry.release(t);this.acquiredViewportLayers.clear(),super.destroy()}};var Ei=["S","M","L","XL"];var lo=[1280,1024,768,0];function vn(l,t){let e=t-1-l;return Ei[e]??"S"}var bn=0;function Pr(){return`grid-${Date.now()}-${bn++}`}function Ar(){return`layout-${Date.now()}-${bn++}`}function kr(l=2){let t=Math.max(2,Math.min(4,l)),e=[];for(let r=0;r<t;r++){let i=vn(r,t),n=r===t-1?0:lo[r]??0;e.push({id:Ar(),label:i,minWidth:n,instances:[]})}return e}function de(l){return Number.isFinite(l)?Math.max(0,Math.round(l)):0}function Ft(l){let t=l.length;for(let e=0;e<t;e++)l[e].label=vn(e,t)}var co="string-grid:";function Mi(l){return it(co+l)}function uo(l){if(!l||typeof l!="object")return 0;if(Array.isArray(l))return l.length;let t=l,e=Array.isArray(t.layouts)?t.layouts:[],r=0;for(let i of e){if(!i||typeof i!="object")continue;let n=i,s=Array.isArray(n.instances)?n.instances:Array.isArray(n.grids)?n.grids:[];r+=s.length}return r}var Or=class{adapterRegistry=new Map;elementStates=new Map;registerAdapter(t){this.adapterRegistry.set(t.type,t)}getAdapter(t){return this.adapterRegistry.get(t)}getAdapterRegistry(){return this.adapterRegistry}getLayouts(t){return this.getOrInitState(t).layouts}getLayoutCount(t){return this.getOrInitState(t).layouts.length}getSelectedLayoutId(t){return this.getOrInitState(t).selectedLayoutId}getPanelTitle(t){return this.getOrInitState(t).panelTitle?.trim()||"Layout"}getSelectedLayoutLabel(t){let e=this.getOrInitState(t);return this.findSelectedLayout(e)?.label??"S"}getResolvedLayoutId(t,e){let r=this.getOrInitState(t);return this.findResolvedLayout(r,e)?.id??r.layouts[r.layouts.length-1].id}getSelectedInstances(t){let e=this.getOrInitState(t);return this.findSelectedLayout(e)?.instances??[]}getResolvedInstances(t,e){let r=this.getOrInitState(t);return this.findResolvedLayout(r,e)?.instances??[]}addLayout(t){let e=this.getOrInitState(t);if(e.layouts.length>=4)return null;let r=e.layouts[0],i=r?Math.min(1920,r.minWidth+256):1280,n={id:Ar(),label:"XL",minWidth:i,instances:[]};return e.layouts.unshift(n),this.sortLayouts(e),Ft(e.layouts),this.ensureMinWidthConstraints(e),e.layouts.some(s=>s.id===e.selectedLayoutId)||(e.selectedLayoutId=e.layouts[0].id),this.save(t),n}removeLayout(t,e){let r=this.getOrInitState(t);if(r.layouts.length<=2)return!1;let i=r.layouts.findIndex(n=>n.id===e);return i===-1?!1:(r.layouts.splice(i,1),Ft(r.layouts),this.ensureMinWidthConstraints(r),r.layouts.some(n=>n.id===r.selectedLayoutId)||(r.selectedLayoutId=r.layouts[r.layouts.length-1].id),this.save(t),!0)}selectLayout(t,e,r=!0){let i=this.getOrInitState(t);i.layouts.some(n=>n.id===e)&&(i.selectedLayoutId=e,r&&this.save(t))}updateLayoutMinWidth(t,e,r,i=!0){let n=this.getOrInitState(t),s=n.layouts.find(o=>o.id===e);s&&(s.minWidth=de(r),this.sortLayouts(n),Ft(n.layouts),this.ensureMinWidthConstraints(n),i&&this.save(t))}replaceLayouts(t,e,r){let i=this.normalizeLayouts(e),n={elementId:t,layouts:i,selectedLayoutId:r};this.ensureValidSelection(n),this.elementStates.set(t,n),this.save(t)}getInstances(t){return this.getSelectedInstances(t)}addInstance(t,e){let r=this.adapterRegistry.get(e);if(!r)return null;let i=this.findSelectedLayout(this.getOrInitState(t));if(!i)return null;let n={id:Pr(),type:e,visible:!0,settings:{...r.getDefaults()}};return i.instances.push(n),this.save(t),n}removeInstance(t,e){let r=this.findSelectedLayout(this.getOrInitState(t));r&&(r.instances=r.instances.filter(i=>i.id!==e),this.save(t))}reorderInstance(t,e,r,i){let n=this.findSelectedLayout(this.getOrInitState(t));if(!n||e===r)return;let s=n.instances.findIndex(u=>u.id===e),o=n.instances.findIndex(u=>u.id===r);if(s===-1||o===-1)return;let[a]=n.instances.splice(s,1),d=n.instances.findIndex(u=>u.id===r),c=i==="before"?d:d+1;n.instances.splice(c,0,a),this.save(t)}moveInstanceToEnd(t,e){let r=this.findSelectedLayout(this.getOrInitState(t));if(!r)return;let i=r.instances.findIndex(s=>s.id===e);if(i===-1||i===r.instances.length-1)return;let[n]=r.instances.splice(i,1);r.instances.push(n),this.save(t)}toggleVisibility(t,e){let r=this.findInstance(t,e);r&&(r.visible=!r.visible,this.save(t))}renameInstance(t,e,r){let i=this.findInstance(t,e);i&&(i.name=r.trim()||void 0,this.save(t))}renamePanelTitle(t,e){let r=this.getOrInitState(t);r.panelTitle=e.trim()||"Layout",this.save(t)}updateSetting(t,e,r,i){let n=this.findInstance(t,e);n&&(n.settings[r]=i,this.save(t))}findInstance(t,e){return this.getSelectedInstances(t).find(r=>r.id===e)}save(t){let e=this.elementStates.get(t);if(e)try{let r={layouts:e.layouts,selectedLayoutId:e.selectedLayoutId,panelTitle:e.panelTitle??"Layout"},i=Mi(t);localStorage.setItem(i,JSON.stringify(r))}catch(r){console.warn("[StringDevLayout:storage] save failed",{elementId:t,storageSlot:Mi(t),error:r})}}load(t,e=[]){try{let r=[t,...e],i=[];for(let p of r){let g=Mi(p),m=localStorage.getItem(g);if(m)try{let h=JSON.parse(m);i.push({elementId:p,storageSlot:g,raw:m,parsed:h,gridCount:uo(h)})}catch(h){console.warn("[StringDevLayout:storage] candidate parse failed",{elementId:t,candidateId:p,storageSlot:g,error:h})}}let n=i[0]??null;for(let p of i)(!n||p.gridCount>n.gridCount)&&(n=p);if(!n)return;let s=n.parsed,o=n.elementId;if(Array.isArray(s)){let p=s.filter(m=>this.adapterRegistry.has(m.type));for(let m of p){let h=this.adapterRegistry.get(m.type);h&&(m.settings={...h.getDefaults(),...m.settings})}let g=kr(2);g[g.length-1].instances=p,this.elementStates.set(t,{elementId:t,layouts:g,selectedLayoutId:g[0].id,panelTitle:"Layout"}),o!==t&&this.save(t);return}let a=Array.isArray(s?.layouts)?s.layouts:null;if(!a)return;let d=this.normalizeLayouts(a);if(d.length===0)return;let c=typeof s?.selectedLayoutId=="string"?s.selectedLayoutId:d[0].id,u={elementId:t,layouts:d,selectedLayoutId:c,panelTitle:typeof s?.panelTitle=="string"&&s.panelTitle.trim().length>0?s.panelTitle.trim():"Layout"};this.ensureValidSelection(u),this.elementStates.set(t,u),o!==t&&this.save(t)}catch{}}clear(){this.elementStates.clear()}getOrInitState(t){let e=this.elementStates.get(t);if(!e){let r=kr(2);e={elementId:t,layouts:r,selectedLayoutId:r[0].id,panelTitle:"Layout"},this.elementStates.set(t,e)}return this.sortLayouts(e),this.ensureValidSelection(e),e}normalizeLayouts(t){let i=t.filter(n=>n&&typeof n=="object"&&typeof n.id=="string").map(n=>{let s=Array.isArray(n.instances)?n.instances:Array.isArray(n.grids)?n.grids:[];return{id:n.id,label:n.label??"S",minWidth:de(typeof n.minWidth=="number"?n.minWidth:0),instances:s.filter(o=>this.adapterRegistry.has(o.type)).map(o=>{let a=this.adapterRegistry.get(o.type);return a?{...o,visible:o.visible!==!1,settings:{...a.getDefaults(),...o.settings}}:o})}}).slice(0,4);for(;i.length<2;)i.push({id:Ar(),label:"S",minWidth:0,instances:[]});return this.sortLayoutsArr(i),Ft(i),this.ensureMinWidthConstraintsArr(i),i}sortLayouts(t){this.sortLayoutsArr(t.layouts)}sortLayoutsArr(t){t.sort((e,r)=>r.minWidth-e.minWidth)}ensureValidSelection(t){t.layouts.length<2&&(t.layouts=kr(2)),t.layouts.length>4&&(t.layouts=t.layouts.slice(0,4),Ft(t.layouts)),t.layouts.some(e=>e.id===t.selectedLayoutId)||(t.selectedLayoutId=t.layouts[t.layouts.length-1].id)}ensureMinWidthConstraints(t){this.ensureMinWidthConstraintsArr(t.layouts)}ensureMinWidthConstraintsArr(t){if(t.length!==0){t[t.length-1].minWidth=0;for(let e=t.length-2;e>=0;e--){let r=t[e+1].minWidth;t[e].minWidth<=r&&(t[e].minWidth=r+1)}}}findSelectedLayout(t){return t.layouts.find(e=>e.id===t.selectedLayoutId)}findResolvedLayout(t,e){for(let r of t.layouts)if(e>=r.minWidth)return r;return t.layouts[t.layouts.length-1]}};var po="http://www.w3.org/2000/svg",ue=class{svg;target;resizeObserver;enabled=!0;onResize;constructor(t,e,r){this.target=t,this.onResize=r,this.svg=document.createElementNS(po,"svg"),this.svg.setAttribute("data-string-grid-overlay",""),this.svg.style.position="absolute",this.svg.style.pointerEvents="none",this.svg.style.transformOrigin="top left",e.appendChild(this.svg),this.syncViewBox(),this.resizeObserver=new ResizeObserver(()=>{this.syncViewBox(),this.onResize?.()}),this.resizeObserver.observe(this.target)}getElement(){return this.svg}setPosition(t,e,r,i){this.svg.style.width=`${r}px`,this.svg.style.height=`${i}px`,this.svg.style.transform=`translate3d(${Math.round(t)}px, ${Math.round(e)}px, 0)`}render(t,e){if(this.clearAll(),!this.enabled)return;let{width:r,height:i}=this.getDimensions();for(let n of[...t].reverse()){let s=e.get(n.type);if(s&&n.visible){s.render(this.svg,r,i,{...n.settings,__instanceId:n.id});let o=this.svg.querySelector(`[data-grid-id="${n.id}"]`);o&&(o.setAttribute("data-grid-type",n.type),o.setAttribute("data-grid-visible","true"))}}}setEnabled(t){this.enabled=t,this.svg.style.display=t?"":"none",t||this.clearAll()}clearAll(){let t=this.svg.querySelectorAll("[data-grid-id]");for(let e=t.length-1;e>=0;e--)t[e].remove()}clearInstance(t,e){e.clear(this.svg,t)}syncViewBox(){let{width:t,height:e}=this.getDimensions();this.svg.setAttribute("viewBox",`0 0 ${t} ${e}`)}getDimensions(){return{width:this.target.offsetWidth,height:this.target.offsetHeight}}destroy(){this.resizeObserver.disconnect(),this.svg.remove()}ensurePositioned(){getComputedStyle(this.target).position==="static"&&(this.target.style.position="relative")}};var Q=class{key;label;value;onChange;root=null;constructor(t,e,r,i){this.key=t,this.label=e,this.value=r,this.onChange=i}setDisabled(t){this.root&&this.root.setAttribute("data-disabled",t?"true":"false")}getValue(){return this.value}destroy(){this.root?.remove(),this.root=null}emit(t){this.value=t,this.onChange(this.key,t)}createLabel(){let t=document.createElement("label");return t.textContent=this.label,t.setAttribute("data-stdg-label",""),t}createRow(){let t=document.createElement("div");return t.setAttribute("data-stdg-panel-field",""),t}};var go=320,ho=60,yn=6,Dr=class extends Q{min;max;step;input=null;stepperButtons=[];constructor(t,e,r,i,n=0,s=100,o=1){super(t,e,r,i),this.min=n,this.max=s,this.step=o}build(){let t=this.createRow();return t.appendChild(this.createLabel()),t.appendChild(this.createControls()),this.root=t,t}setValue(t){this.value=t,this.input&&(this.input.value=this.formatValue(t))}setDisabled(t){super.setDisabled(t),this.input&&(this.input.disabled=t);for(let e of this.stepperButtons)e.disabled=t}createControls(){let t=document.createElement("div");t.setAttribute("data-stdg-field-input","");let e=document.createElement("div");return e.setAttribute("data-stdg-stepper",""),e.appendChild(this.createStepperButton("up",1)),e.appendChild(this.createStepperButton("down",-1)),t.appendChild(this.createInput()),t.appendChild(e),t}createInput(){let t=document.createElement("input");return t.type="text",t.inputMode="text",t.setAttribute("enterkeyhint","done"),t.autocomplete="off",t.spellcheck=!1,t.value=this.formatValue(this.value),t.setAttribute("data-stdg-input",""),t.addEventListener("focus",()=>{t.select()}),t.addEventListener("blur",()=>{this.commitValue(t.value)}),t.addEventListener("keydown",e=>{if(e.key==="Enter"){t.blur();return}if(e.key==="Escape"){t.value=this.formatValue(this.value),t.blur();return}e.key!=="ArrowUp"&&e.key!=="ArrowDown"||(e.preventDefault(),this.applyDelta(e.key==="ArrowUp"?1:-1,e))}),t.addEventListener("wheel",e=>{document.activeElement===t&&(e.preventDefault(),this.applyDelta(e.deltaY<0?1:-1,e))}),t.addEventListener("mousedown",e=>{e.button===1&&this.startMiddleDrag(e,t)}),t.addEventListener("auxclick",e=>{e.button===1&&e.preventDefault()}),this.input=t,t}createStepperButton(t,e){let r=document.createElement("button");r.type="button",r.setAttribute("data-stdg-button",""),r.setAttribute("data-stdg-button-icon-12",""),r.setAttribute("data-direction",t),r.innerHTML=V(12,t==="up"?"chevrone-up":"chevrone-down");let i=0,n=0,s=!1,o=()=>{window.clearTimeout(i),window.clearInterval(n),document.removeEventListener("pointerup",o),document.removeEventListener("pointercancel",o)};return r.addEventListener("pointerdown",a=>{a.button===0&&(i=window.setTimeout(()=>{s=!0,this.applyDelta(e),n=window.setInterval(()=>{this.applyDelta(e)},ho)},go),document.addEventListener("pointerup",o),document.addEventListener("pointercancel",o))}),r.addEventListener("click",a=>{if(s){s=!1,a.preventDefault();return}this.applyDelta(e),this.input?.focus(),this.input?.select()}),this.stepperButtons.push(r),r}startMiddleDrag(t,e){t.preventDefault();let r=t.clientX,i=0,n=document.body.style.cursor,s=document.body.style.userSelect;document.body.style.cursor="ew-resize",document.body.style.userSelect="none";let o=()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",o),document.body.style.cursor=n,document.body.style.userSelect=s},a=d=>{let c=d.clientX-r;for(r=d.clientX,i+=c;Math.abs(i)>=yn;){let u=i>0?1:-1;this.applyDelta(u,d),i-=yn*u}};e.focus(),e.select(),document.addEventListener("mousemove",a),document.addEventListener("mouseup",o)}commitValue(t){let e=parseFloat(t.replace(",","."));if(isNaN(e)){this.input&&(this.input.value=this.formatValue(this.value));return}let r=this.normalizeValue(e);this.input&&(this.input.value=this.formatValue(r)),this.emit(r)}applyDelta(t,e){let r=e?.shiftKey?10:e?.altKey?.1:1,i=this.normalizeValue(this.value+t*this.step*r);this.input&&(this.input.value=this.formatValue(i)),this.emit(i)}normalizeValue(t){let e=Math.round(t/this.step)*this.step,r=this.getPrecision(this.step);return Number(e.toFixed(r))}getPrecision(t){return String(t).split(".")[1]?.length??0}formatValue(t){let e=this.getPrecision(this.step);return e>0?t.toFixed(e):String(t)}};var mo=320,fo=60,Sn=6,Ir=class l extends Q{min;max;step;displayMultiplier;displayStep;suffix;units;currentUnit;valueInput=null;unitSelect=null;stepperButtons=[];static DECIMAL_UNITS=new Set(["rem","em"]);constructor(t,e,r,i,n=0,s=100,o=1,a=1,d,c,u,p){super(t,e,r,i),this.min=n,this.max=s,this.step=o,this.displayMultiplier=a,this.displayStep=d,this.suffix=c,this.units=u,this.currentUnit=p}build(){let t=this.createRow();return t.appendChild(this.createLabel()),t.appendChild(this.createControls()),this.root=t,t}setValue(t){this.value=t,this.valueInput&&(this.valueInput.value=this.formatValue(t))}setDisabled(t){super.setDisabled(t),this.valueInput&&(this.valueInput.disabled=t),this.unitSelect&&(this.unitSelect.disabled=t);for(let e of this.stepperButtons)e.disabled=t}createControls(){let t=document.createElement("div");t.setAttribute("data-stdg-field-input","");let e=document.createElement("div");if(e.setAttribute("data-stdg-field-value",""),e.appendChild(this.createInput()),this.suffix){let i=document.createElement("span");i.setAttribute("data-stdg-field-suffix",""),i.textContent=this.suffix,e.appendChild(i)}if(t.appendChild(e),this.units&&this.units.length>0){let i=document.createElement("select");i.setAttribute("data-stdg-select","");for(let n of this.units){let s=document.createElement("option");s.value=n.value,s.textContent=n.label,i.appendChild(s)}i.value=this.currentUnit||this.units[0].value,i.addEventListener("change",()=>{this.currentUnit=i.value,this.valueInput&&(this.valueInput.value=this.formatValue(this.value)),this.onChange(this.key+"Unit",i.value)}),this.unitSelect=i,t.appendChild(i)}let r=document.createElement("div");return r.setAttribute("data-stdg-stepper",""),r.appendChild(this.createStepperButton("up",1)),r.appendChild(this.createStepperButton("down",-1)),t.appendChild(r),t}createInput(){let t=document.createElement("input");return t.type="text",t.inputMode="text",t.setAttribute("enterkeyhint","done"),t.autocomplete="off",t.spellcheck=!1,t.value=this.formatValue(this.value),t.setAttribute("data-stdg-input",""),t.addEventListener("focus",()=>{t.select()}),t.addEventListener("blur",()=>{this.commitInputValue(t)}),t.addEventListener("keydown",e=>{e.key==="Enter"?t.blur():e.key==="Escape"?(t.value=this.formatValue(this.value),t.blur()):(e.key==="ArrowUp"||e.key==="ArrowDown")&&(e.preventDefault(),this.applyDelta(e.key==="ArrowUp"?1:-1,e,t))}),t.addEventListener("wheel",e=>{document.activeElement===t&&(e.preventDefault(),this.applyDelta(e.deltaY<0?1:-1,e,t))}),t.addEventListener("mousedown",e=>{e.button===1&&this.startMiddleDrag(e,t)}),t.addEventListener("auxclick",e=>{e.button===1&&e.preventDefault()}),this.valueInput=t,t}createStepperButton(t,e){let r=document.createElement("button");r.type="button",r.setAttribute("data-stdg-button",""),r.setAttribute("data-stdg-button-icon-12",""),r.setAttribute("data-direction",t),r.innerHTML=V(12,t==="up"?"chevrone-up":"chevrone-down");let i=0,n=0,s=!1,o=()=>{window.clearTimeout(i),window.clearInterval(n),document.removeEventListener("pointerup",o),document.removeEventListener("pointercancel",o)};return r.addEventListener("pointerdown",a=>{a.button===0&&(i=window.setTimeout(()=>{s=!0,this.valueInput&&(this.applyDelta(e,void 0,this.valueInput),n=window.setInterval(()=>{this.valueInput&&this.applyDelta(e,void 0,this.valueInput)},fo))},mo),document.addEventListener("pointerup",o),document.addEventListener("pointercancel",o))}),r.addEventListener("click",a=>{if(s){s=!1,a.preventDefault();return}this.valueInput&&(this.applyDelta(e,void 0,this.valueInput),this.valueInput.focus(),this.valueInput.select())}),this.stepperButtons.push(r),r}startMiddleDrag(t,e){t.preventDefault();let r=t.clientX,i=0,n=document.body.style.cursor,s=document.body.style.userSelect;document.body.style.cursor="ew-resize",document.body.style.userSelect="none";let o=()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",o),document.body.style.cursor=n,document.body.style.userSelect=s},a=d=>{let c=d.clientX-r;for(r=d.clientX,i+=c;Math.abs(i)>=Sn;){let u=i>0?1:-1;this.applyDelta(u,d,e),i-=Sn*u}};e.focus(),e.select(),document.addEventListener("mousemove",a),document.addEventListener("mouseup",o)}commitInputValue(t){let e=parseFloat(t.value.replace(",","."));if(isNaN(e)){t.value=this.formatValue(this.value);return}let r=this.normalizeDisplayValue(e);t.value=this.formatValue(r),this.emit(r)}applyDelta(t,e,r){let i=e?.shiftKey?10:e?.altKey?.1:1,n=this.modelToDisplay(this.value)+t*this.getDisplayStep()*i,s=this.normalizeDisplayValue(n);r.value=this.formatValue(s),this.emit(s)}normalizeValue(t){let e=Math.min(this.max,Math.max(this.min,t));if(l.DECIMAL_UNITS.has(this.currentUnit??""))return Number(e.toFixed(2));let r=Math.round(e/this.step)*this.step,i=this.getPrecision(this.step);return Number(r.toFixed(i))}normalizeDisplayValue(t){let e=this.modelToDisplay(this.min),r=this.modelToDisplay(this.max),i=Math.min(r,Math.max(e,t)),n=this.getDisplayPrecision();if(l.DECIMAL_UNITS.has(this.currentUnit??"")){let d=Number(i.toFixed(n));return this.normalizeValue(this.displayToModel(d))}let s=this.getDisplayStep(),o=Math.round(i/s)*s,a=Number(o.toFixed(n));return this.normalizeValue(this.displayToModel(a))}getPrecision(t){return String(t).split(".")[1]?.length??0}formatValue(t){let e=this.modelToDisplay(t),r=this.getDisplayPrecision();return r>0?e.toFixed(r):String(e)}modelToDisplay(t){let e=this.getDisplayPrecision();return Number((t*this.displayMultiplier).toFixed(e))}displayToModel(t){return t/this.displayMultiplier}getDisplayStep(){return this.displayStep??this.step*this.displayMultiplier}getDisplayPrecision(){if(l.DECIMAL_UNITS.has(this.currentUnit??""))return 2;let t=this.getDisplayStep();return t<1?Math.max(2,this.getPrecision(t)):0}};var Rr=class extends Q{colorInput=null;hexLabel=null;build(){let t=this.createRow();return t.appendChild(this.createLabel()),t.appendChild(this.createControl()),this.root=t,t}setValue(t){this.value=t,this.colorInput&&(this.colorInput.value=t),this.hexLabel&&(this.hexLabel.value=t)}setDisabled(t){super.setDisabled(t),this.colorInput&&(this.colorInput.disabled=t),this.hexLabel&&(this.hexLabel.disabled=t)}createControl(){let t=document.createElement("div");t.setAttribute("data-stdg-field-input","");let e=document.createElement("input");e.type="color",e.value=this.value,e.setAttribute("data-stdg-input",""),e.setAttribute("data-stdg-input-color","");let r=document.createElement("input");return r.type="text",r.inputMode="text",r.value=this.value,r.setAttribute("data-stdg-input",""),e.addEventListener("input",()=>{r.value=e.value,this.emit(e.value)}),r.addEventListener("change",()=>{let i=r.value.trim();e.value=i,this.emit(i)}),this.colorInput=e,this.hexLabel=r,t.appendChild(e),t.appendChild(r),t}};var Hr=class extends Q{options;select=null;stepperButtons=[];constructor(t,e,r,i,n){super(t,e,r,i),this.options=n}build(){let t=this.createRow();return t.appendChild(this.createLabel()),t.appendChild(this.createControl()),this.root=t,t}setValue(t){this.value=t,this.select&&(this.select.value=t)}setDisabled(t){super.setDisabled(t),this.select&&(this.select.disabled=t);for(let e of this.stepperButtons)e.disabled=t}createControl(){let t=document.createElement("div");t.setAttribute("data-stdg-field-input","");let e=document.createElement("select");e.setAttribute("data-stdg-select","");for(let i of this.options){let n=document.createElement("option");n.value=i.value,n.textContent=i.label,i.value===this.value&&(n.selected=!0),e.appendChild(n)}e.addEventListener("change",()=>{this.emit(e.value)}),this.select=e;let r=document.createElement("div");return r.setAttribute("data-stdg-stepper",""),r.appendChild(this.createStepperButton("up",-1)),r.appendChild(this.createStepperButton("down",1)),t.appendChild(e),t.appendChild(r),t}createStepperButton(t,e){let r=document.createElement("button");return r.type="button",r.setAttribute("data-stdg-button",""),r.setAttribute("data-stdg-button-icon-12",""),r.setAttribute("data-direction",t),r.innerHTML=V(12,t==="up"?"chevrone-up":"chevrone-down"),r.addEventListener("click",()=>{if(!this.select)return;let i=this.select.options.length;if(i===0)return;let s=((this.select.selectedIndex+e)%i+i)%i;this.select.selectedIndex=s,this.emit(this.select.value)}),this.stepperButtons.push(r),r}};var Br=class extends Q{checkbox=null;toggle=null;build(){let t=this.createRow();t.appendChild(this.createLabel());let e=document.createElement("label");e.setAttribute("data-stdg-toggle",""),e.setAttribute("data-checked",String(this.value));let r=document.createElement("input");r.type="checkbox",r.checked=this.value,r.setAttribute("data-stdg-toggle-input",""),this.checkbox=r,this.toggle=e;let i=document.createElement("span");return i.setAttribute("data-stdg-toggle-knob",""),r.addEventListener("change",()=>{let n=r.checked;this.value=n,e.setAttribute("data-checked",String(n)),this.emit(n)}),e.appendChild(r),e.appendChild(i),t.appendChild(e),this.root=t,t}setValue(t){this.value=t,this.checkbox&&(this.checkbox.checked=t),this.toggle?.setAttribute("data-checked",String(t))}setDisabled(t){super.setDisabled(t),this.checkbox&&(this.checkbox.disabled=t),this.toggle?.setAttribute("aria-disabled",t?"true":"false")}};var _r=class{fields=[];fieldEntries=[];values={};build(t,e,r){this.destroy(),this.values={...e};let i=(o,a)=>{this.values[o]=a,this.syncDisabledStates(),r(o,a)},n=document.createDocumentFragment(),s=document.createElement("div");s.setAttribute("data-stdg-panel-content",""),n.appendChild(s);for(let o of t){if(o.type==="divider"){s=document.createElement("div"),s.setAttribute("data-stdg-panel-content",""),n.appendChild(s);continue}let a=this.createField(o,e,i);a&&(this.fields.push(a),this.fieldEntries.push({descriptor:o,field:a}),s.appendChild(a.build()))}return this.syncDisabledStates(),n}updateValues(t){this.values={...this.values,...t};for(let e of this.fields){let r=e.key;r&&r in t&&e.setValue(t[r])}this.syncDisabledStates()}destroy(){for(let t of this.fields)t.destroy();this.fields=[],this.fieldEntries=[],this.values={}}createField(t,e,r){switch(t.type){case"number":return new Dr(t.key,t.label,e[t.key]??t.default,r,t.min,t.max,t.step);case"range":return new Ir(t.key,t.label,e[t.key]??t.default,r,t.min,t.max,t.step,t.displayMultiplier,t.displayStep,t.suffix,t.units,e[t.key+"Unit"]??t.defaultUnit);case"color":return new Rr(t.key,t.label,e[t.key]??t.default,r);case"select":return new Hr(t.key,t.label,e[t.key]??t.default,r,t.options);case"toggle":return new Br(t.key,t.label,e[t.key]??t.default,r);default:return null}}syncDisabledStates(){for(let t of this.fieldEntries){let e=t.descriptor.disabledWhen,r=!!e&&this.values[e.key]===e.equals;t.field.setDisabled(r)}}};var wi=12,vo=360,bo=560,pe=class{target;adapterRegistry;hudRoot;trigger;panel;layoutTitle;layoutChipTabs;layoutSettingsToggle;layoutSettingsList;layoutAddButton;layoutIOActions;listContainer;addGuideButton;headerAddButton;addPanel;addGridList;layoutPanel;detailPanel;detailContent;detailTitle=null;detailIcon=null;detailBuilder=null;instances=[];layouts=[];panelTitleValue="Layout";selectedLayoutId="";resolvedLayoutId="";selectedInstanceId=null;selectedBreakpointLayoutId=null;isOpen=!1;panelInBody=!1;isAddPanelOpen=!1;isLayoutSettingsOpen=!1;enabled=!0;onDocumentPointerDownBind;onViewportChangeBind;onAdd;onRemove;onToggle;onSettingChange;onReorder;onMoveToEnd;onSelectLayout;onUpdateLayoutMinWidth;onAddLayout;onRemoveLayout;onExport;onImport;onRenameInstance;onRenamePanelTitle;onHUDOpen;onHUDClose;onLayoutPanelOpen;onLayoutPanelClose;constructor(t,e,r,i){this.target=t,this.adapterRegistry=e,this.onAdd=r.onAdd,this.onRemove=r.onRemove,this.onToggle=r.onToggle,this.onSettingChange=r.onSettingChange,this.onReorder=r.onReorder,this.onMoveToEnd=r.onMoveToEnd,this.onSelectLayout=r.onSelectLayout,this.onUpdateLayoutMinWidth=r.onUpdateLayoutMinWidth,this.onAddLayout=r.onAddLayout,this.onRemoveLayout=r.onRemoveLayout,this.onExport=r.onExport,this.onImport=r.onImport,this.onRenameInstance=r.onRenameInstance,this.onRenamePanelTitle=r.onRenamePanelTitle,this.onHUDOpen=r.onHUDOpen,this.onHUDClose=r.onHUDClose,this.onLayoutPanelOpen=r.onLayoutPanelOpen,this.onLayoutPanelClose=r.onLayoutPanelClose,this.onDocumentPointerDownBind=this.onDocumentPointerDown.bind(this),this.onViewportChangeBind=()=>this.syncPanelPlacement(),this.hudRoot=this.createHudRoot(),this.trigger=this.createTrigger(),this.panel=this.createMainPanel(),this.addPanel=this.createAddPanel(),this.layoutPanel=this.createLayoutPanel(),this.detailPanel=this.createDetailPanel(),i?.attachTrigger!==!1&&this.hudRoot.appendChild(this.trigger),this.panel.appendChild(this.addPanel),this.panel.appendChild(this.layoutPanel),this.panel.appendChild(this.detailPanel),this.hudRoot.appendChild(this.panel),document.addEventListener("pointerdown",this.onDocumentPointerDownBind),window.addEventListener("resize",this.onViewportChangeBind),window.visualViewport?.addEventListener("resize",this.onViewportChangeBind),window.visualViewport?.addEventListener("scroll",this.onViewportChangeBind)}refresh(t,e,r,i,n){this.instances=[...t],this.layouts=[...e],this.panelTitleValue=r.trim()||"Layout",this.selectedLayoutId=i,this.resolvedLayoutId=n,this.selectedInstanceId&&!t.some(s=>s.id===this.selectedInstanceId)&&this.clearSelection(),this.selectedBreakpointLayoutId&&!this.layouts.some(s=>s.id===this.selectedBreakpointLayoutId)&&(this.selectedBreakpointLayoutId=null),this.layoutTitle.value=this.panelTitleValue,this.renderLayoutChips(),this.renderLayoutSettings(),this.renderList(),this.renderDetailPanel()}destroy(){this.detailBuilder?.destroy(),document.removeEventListener("pointerdown",this.onDocumentPointerDownBind),window.removeEventListener("resize",this.onViewportChangeBind),window.visualViewport?.removeEventListener("resize",this.onViewportChangeBind),window.visualViewport?.removeEventListener("scroll",this.onViewportChangeBind),this.panelInBody&&this.panel.remove(),this.hudRoot.remove()}getTriggerElement(){return this.trigger}getHudElement(){return this.hudRoot}setTargetId(t){this.hudRoot.setAttribute("data-target-id",t),this.trigger.setAttribute("data-target-id",t),this.panel.setAttribute("data-target-id",t),this.addPanel.setAttribute("data-target-id",t),this.layoutPanel.setAttribute("data-target-id",t),this.detailPanel.setAttribute("data-target-id",t)}setAnchorPosition(t,e,r="top-left"){this.hudRoot.setAttribute("data-visible","true");let i=r==="top-right"?" translate(-100%, 0%)":"";this.hudRoot.style.transform=`translate3d(${Math.round(t)}px, ${Math.round(e)}px, 0)${i}`,this.syncPanelPlacement()}setAnchorVisible(t){this.hudRoot.setAttribute("data-visible",t?"true":"false")}isHUDOpen(){return this.isOpen}isLayoutSettingsPanelOpen(){return this.isLayoutSettingsOpen}setEnabled(t){this.enabled=t,t||this.hide(),this.hudRoot.style.display=t?"":"none"}isEnabled(){return this.enabled}createHudRoot(){return Rt()}createTrigger(){let t=tt({icon:"settings",label:"Open layout guides",modifiers:["toggle"],attrs:{"data-devguides-id":"layout","data-open":"false","data-state":"visible","data-active":"false","aria-expanded":"false"}});return t.addEventListener("click",e=>{e.stopPropagation(),this.toggle()}),t}createMainPanel(){let t=oe(),e=ae();this.layoutTitle=document.createElement("input"),this.layoutTitle.setAttribute("data-stdg-input",""),this.layoutTitle.setAttribute("data-stdg-panel-title",""),this.layoutTitle.type="text",this.layoutTitle.value=this.panelTitleValue,this.layoutTitle.addEventListener("blur",()=>{let n=this.layoutTitle.value.trim()||"Layout";n!==this.panelTitleValue&&(this.panelTitleValue=n,this.onRenamePanelTitle(n)),this.layoutTitle.value=n}),this.layoutTitle.addEventListener("keydown",n=>{n.stopPropagation(),n.key==="Enter"&&this.layoutTitle.blur(),n.key==="Escape"&&(this.layoutTitle.value=this.panelTitleValue.trim()||"Layout",this.layoutTitle.blur())}),this.layoutTitle.addEventListener("click",n=>{n.stopPropagation(),this.startLayoutTitleRename()}),this.layoutSettingsToggle=tt({icon:"options",label:"Layout Settings",modifiers:["toggle","left"],attrs:{"data-active":"false"}}),this.layoutSettingsToggle.addEventListener("click",n=>{n.stopPropagation(),this.isLayoutSettingsOpen?this.closeLayoutPanel():this.openLayoutPanel()});let r=tt({icon:"close",label:"Close layout guides",modifiers:["right"]});r.addEventListener("click",n=>{n.stopPropagation(),this.hide()}),this.headerAddButton=tt({icon:"plus",label:"Add Layout Guide",modifiers:["toggle","left"],attrs:{"data-active":"false"}}),this.headerAddButton.addEventListener("click",n=>{n.stopPropagation(),this.openAddPanel()}),e.appendChild(this.layoutTitle),e.appendChild(this.headerAddButton),e.appendChild(r);let i=document.createElement("div");return i.setAttribute("data-stdg-panel-responsive",""),this.layoutChipTabs=document.createElement("div"),this.layoutChipTabs.setAttribute("data-stdg-panel-list",""),i.appendChild(this.layoutSettingsToggle),i.appendChild(this.layoutChipTabs),this.listContainer=le({"data-string-grid-list":""}),this.addGuideButton=Ht({icon:"plus",label:"Add Layout Guide",withLabel:!0,attrs:{"data-active":"false"}}),this.addGuideButton.addEventListener("click",n=>{n.stopPropagation(),this.openAddPanel()}),this.listContainer.appendChild(this.addGuideButton),t.appendChild(e),t.appendChild(i),t.appendChild(this.listContainer),t}createAddPanel(){let t=oe({"data-panel":"add"}),e=ae(),r=tt({icon:"close",label:"Close panel",modifiers:["right"]});return r.addEventListener("click",i=>{i.stopPropagation(),this.closeAddPanel()}),e.appendChild(r),this.addGridList=le({"data-string-grid-add-grid-list":"","data-stdg-panel-content-50":""}),this.renderAddPanelList(),t.appendChild(e),t.appendChild(this.addGridList),t}renderAddPanelList(){if(this.addGridList.innerHTML="",this.adapterRegistry.size===0){let t=document.createElement("div");t.setAttribute("data-string-grid-add-grid-empty",""),t.textContent="No layout guides available",this.addGridList.appendChild(t);return}for(let[,t]of this.adapterRegistry){let e=Ht({icon:"",label:t.label,withLabel:!0});e.innerHTML=`${t.icon.replace("<svg","<svg data-stdg-icon-16")}<span>${t.label}</span>`,e.addEventListener("click",r=>{r.stopPropagation(),this.onAdd(t.type),this.closeAddPanel()}),this.addGridList.appendChild(e)}}createLayoutPanel(){let t=oe({"data-panel":"layout"}),e=ae();this.layoutAddButton=tt({icon:"plus",label:"Add Layout Guide",modifiers:["toggle","left"],attrs:{"data-active":"false"}}),this.layoutAddButton.addEventListener("click",o=>{o.stopPropagation(),this.onAddLayout()});let r=tt({icon:"close",label:"Close panel",modifiers:["right"]});r.addEventListener("click",o=>{o.stopPropagation(),this.closeLayoutPanel()}),e.appendChild(this.layoutAddButton),e.appendChild(r),this.layoutSettingsList=le(),this.layoutIOActions=le({"data-stdg-panel-content-50":""});let i=Ht({icon:"export",label:"Export",withLabel:!0,attrs:{"data-io":"export"}});i.addEventListener("click",o=>{o.stopPropagation(),this.onExport()});let n=Ht({icon:"import",label:"Import",withLabel:!0,attrs:{"data-io":"import"}});n.addEventListener("click",o=>{o.stopPropagation(),this.onImport()}),this.layoutIOActions.appendChild(i),this.layoutIOActions.appendChild(n);let s=document.createElement("span");return s.setAttribute("data-stdg-panel-hr",""),t.appendChild(e),t.appendChild(this.layoutSettingsList),t.appendChild(s),t.appendChild(this.layoutIOActions),t}createDetailPanel(){let t=oe({"data-panel":"detail"}),e=ae();this.detailIcon=document.createElement("span"),this.detailIcon.setAttribute("data-stdg-holder-icon-16",""),this.detailIcon.setAttribute("data-stdg-button-left",""),this.detailTitle=document.createElement("span"),this.detailTitle.addEventListener("click",i=>{i.stopPropagation(),this.startDetailRename()});let r=tt({icon:"close",label:"Close detail panel",modifiers:["right"]});return r.addEventListener("click",i=>{i.stopPropagation(),this.closeDetailPanel()}),e.appendChild(this.detailIcon),e.appendChild(this.detailTitle),e.appendChild(r),this.detailContent=document.createElement("div"),this.detailContent.setAttribute("data-string-dev-detail-body",""),t.appendChild(e),t.appendChild(this.detailContent),t}renderLayoutChips(){this.layoutChipTabs.innerHTML="";let t=e=>{this.selectedLayoutId=e,this.renderLayoutChips(),this.renderLayoutSettings()};[...this.layouts].reverse().forEach(e=>{let r=Ht({icon:"",label:`Select ${e.label} layout`});r.innerHTML=`<span>${e.label}</span>`,r.setAttribute("data-active",String(e.id===this.selectedLayoutId)),r.setAttribute("data-resolved",String(e.id===this.resolvedLayoutId)),r.setAttribute("data-mode",e.label),r.addEventListener("click",i=>{i.stopPropagation(),t(e.id),this.onSelectLayout(e.id)}),this.layoutChipTabs.appendChild(r)}),this.layoutSettingsToggle.setAttribute("data-active",String(this.isLayoutSettingsOpen))}renderLayoutSettings(){this.layoutSettingsList.innerHTML="",this.layoutAddButton.style.display=this.layouts.length>=4?"none":"";let{breakpointsRow:t,inputField:e}=this.createBreakpointWidget();this.layoutSettingsList.appendChild(t),this.layoutSettingsList.appendChild(e)}createBreakpointWidget(){let t=[...this.layouts].reverse(),e=t.length>2,r=document.createElement("div");r.setAttribute("data-stdg-panel-breakpoints","");let i=document.createElement("div");i.setAttribute("data-stdg-panel-field","");let n=`st-dg-break-${Date.now()}`,s=document.createElement("span");s.innerHTML=V(16,"break","second");let o=document.createElement("input");o.id=n,o.type="number",o.inputMode="numeric",o.step="1",o.min="1",o.setAttribute("data-stdg-input","");let a=document.createElement("label");a.htmlFor=n,a.setAttribute("data-stdg-field-input-disable",""),a.textContent="px",i.appendChild(s),i.appendChild(o),i.appendChild(a);let d=null,c=null,u=0,p=(h,f,b,y=!1)=>{c?.setAttribute("data-active","false"),d=h,c=b,u=f,this.selectedBreakpointLayoutId=h,b.setAttribute("data-active","true"),o.value=String(f),y&&(o.focus(),o.select())},g=()=>{if(!d||!o.isConnected)return;let h=Number.parseInt(o.value,10);if(Number.isFinite(h)&&h>=0){if(h===u)return;u=h,this.onUpdateLayoutMinWidth(d,h)}else o.value=String(u)};o.addEventListener("keydown",h=>{if(h.stopPropagation(),h.key==="Enter"){g();return}h.key==="Escape"&&(o.value=String(u),o.blur())}),o.addEventListener("blur",()=>requestAnimationFrame(g)),o.addEventListener("click",h=>h.stopPropagation());let m=null;if(t.forEach((h,f)=>{let b=document.createElement("div");b.setAttribute("data-stdg-panel-breakpoint-value","");let y=document.createElement("span");if(y.textContent=h.label,b.appendChild(y),e&&f>=2){let v=yi(`Remove ${h.label} layout`);v.addEventListener("pointerdown",S=>S.stopPropagation()),v.addEventListener("click",S=>{S.preventDefault(),S.stopPropagation(),this.layouts.length>2&&this.onRemoveLayout(h.id)}),b.appendChild(v)}if(r.appendChild(b),f<t.length-1){let v=t[f+1],S=document.createElement("button");S.type="button",S.setAttribute("data-stdg-button",""),S.setAttribute("data-stdg-panel-breakpoint-marker",""),S.setAttribute("data-active","false"),S.setAttribute("aria-label",`Edit ${v.label} breakpoint`);let E=document.createElement("span");E.textContent=String(v.minWidth),S.appendChild(E),S.addEventListener("click",M=>{M.stopPropagation(),p(v.id,v.minWidth,S,!0)}),r.appendChild(S),(this.selectedBreakpointLayoutId===v.id||m===null&&this.selectedBreakpointLayoutId===null)&&(m={layoutId:v.id,value:v.minWidth,el:S})}}),m!==null){let h=m;p(h.layoutId,h.value,h.el)}return{breakpointsRow:r,inputField:i}}syncChipRowStates(){this.layoutChipTabs.querySelectorAll("[data-stdg-panel-button][data-mode]").forEach(e=>{let r=e.getAttribute("data-mode"),i=this.layouts.find(n=>n.label===r);i&&(e.setAttribute("data-active",String(i.id===this.selectedLayoutId)),e.setAttribute("data-resolved",String(i.id===this.resolvedLayoutId)))})}renderList(){for(;this.addGuideButton.nextSibling;)this.listContainer.removeChild(this.addGuideButton.nextSibling);for(let e of this.instances){let r=this.adapterRegistry.get(e.type);if(!r)continue;let i=document.createElement("div");i.setAttribute("data-stdg-panel-list-item",""),i.setAttribute("data-stdg-button",""),i.setAttribute("data-stdg-button-toggle",""),i.setAttribute("data-active",String(e.id===this.selectedInstanceId)),i.innerHTML=`${V(16,"grab","second")}${r.icon.replace("<svg","<svg data-stdg-icon-16")}<span>${e.name?.trim()||r.label}</span>`;let n=this.createToggle(e.visible,()=>this.onToggle(e.id)),s=yi(`Remove ${e.name?.trim()||"instance"}`);s.addEventListener("click",o=>{o.stopPropagation(),this.selectedInstanceId===e.id&&this.closeDetailPanel(),this.onRemove(e.id)}),i.appendChild(n),i.appendChild(s),i.addEventListener("click",()=>{this.selectedInstanceId===e.id?this.closeDetailPanel():this.selectInstance(e.id)}),i.setAttribute("draggable","true"),i.addEventListener("dragstart",o=>{o.stopPropagation(),o.dataTransfer?.setData("text/plain",e.id),i.setAttribute("data-dragging","true")}),i.addEventListener("dragend",()=>{i.removeAttribute("data-dragging"),this.listContainer.querySelectorAll("[data-drag-over]").forEach(o=>o.removeAttribute("data-drag-over"))}),i.addEventListener("dragover",o=>{o.preventDefault(),o.stopPropagation();let a=i.getBoundingClientRect(),d=o.clientY<a.top+a.height/2?"before":"after";this.listContainer.querySelectorAll("[data-drag-over]").forEach(c=>c.removeAttribute("data-drag-over")),i.setAttribute("data-drag-over",d)}),i.addEventListener("dragleave",o=>{i.contains(o.relatedTarget)||i.removeAttribute("data-drag-over")}),i.addEventListener("drop",o=>{o.preventDefault(),o.stopPropagation();let a=o.dataTransfer?.getData("text/plain");if(i.removeAttribute("data-drag-over"),!a||a===e.id)return;let d=i.getBoundingClientRect(),c=o.clientY<d.top+d.height/2?"before":"after";this.onReorder(a,e.id,c)}),this.listContainer.appendChild(i)}this.addGuideButton.setAttribute("data-empty",String(this.instances.length===0));let t=this.instances.length>0;this.addGuideButton.style.display=t?"none":"",this.headerAddButton.style.display=t?"":"none"}renderDetailPanel(){if(!this.selectedInstanceId){this.hideDetailPanelUI();return}let t=this.instances.find(i=>i.id===this.selectedInstanceId);if(!t){this.clearSelection();return}let e=this.adapterRegistry.get(t.type);if(!e){this.clearSelection();return}this.detailIcon&&(this.detailIcon.innerHTML=e.icon.replace("<svg","<svg data-stdg-icon-16 data-stdg-icon-second")),this.detailTitle&&(this.detailTitle.textContent=t.name?.trim()||e.label),this.detailBuilder?.destroy(),this.detailBuilder=new _r;let r=this.detailBuilder.build(e.getUISchema(),t.settings,(i,n)=>this.onSettingChange(t.id,i,n));for(;this.detailContent.firstChild;)this.detailContent.removeChild(this.detailContent.firstChild);this.detailContent.appendChild(r),this.detailPanel.setAttribute("data-open","true"),this.alignDetailPanel(),this.syncPanelPlacement()}createToggle(t,e){let r=document.createElement("label");r.setAttribute("data-stdg-toggle",""),r.setAttribute("data-checked",String(t));let i=document.createElement("input");i.type="checkbox",i.checked=t,i.setAttribute("data-stdg-toggle-input",""),i.addEventListener("change",s=>{s.stopPropagation(),e()});let n=document.createElement("span");return n.setAttribute("data-stdg-toggle-knob",""),r.addEventListener("click",s=>s.stopPropagation()),r.appendChild(i),r.appendChild(n),r}startDetailRename(){if(!this.selectedInstanceId||!this.detailTitle)return;let t=this.instances.find(o=>o.id===this.selectedInstanceId);if(!t)return;let e=this.adapterRegistry.get(t.type);if(!e)return;let r=t.name?.trim()||e.label,i=this.detailTitle.parentElement;if(!i)return;let n=document.createElement("input");n.setAttribute("data-stdg-input",""),n.type="text",n.value=r;let s=()=>{let o=n.value.trim();o!==r&&this.onRenameInstance(t.id,o),i.contains(n)&&i.replaceChild(this.detailTitle,n)};n.addEventListener("blur",s),n.addEventListener("keydown",o=>{o.key==="Enter"&&n.blur(),o.key==="Escape"&&(n.value=r,n.blur())}),n.addEventListener("click",o=>o.stopPropagation()),n.addEventListener("pointerdown",o=>o.stopPropagation()),i.replaceChild(n,this.detailTitle),n.focus(),n.select()}startLayoutTitleRename(){this.layoutTitle.select()}openAddPanel(){this.isAddPanelOpen=!0,this.closeLayoutPanel(),this.clearSelection(),this.renderAddPanelList(),this.addPanel.setAttribute("data-open","true"),this.syncPanelPlacement()}closeAddPanel(){this.isAddPanelOpen=!1,this.addPanel.setAttribute("data-open","false"),this.syncPanelPlacement()}openLayoutPanel(){this.isLayoutSettingsOpen=!0,this.closeAddPanel(),this.clearSelection(),this.layoutPanel.setAttribute("data-open","true"),this.renderLayoutChips(),this.alignLayoutPanel(),this.syncPanelPlacement(),this.onLayoutPanelOpen()}closeLayoutPanel(){this.isLayoutSettingsOpen=!1,this.layoutPanel.setAttribute("data-open","false"),this.renderLayoutChips(),this.syncPanelPlacement(),this.onLayoutPanelClose()}alignLayoutPanel(){if(this.isMobilePanelMode()){this.layoutPanel.style.removeProperty("top");return}if(this.hudRoot.getAttribute("data-target-id")==="__global__"){this.layoutPanel.style.removeProperty("top");return}let t=this.layoutSettingsToggle.getBoundingClientRect(),e=this.panel.getBoundingClientRect();this.layoutPanel.style.top=`${t.top-e.top}px`}selectInstance(t){this.selectedInstanceId=t,this.closeLayoutPanel(),this.closeAddPanel(),this.renderList(),this.renderDetailPanel()}closeDetailPanel(){this.clearSelection(),this.renderList()}clearSelection(){this.selectedInstanceId=null,this.hideDetailPanelUI()}hideDetailPanelUI(){let t=this.detailBuilder;this.detailBuilder=null,this.detailPanel.setAttribute("data-open","false"),this.syncPanelPlacement(),window.setTimeout(()=>{this.detailPanel.getAttribute("data-open")==="false"&&(t?.destroy(),this.detailContent.innerHTML="",this.detailPanel.style.removeProperty("top"))},220)}alignDetailPanel(){if(this.isMobilePanelMode()){this.detailPanel.style.removeProperty("top");return}if(this.hudRoot.getAttribute("data-target-id")==="__global__"){this.detailPanel.style.removeProperty("top");return}let t=this.listContainer.querySelector('[data-stdg-panel-list-item][data-active="true"]');if(!t)return;let e=t.getBoundingClientRect(),r=this.panel.getBoundingClientRect();this.detailPanel.style.top=`${e.top-r.top}px`}show(){this.isOpen=!0,this.panel.setAttribute("data-open","true"),this.trigger.setAttribute("data-active","true"),this.trigger.setAttribute("aria-expanded","true"),this.syncPanelPlacement(),this.onHUDOpen()}hide(){this.isOpen=!1,this.panel.setAttribute("data-open","false"),this.closeAddPanel(),this.closeDetailPanel(),this.closeLayoutPanel(),this.trigger.setAttribute("data-active","false"),this.trigger.setAttribute("aria-expanded","false"),this.syncPanelPlacement(),this.onHUDClose()}toggle(){this.enabled&&(this.isOpen?this.hide():this.show())}isMobilePanelMode(){return typeof window>"u"?!1:window.matchMedia("(max-width: 1024px), (pointer: coarse)").matches}syncPanelPlacement(){if(!this.isMobilePanelMode()){this.panelInBody&&(this.panel.removeAttribute("data-mobile-sheet"),this.panel.style.removeProperty("position"),this.panel.style.removeProperty("bottom"),this.hudRoot.appendChild(this.panel),this.panelInBody=!1),this.hudRoot.setAttribute("data-mobile-sheet","false"),this.panel.style.removeProperty("left"),this.panel.style.removeProperty("top"),this.panel.style.removeProperty("width"),this.panel.style.removeProperty("height"),this.panel.style.removeProperty("max-height");return}if(!this.isOpen)return;this.panelInBody||((document.body??document.documentElement).appendChild(this.panel),this.panelInBody=!0);let e=window.visualViewport,r=e?.width??window.innerWidth,i=e?.height??window.innerHeight,n=Math.max(220,r-wi*2),s=Math.max(120,i-wi*2),o=Math.min(vo,n),a=Math.min(bo,s),d=Math.round((e?.offsetLeft??0)+(r-o)/2);this.hudRoot.setAttribute("data-mobile-sheet","true"),this.panel.setAttribute("data-mobile-sheet","true"),this.panel.style.position="fixed",this.panel.style.left=`${d}px`,this.panel.style.bottom=`${wi}px`,this.panel.style.removeProperty("top"),this.panel.style.width=`${Math.round(o)}px`,this.panel.style.maxHeight=`${Math.round(a)}px`,this.panel.style.removeProperty("height"),this.addPanel.style.removeProperty("top"),this.layoutPanel.style.removeProperty("top"),this.detailPanel.style.removeProperty("top")}onDocumentPointerDown(t){if(!this.isOpen)return;let e=t.target;e instanceof Node&&(this.panel.contains(e)||this.trigger.contains(e)||this.addPanel.contains(e)||this.layoutPanel.contains(e)||this.detailPanel.contains(e)||this.hide())}};var Mt=class{static VERSION=2;static serialize(t,e){return{v:this.VERSION,source:"StringDevLayout",selectedLayout:e,layouts:t.map(r=>({id:r.id,label:r.label,minWidth:r.minWidth,grids:r.instances.map(i=>({id:i.id,type:i.type,visible:i.visible,...i.name!==void 0?{name:i.name}:{},settings:{...i.settings}}))}))}}static deserialize(t,e){if(!t||typeof t!="object")return null;let r=t,i=r.v,n=r.source;if(n!=="StringDevLayout"&&n!=="StringGrid"||i!==1&&i!==2||!Array.isArray(r.layouts))return null;let s=r.layouts.filter(d=>!!d&&typeof d=="object"&&typeof d.id=="string").map((d,c)=>({id:d.id,label:Ei.includes(d.label)?d.label:"S",minWidth:this.resolveImportedMinWidth(d.minWidth,c),instances:(Array.isArray(d.grids)?d.grids:[]).filter(u=>!!u&&typeof u=="object"&&typeof u.type=="string"&&e.has(u.type)).map(u=>{let p=u.type,g=e.get(p);return{id:typeof u.id=="string"?u.id:Pr(),type:p,visible:u.visible!==!1,...typeof u.name=="string"&&u.name?{name:u.name}:{},settings:{...g.getDefaults(),...u.settings&&typeof u.settings=="object"&&!Array.isArray(u.settings)?u.settings:{}}}})}));if(s.length===0)return null;s.sort((d,c)=>c.minWidth-d.minWidth);let o=typeof r.selectedLayout=="string"?r.selectedLayout:typeof r.activeLayout=="string"?r.activeLayout:s[0].id,a=s.some(d=>d.id===o)?o:s[0].id;return{layouts:s,selectedLayoutId:a}}static toFile(t,e){let r=JSON.stringify(e,null,2),i=new Blob([r],{type:"application/json"}),n=URL.createObjectURL(i),s=document.createElement("a");s.href=n,s.download=t,s.click(),URL.revokeObjectURL(n)}static fromFile(){return new Promise((t,e)=>{let r=document.createElement("input");r.type="file",r.accept=".json,application/json";let i=()=>r.remove();r.addEventListener("change",()=>{let n=r.files?.[0];if(!n){i(),e(new Error("No file selected"));return}let s=new FileReader;s.onload=()=>{i();try{t(JSON.parse(s.result))}catch{e(new Error("Invalid JSON"))}},s.onerror=()=>{i(),e(new Error("File read error"))},s.readAsText(n)}),r.addEventListener("cancel",()=>{i(),e(new Error("Cancelled"))}),document.body.appendChild(r),r.click()})}static resolveImportedMinWidth(t,e){return typeof t=="number"&&Number.isFinite(t)?de(t):[1280,1024,768,0][e]??Math.max(0,1280-e*256)}};var Fr="http://www.w3.org/2000/svg",G=class{clear(t,e){let r=t.querySelector(`[data-grid-id="${e}"]`);r&&r.remove()}getGroup(t,e){let r=t.querySelector(`[data-grid-id="${e}"]`);return r||(r=document.createElementNS(Fr,"g"),r.setAttribute("data-grid-id",e),t.appendChild(r)),r}createLine(t,e,r,i,n,s,o=1){let a=document.createElementNS(Fr,"line");return a.setAttribute("data-string-grid-shape","line"),a.setAttribute("x1",String(t)),a.setAttribute("y1",String(e)),a.setAttribute("x2",String(r)),a.setAttribute("y2",String(i)),a.setAttribute("stroke",n),a.setAttribute("stroke-opacity",String(s)),a.setAttribute("stroke-width",String(o)),a}createRect(t,e,r,i,n,s){let o=document.createElementNS(Fr,"rect");return o.setAttribute("data-string-grid-shape","rect"),o.setAttribute("x",String(t)),o.setAttribute("y",String(e)),o.setAttribute("width",String(r)),o.setAttribute("height",String(i)),o.setAttribute("fill",n),o.setAttribute("fill-opacity",String(s)),o}resolveUnit(t,e,r,i){let n=parseFloat(getComputedStyle(document.documentElement).fontSize)||16,s=i instanceof Element&&parseFloat(getComputedStyle(i).fontSize)||n;switch(e){case"%":return t/100*r;case"vw":return t/100*window.innerWidth;case"vh":return t/100*window.innerHeight;case"em":return t*s;case"rem":return t*n;default:return t}}createPath(t,e,r,i=1,n="none"){let s=document.createElementNS(Fr,"path");return s.setAttribute("data-string-grid-shape","path"),s.setAttribute("d",t),s.setAttribute("stroke",e),s.setAttribute("stroke-opacity",String(r)),s.setAttribute("stroke-width",String(i)),s.setAttribute("fill",n),s}};var Vr=class l extends G{type="columns";label="Columns";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="7" y="3" width="2" height="10" fill="currentColor"/><rect x="3" y="3" width="2" height="10" fill="currentColor"/><rect x="11" y="3" width="2" height="10" fill="currentColor"/></svg>';static UNIT_OPTIONS=[{value:"px",label:"px"},{value:"%",label:"%"},{value:"vw",label:"vw"},{value:"vh",label:"vh"},{value:"em",label:"em"},{value:"rem",label:"rem"}];getDefaults(){return{count:12,gap:20,gapUnit:"px",margin:0,marginUnit:"px",color:"#4a90e2",opacity:.15,showLines:!1}}getUISchema(){return[{type:"number",key:"count",label:"Columns",default:12,min:1,max:48,step:1},{type:"range",key:"gap",label:"Gap",default:20,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"range",key:"margin",label:"Margin",default:0,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#4a90e2"},{type:"range",key:"opacity",label:"Opacity",default:.15,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10},{type:"toggle",key:"showLines",label:"Lines only",default:!1}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{count:s,gap:o,gapUnit:a,margin:d,marginUnit:c,color:u,opacity:p,showLines:g}=i,m=t.parentElement,h=this.resolveUnit(o,a||"px",e,m),f=this.resolveUnit(d,c||"px",e,m),b=e-f*2,y=(s-1)*h,v=(b-y)/s;if(!(v<=0))for(let S=0;S<s;S++){let E=f+S*(v+h);g?(n.appendChild(this.createLine(E,0,E,r,u,p)),n.appendChild(this.createLine(E+v,0,E+v,r,u,p))):n.appendChild(this.createRect(E,0,v,r,u,p))}}};var Wr=class l extends G{type="rows";label="Rows";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="3" width="10" height="2" fill="currentColor"/><rect x="3" y="7" width="10" height="2" fill="currentColor"/><rect x="3" y="11" width="10" height="2" fill="currentColor"/></svg>';static UNIT_OPTIONS=[{value:"px",label:"px"},{value:"%",label:"%"},{value:"vh",label:"vh"},{value:"vw",label:"vw"},{value:"em",label:"em"},{value:"rem",label:"rem"}];getDefaults(){return{mode:"count",count:8,size:24,sizeUnit:"px",gap:0,gapUnit:"px",margin:0,marginUnit:"px",color:"#e2784a",opacity:.2,style:"line"}}getUISchema(){return[{type:"select",key:"mode",label:"Mode",default:"count",options:[{value:"count",label:"By count"},{value:"size",label:"By size"}]},{type:"number",key:"count",label:"Rows",default:8,min:1,max:48,step:1,disabledWhen:{key:"mode",equals:"size"}},{type:"range",key:"size",label:"Size",default:24,min:0,max:1200,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px",disabledWhen:{key:"mode",equals:"count"}},{type:"range",key:"gap",label:"Gap",default:0,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"range",key:"margin",label:"Margin",default:0,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#e2784a"},{type:"range",key:"opacity",label:"Opacity",default:.2,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10},{type:"select",key:"style",label:"Style",default:"line",options:[{value:"line",label:"Lines"},{value:"fill",label:"Fill"}]}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{mode:s,count:o,size:a,sizeUnit:d,gap:c,gapUnit:u,margin:p,marginUnit:g,color:m,opacity:h,style:f}=i,b=t.parentElement,y=this.resolveUnit(c,u||"px",r,b),v=this.resolveUnit(p,g||"px",r,b),S=r-v*2;if(!(S<=0))if(s==="count")this.renderByCount(n,e,S,v,o,y,m,h,f);else{let E=this.resolveUnit(a,d||"px",r,b);if(E<=0)return;this.renderBySize(n,e,S,v,E,y,m,h,f)}}renderByCount(t,e,r,i,n,s,o,a,d){if(d==="fill"){let c=(r-(n-1)*s)/n;if(c<=0)return;for(let u=0;u<n;u++){let p=i+u*(c+s);t.appendChild(this.createRect(0,p,e,c,o,a))}}else{if(n===1){let u=i+r/2;t.appendChild(this.createLine(0,u,e,u,o,a));return}let c=r/(n-1);for(let u=0;u<n;u++){let p=i+u*c;t.appendChild(this.createLine(0,p,e,p,o,a))}}}renderBySize(t,e,r,i,n,s,o,a,d){if(d==="fill"){let c=n+s;for(let u=0;u<r;u+=c){let p=Math.min(n,r-u);t.appendChild(this.createRect(0,i+u,e,p,o,a))}}else for(let c=0;c<=r;c+=n)t.appendChild(this.createLine(0,i+c,e,i+c,o,a))}};var Nr=class extends G{type="center";label="Center";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="3" width="10" height="10" rx="3" fill="currentColor"/><path d="M8 2V14" stroke="white"/><path d="M2 8H14" stroke="white"/></svg>';getDefaults(){return{showVertical:!0,showHorizontal:!0,color:"#50e24a",opacity:.5,dashed:!0}}getUISchema(){return[{type:"toggle",key:"showVertical",label:"Vertical",default:!0},{type:"toggle",key:"showHorizontal",label:"Horizontal",default:!0},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#50e24a"},{type:"range",key:"opacity",label:"Opacity",default:.5,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10},{type:"toggle",key:"dashed",label:"Dashed",default:!0}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{showVertical:s,showHorizontal:o,color:a,opacity:d,dashed:c}=i,u=c?"6 3":"none";if(s){let p=this.createLine(e/2,0,e/2,r,a,d);c&&p.setAttribute("stroke-dasharray",u),n.appendChild(p)}if(o){let p=this.createLine(0,r/2,e,r/2,a,d);c&&p.setAttribute("stroke-dasharray",u),n.appendChild(p)}}};var zr=class extends G{type="rule-of-thirds";label="3\xD73";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="4" height="4" fill="currentColor"/><path d="M6 3.6C6 3.03995 6 2.75992 6.10899 2.54601C6.20487 2.35785 6.35785 2.20487 6.54601 2.10899C6.75992 2 7.03995 2 7.6 2H8.4C8.96005 2 9.24008 2 9.45399 2.10899C9.64215 2.20487 9.79513 2.35785 9.89101 2.54601C10 2.75992 10 3.03995 10 3.6V5H6V3.6Z" fill="currentColor"/><path d="M6 11H10V12.4C10 12.9601 10 13.2401 9.89101 13.454C9.79513 13.6422 9.64215 13.7951 9.45399 13.891C9.24008 14 8.96005 14 8.4 14H7.6C7.03995 14 6.75992 14 6.54601 13.891C6.35785 13.7951 6.20487 13.6422 6.10899 13.454C6 13.2401 6 12.9601 6 12.4V11Z" fill="currentColor"/><path d="M2 7.6C2 7.03995 2 6.75992 2.10899 6.54601C2.20487 6.35785 2.35785 6.20487 2.54601 6.10899C2.75992 6 3.03995 6 3.6 6H5V10H3.6C3.03995 10 2.75992 10 2.54601 9.89101C2.35785 9.79513 2.20487 9.64215 2.10899 9.45399C2 9.24008 2 8.96005 2 8.4V7.6Z" fill="currentColor"/><path d="M11 6H12.4C12.9601 6 13.2401 6 13.454 6.10899C13.6422 6.20487 13.7951 6.35785 13.891 6.54601C14 6.75992 14 7.03995 14 7.6V8.4C14 8.96005 14 9.24008 13.891 9.45399C13.7951 9.64215 13.6422 9.79513 13.454 9.89101C13.2401 10 12.9601 10 12.4 10H11V6Z" fill="currentColor"/></svg>';getDefaults(){return{color:"#e2e24a",opacity:.4,showIntersections:!0}}getUISchema(){return[{type:"color",key:"color",label:"Color",default:"#e2e24a"},{type:"range",key:"opacity",label:"Opacity",default:.4,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10},{type:"toggle",key:"showIntersections",label:"Show points",default:!0}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{color:s,opacity:o,showIntersections:a}=i,d=e/3,c=r/3;if(n.appendChild(this.createLine(d,0,d,r,s,o)),n.appendChild(this.createLine(d*2,0,d*2,r,s,o)),n.appendChild(this.createLine(0,c,e,c,s,o)),n.appendChild(this.createLine(0,c*2,e,c*2,s,o)),a){let u=[[d,c],[d*2,c],[d,c*2],[d*2,c*2]];for(let[p,g]of u){let m=document.createElementNS("http://www.w3.org/2000/svg","circle");m.setAttribute("cx",String(p)),m.setAttribute("cy",String(g)),m.setAttribute("r","3"),m.setAttribute("fill",s),m.setAttribute("fill-opacity",String(o*1.5)),n.appendChild(m)}}}};var xi=1.6180339887,Gr=class extends G{type="golden-rectangle";label="Golden";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="3" width="10" height="10" rx="3" fill="currentColor"/><path d="M9 13V3" stroke="white"/><path d="M13 9H9" stroke="white"/></svg>';getDefaults(){return{depth:8,showSpiral:!0,color:"#e2a44a",opacity:.4}}getUISchema(){return[{type:"number",key:"depth",label:"Depth",default:8,min:2,max:14,step:1},{type:"toggle",key:"showSpiral",label:"Show spiral",default:!0},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#e2a44a"},{type:"range",key:"opacity",label:"Opacity",default:.4,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{depth:s,showSpiral:o,color:a,opacity:d}=i,c,u;e/r>=xi?(u=r,c=u*xi):(c=e,u=c/xi);let p=(e-c)/2,g=(r-u)/2;if(c<e-1||u<r-1){let S=this.createPath(`M ${p} ${g} L ${p+c} ${g} L ${p+c} ${g+u} L ${p} ${g+u} Z`,a,d*.3,1);S.setAttribute("stroke-dasharray","6 4"),n.appendChild(S)}let m=p,h=g,f=c,b=u,y="",v=!0;for(let S=0;S<s&&!(f<1||b<1);S++){let E=S%4,M=Math.min(f,b),C,A;switch(E){case 0:{C=m+f-M,A=h,f-M>.5&&n.appendChild(this.createLine(C,h,C,h+b,a,d)),o&&(v&&(y=`M ${C+M} ${A}`,v=!1),y+=` A ${M} ${M} 0 0 1 ${C} ${A+M}`),f-=M;break}case 1:{C=m,A=h+b-M,b-M>.5&&n.appendChild(this.createLine(m,A,m+f,A,a,d)),o&&(v&&(y=`M ${C+M} ${A+M}`,v=!1),y+=` A ${M} ${M} 0 0 1 ${C} ${A}`),b-=M;break}case 2:{C=m,A=h,f-M>.5&&n.appendChild(this.createLine(m+M,h,m+M,h+b,a,d)),o&&(v&&(y=`M ${C} ${A+M}`,v=!1),y+=` A ${M} ${M} 0 0 1 ${C+M} ${A}`),m+=M,f-=M;break}case 3:{C=m,A=h,b-M>.5&&n.appendChild(this.createLine(m,h+M,m+f,h+M,a,d)),o&&(v&&(y=`M ${C} ${A}`,v=!1),y+=` A ${M} ${M} 0 0 1 ${C+M} ${A+M}`),h+=M,b-=M;break}}}o&&y&&n.appendChild(this.createPath(y,a,d*.8,1.5))}};var Ci="http://www.w3.org/2000/svg",$r=class l extends G{static MAX_DOT_CELLS=12e4;static MAX_CROSS_CELLS=8e4;type="dot-grid";label="Dots";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="11" y="3" width="2" height="2" fill="currentColor"/><rect x="11" y="7" width="2" height="2" fill="currentColor"/><rect x="11" y="11" width="2" height="2" fill="currentColor"/><rect x="7" y="3" width="2" height="2" fill="currentColor"/><rect x="7" y="7" width="2" height="2" fill="currentColor"/><rect x="7" y="11" width="2" height="2" fill="currentColor"/><rect x="3" y="3" width="2" height="2" fill="currentColor"/><rect x="3" y="7" width="2" height="2" fill="currentColor"/><rect x="3" y="11" width="2" height="2" fill="currentColor"/></svg>';static UNIT_OPTIONS=[{value:"px",label:"px"},{value:"%",label:"%"},{value:"vw",label:"vw"},{value:"vh",label:"vh"},{value:"em",label:"em"},{value:"rem",label:"rem"}];getDefaults(){return{step:16,stepUnit:"px",dotSize:1.5,shape:"dot",color:"#a0a0a0",opacity:.4}}getUISchema(){return[{type:"range",key:"step",label:"Step",default:16,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"range",key:"dotSize",label:"Size",default:1.5,min:.5,max:6,step:.5},{type:"select",key:"shape",label:"Shape",default:"dot",options:[{value:"dot",label:"Dot \u25CF"},{value:"cross",label:"Cross +"}]},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#a0a0a0"},{type:"range",key:"opacity",label:"Opacity",default:.4,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{step:s,stepUnit:o,dotSize:a,shape:d,color:c,opacity:u}=i,p=this.resolveUnit(s,o||"px",Math.min(e,r),t.parentElement),g=this.getSafeStep(e,r,p,d);if(g<2)return;let m=this.getPatternId(i.__instanceId),h=this.getDefs(t),f=document.createElementNS(Ci,"pattern");f.setAttribute("id",m),f.setAttribute("data-string-grid-pattern-for",i.__instanceId),f.setAttribute("patternUnits","userSpaceOnUse"),f.setAttribute("width",String(g)),f.setAttribute("height",String(g)),f.setAttribute("x",String(g/2)),f.setAttribute("y",String(g/2));let b=g/2;if(d==="cross")f.appendChild(this.createLine(b-a*2,b,b+a*2,b,c,u,.8)),f.appendChild(this.createLine(b,b-a*2,b,b+a*2,c,u,.8));else{let v=document.createElementNS(Ci,"circle");v.setAttribute("cx",String(b)),v.setAttribute("cy",String(b)),v.setAttribute("r",String(a)),v.setAttribute("fill",c),v.setAttribute("fill-opacity",String(u)),f.appendChild(v)}h.appendChild(f);let y=this.createRect(0,0,e,r,`url(#${m})`,1);y.setAttribute("fill-opacity","1"),n.appendChild(y)}clear(t,e){super.clear(t,e),t.querySelector(`[data-string-grid-pattern-for="${e}"]`)?.remove()}getDefs(t){let e=t.querySelector("defs");return e||(e=document.createElementNS(Ci,"defs"),t.insertBefore(e,t.firstChild)),e}getPatternId(t){return`string-grid-dot-pattern-${t.replace(/[^a-zA-Z0-9_-]/g,"-")}`}getSafeStep(t,e,r,i){let s=Math.max(r,2),o=i==="cross"?l.MAX_CROSS_CELLS:l.MAX_DOT_CELLS;return Math.floor(t/s)*Math.floor(e/s)<=o?s:Math.max(s,Math.sqrt(t*e/o))}};var Ur="string-devtools-overlay-layout:change";var Ti=class{entries=new Map;register(t,e,r=1){this.entries.set(t,{order:e,badgeCount:r})}unregister(t){this.entries.delete(t)}resolveAnchor(t,e,r){let i=this.getSorted(),n=i.findIndex(o=>o.id===t),s=0;for(let o=0;o<n;o+=1)s+=i[o].badgeCount;return{docX:e+0+s*31,docY:r+0}}resolveCollisionOffset(t,e,r,i){let n=[],s=t.parentElement;for(;s;){let d=s.getAttribute("string-id")??s.getAttribute("data-string-id");if(d){let c=i(d);c&&n.push(c)}s=s.parentElement}let o=0,a=!0;for(;a;){a=!1;for(let d of n)if(Math.abs(d.docX-e)<50&&Math.abs(d.docY-(r+o))<31){o+=33,a=!0;break}}return o}emitLayoutChange(){window.dispatchEvent(new CustomEvent(Ur))}getSorted(){let t=[];for(let[e,r]of this.entries)t.push({id:e,...r});return t.sort((e,r)=>e.order!==r.order?e.order-r.order:e.id.localeCompare(r.id)),t}},et=new Ti;function Ln(){return`
1283
+ `,t.addEventListener("click",()=>{this.setCollapsed(!this.collapsed)}),t}setCollapsed(t,e=!0){if(this.collapsed=t,this.root.setAttribute("data-collapsed",t?"true":"false"),this.mainButton.setAttribute("data-collapsed",t?"true":"false"),this.mainButton.setAttribute("aria-label",t?"Expand developer tools":"Collapse developer tools"),t){this.suppressPersist=!0;for(let r of this.entries.values())r.definition.getState().active&&r.definition.setActive(!1);this.suppressPersist=!1}else{this.suppressPersist=!0;for(let r of this.entries.values())this.preferences.active[r.definition.id]===!0&&r.definition.setActive(!0);this.suppressPersist=!1}e&&(this.preferences.collapsed=t,this.savePreferences()),this.syncCollapsedLayout()}syncCollapsedLayout(){let t=ot(window.innerWidth).compact,e=t?this.toolsWrap.scrollHeight:this.toolsWrap.scrollWidth;this.toolsWrap.style.maxHeight=t?this.collapsed?"0px":`${e}px`:"",this.toolsWrap.style.maxWidth=t?"":this.collapsed?"0px":`${e}px`,this.toolsWrap.style.opacity=this.collapsed?"0":"1",this.toolsWrap.style.pointerEvents=this.collapsed?"none":"auto"}handleViewportChange(){this.syncCollapsedLayout();for(let t of this.entries.values())t.subBadges&&t.subBadges.getAttribute("data-open")==="true"&&this.positionSubBadges(t.slot,t.subBadges)}renderButton(t,e,r,i){let n=hn(r),s=n?`${e} (${n})`:e;t.setAttribute("data-active",i.active?"true":"false"),t.setAttribute("aria-label",`${s}: ${i.active?"On":"Off"}`),t.title=`${s}: ${i.active?"On":"Off"}`}syncSubBadgeState(t,e,r){let i=r?"true":"false";if(t.setAttribute("data-active",i),!!e){e.setAttribute("data-parent-active",i);for(let n of e.querySelectorAll("[data-stdg-dock-sub-badge]"))n.setAttribute("data-parent-active",i),n.setAttribute("aria-disabled",r?"false":"true")}}applyStoredActiveState(t){let e=this.preferences.active[t.id];if(typeof e!="boolean")return;let r=this.collapsed?!1:e;r!==t.getState().active&&t.setActive(r)}persistActiveState(t,e){this.suppressPersist||this.collapsed||(this.preferences.active[t]=e,this.savePreferences())}loadPreferences(){try{let t=localStorage.getItem(this.dockStorageKey);if(!t)return{collapsed:!1,active:{}};let e=JSON.parse(t);return{collapsed:e.collapsed===!0,active:e.active&&typeof e.active=="object"?e.active:{}}}catch{return{collapsed:!1,active:{}}}}savePreferences(){try{localStorage.setItem(this.dockStorageKey,JSON.stringify(this.preferences))}catch{}}get dockStorageKey(){return it(zs)}};var Lr=class{definitions=new Map;dock=null;register(t){!t||this.definitions.has(t.id)||(this.definitions.set(t.id,t),this.dock||(this.dock=new Sr),this.dock.add(t))}setFPS(t){this.dock?.setFPS(t)}destroy(){this.definitions.clear(),this.dock?.destroy(),this.dock=null}};var Er=class extends x{constructor(t){super(t),this.htmlKey="scroller"}onObjectConnected(t){let e=t.getProperty("scroller-inited");if(e==null||e==""){t.setProperty("scroller-inited","inited");let r=i=>{this.events.emit("wheel",i)};t.setProperty("scroller-wheel-event",r),t.htmlElement.addEventListener("wheel",r)}}onObjectDisconnected(t){t.setProperty("scroller-inited",""),t.htmlElement.removeEventListener("wheel",t.getProperty("scroller-wheel-event"))}};var Mr=class extends x{states=new WeakMap;wheelHandlers=new WeakMap;scrollHandlers=new WeakMap;constructor(t){super(t),this.htmlKey="scroll-container",this.attributesToMap.push({key:"lerp",type:"number",fallback:.1})}onObjectConnected(t){super.onObjectConnected(t);let e=t.htmlElement;getComputedStyle(e).overflowY==="visible"&&(e.style.overflowY="auto");let r={current:e.scrollTop,target:e.scrollTop,maxScroll:e.scrollHeight-e.clientHeight,velocity:0,lerp:t.getProperty("lerp")||.1,isDragging:!1,isActive:!1},i=s=>this.handleWheel(s,e,r),n=s=>this.onNativeScroll(s,e,r);this.states.set(e,r),this.wheelHandlers.set(e,i),this.scrollHandlers.set(e,n),e.addEventListener("wheel",i,{passive:!1}),e.addEventListener("scroll",n,{passive:!0}),this.measure(e,r)}onObjectDisconnected(t){let e=t.htmlElement,r=this.wheelHandlers.get(e),i=this.scrollHandlers.get(e);r&&e.removeEventListener("wheel",r),i&&e.removeEventListener("scroll",i),this.wheelHandlers.delete(e),this.scrollHandlers.delete(e),this.states.delete(e)}onFrame(t){for(let e of this.objectsOnPage){let r=e.htmlElement,i=this.states.get(r);i&&this.data.scroll.mode==="smooth"&&i.isActive&&!i.isDragging&&this.updateScroll(r,i)}}onResize(){for(let t of this.objectsOnPage){let e=t.htmlElement,r=this.states.get(e);r&&(this.measure(e,r),this.data.scroll.mode!=="smooth"&&(r.isActive=!1,r.current=e.scrollTop,r.target=e.scrollTop))}}onScrollConfigChange(){for(let t of this.objectsOnPage){let e=t.htmlElement,r=this.states.get(e);r&&(r.isActive=!1,r.current=e.scrollTop,r.target=e.scrollTop)}}measure(t,e){e.maxScroll=t.scrollHeight-t.clientHeight}handleWheel(t,e,r){if(this.data.scroll.mode!=="smooth"){r.isActive=!1;return}let i=t.deltaY,n=i<0,s=i>0,o=r.target<=.1,a=r.target>=r.maxScroll-.1;n&&o||s&&a||(t.preventDefault(),t.stopPropagation(),r.target+=i,r.target=Math.max(0,Math.min(r.target,r.maxScroll)),r.isActive=!0,r.isDragging=!1)}onWheel(t){}onNativeScroll(t,e,r){(this.data.scroll.mode!=="smooth"||!r.isActive)&&(r.current=e.scrollTop,r.target=e.scrollTop)}updateScroll(t,e){let r=e.target-e.current;Math.abs(r)<.1?(e.current=e.target,e.isActive=!1):e.current+=r*e.lerp,t.scrollTop=e.current}};function mn(l){let t=l.match(/([^[]+)\[([\d.]+)-([\d.]+)\]/);return t?{id:t[1],start:parseFloat(t[2]),end:parseFloat(t[3])}:null}function js(l,t,e,r,i){return r+(i-r)*(l-t)/(e-t)}var wr=class extends x{constructor(t){super(t),this.htmlKey="progress-part",this.attributesToMap=[...this.attributesToMap,{key:"part-of",type:"string",fallback:""},{key:"easing",type:"easing",fallback:this.settings.easing}]}onObjectConnected(t){let e=t.getProperty("part-of"),r=mn(e);if(r){t.setProperty("part-of-id",r.id),t.setProperty("start",r.start),t.setProperty("end",r.end);let i=n=>{if(r){let s=js(n,r?.start,r?.end,0,1),o=Math.max(0,Math.min(1,s)),a=t.getProperty("easing"),d=typeof a=="function"?a(o):o;t.htmlElement.style.setProperty("--progress-slice",d.toString()),this.emitSignal(t,"progress-slice",d),this.events.emit(this.getObjectEventName(t,"object:progress-slice"),d)}};t.setProperty("progress-event",i),this.events.on(`object:progress:${r.id}`,i)}}onObjectDisconnected(t){let e=t.getProperty("part-of-id");e&&this.events.off(`object:progress:${e}`,t.getProperty("progress-event"))}};var Ys=/^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\s*(>=|<=|==|!=|>|<)\s*(-?(?:\d+\.?\d*|\d*\.?\d+))$/,qs=/^(.*?)\s*=>\s*([a-z.]+)\((.*)\)$/;function fn(l){return l.split(";").map(t=>t.trim()).filter(Boolean).flatMap(t=>{let e=t.match(qs);if(!e)return[];let[,r,i,n]=e,s=Xs(r.trim());if(!s.length)return[];let o=Zs(i.trim(),n.trim());return o?[{groups:s,effect:o,raw:t}]:[]})}function Xs(l){return l.split(/\s*\|\|\s*/).filter(Boolean).map(t=>t.split(/\s*&&\s*/).filter(Boolean).map(Ks)).filter(t=>t.length>0&&t.every(Boolean))}function Ks(l){let t=l.match(Ys);if(!t)return null;let[,e,r,i,n]=t,s=parseFloat(n);return Number.isFinite(s)?{sourceId:e,signal:r,operator:i,threshold:s,raw:l}:null}function Zs(l,t){let e=Qs(t);switch(l){case"toggle.class":return e[0]?{type:"class-toggle",key:e[0]}:null;case"class.add":return e[0]?{type:"class-add",key:e[0]}:null;case"class.remove":return e[0]?{type:"class-remove",key:e[0]}:null;case"style.set":return e[0]&&e[1]?{type:"style-set",key:e[0],value:e[1]}:null;case"style.remove":return e[0]?{type:"style-remove",key:e[0]}:null;case"var.set":return e[0]&&e[1]?{type:"var-set",key:e[0],value:e[1]}:null;case"var.remove":return e[0]?{type:"var-remove",key:e[0]}:null;default:return null}}function Qs(l){return l.split(",").map(t=>t.trim()).filter(Boolean)}var xr=class extends x{constructor(t){super(t),this.htmlKey="signal",this.attributesToMap=[...this.attributesToMap,{key:"signal",type:"string",fallback:""}]}onObjectConnected(t){let e=t.getProperty("signal");if(!e)return;let r=fn(e);if(r.length===0)return;let i=[];t.setProperty("signal-rules",i);for(let n=0;n<r.length;n++){let s=r[n],o={rule:s,callbacks:[],previousState:null},a=()=>{this.applyRuleState(t,o)};for(let{sourceId:d,signal:c}of ro(s))o.callbacks.push({sourceId:d,signal:c,callback:a}),this.signals.subscribe(d,c,this.events,a);i.push(o),this.applyRuleState(t,o)}}onObjectDisconnected(t){let e=t.getProperty("signal-rules");if(e)for(let r=0;r<e.length;r++){let i=e[r];for(let n=0;n<i.callbacks.length;n++){let s=i.callbacks[n];this.signals.unsubscribe(s.sourceId,s.signal,this.events,s.callback)}i.rule.effect.type==="class-toggle"&&this.resetEffect(t,i.rule.effect)}}applyRuleState(t,e){let r=Js(e.rule,this.signals);e.previousState!==r&&(e.previousState=r,L.run(()=>{this.applyEffectState(t,e.rule.effect,r)}))}applyEffectState(t,e,r){e.type==="class-toggle"?r?this.applyEffect(t,e):this.resetEffect(t,e):r&&this.applyEffect(t,e)}applyEffect(t,e){this.applyToElementAndConnects(t,r=>io(r,e))}resetEffect(t,e){this.applyToElementAndConnects(t,r=>no(r,e))}};function Js(l,t){for(let e=0;e<l.groups.length;e++){let r=l.groups[e],i=!0;for(let n=0;n<r.length;n++)if(!to(r[n],t)){i=!1;break}if(i)return!0}return!1}function to(l,t){let e=t.get(l.sourceId,l.signal);return typeof e!="number"||!Number.isFinite(e)?!1:eo(e,l.operator,l.threshold)}function eo(l,t,e){switch(t){case">":return l>e;case">=":return l>=e;case"<":return l<e;case"<=":return l<=e;case"==":return l===e;case"!=":return l!==e}}function ro(l){let t=new Set,e=[];for(let r of l.groups)for(let{sourceId:i,signal:n}of r){let s=`${i}::${n}`;t.has(s)||(t.add(s),e.push({sourceId:i,signal:n}))}return e}function io(l,t){switch(t.type){case"class-toggle":case"class-add":l.classList.add(t.key);return;case"class-remove":l.classList.remove(t.key);return;case"style-set":L.setProp(l,t.key,t.value);return;case"style-remove":case"var-remove":l.style.removeProperty(t.key);return;case"var-set":L.setVar(l,t.key,t.value);return}}function no(l,t){switch(t.type){case"class-toggle":l.classList.remove(t.key);return;default:return}}var so=(l,t)=>{let e=Math.min(l,t),r=Math.max(l,t);return e+Math.random()*(r-e)},oo=(l,t)=>{let e=Math.ceil(Math.min(l,t)),r=Math.floor(Math.max(l,t));return r<e?e:Math.floor(Math.random()*(r-e+1))+e},ao=l=>{if(Array.isArray(l)&&l.length>=2){let t=Number(l[0]),e=Number(l[1]);if(Number.isFinite(t)&&Number.isFinite(e))return[t,e]}return typeof l=="number"&&Number.isFinite(l)?[0,l]:[0,1]},Cr=class extends x{constructor(t){super(t),this.htmlKey="random",this.attributesToMap.push({key:"random-number",type:"json",fallback:"[0,1]"}),this.attributesToMap.push({key:"random-type",type:"string",fallback:"int"})}onObjectConnected(t){let e=t.htmlElement,r=ao(t.getProperty("random-number")),n=String(t.getProperty("random-type")??"float").toLowerCase()==="int"?oo(r[0],r[1]):so(r[0],r[1]);L.run(()=>{L.setVars(e,{"--random":n})})}};var Tr=class{constructor(t,e){this.id=t;this.zIndex=e}screenRoot=null;world=null;screen=null;worldHost=null;hostPositionWasPatched=!1;hostPositionInlineValue=null;ensure(t){if(this.screenRoot?.isConnected)return t&&this.attachWorldToHost(t),this.screenRoot;let e=document.querySelector(`[data-string-dev-viewport-layer="${this.id}"]`);if(e)return this.screenRoot=e,this.screen=e.querySelector(`[data-string-dev-viewport-screen="${this.id}"]`),t&&this.attachWorldToHost(t),e;let r=document.createElement("div");r.setAttribute("data-string-dev-viewport-layer",this.id),r.setAttribute("data-string-devtools-theme",""),r.style.position="fixed",r.style.inset="0",r.style.zIndex=String(this.zIndex),r.style.pointerEvents="none",r.style.overflow="hidden";let i=document.createElement("div");return i.setAttribute("data-string-dev-viewport-screen",this.id),i.style.position="absolute",i.style.inset="0",i.style.pointerEvents="none",i.style.overflow="hidden",r.appendChild(i),(document.body??document.documentElement).appendChild(r),this.screenRoot=r,this.screen=i,this.attachWorldToHost(t??document.body??document.documentElement),r}getElement(){return this.screenRoot?.isConnected?this.screenRoot:null}getWorldElement(t){return this.ensure(t),this.world}getScreenElement(){return this.ensure(),this.screen}destroy(){this.restoreHostPosition(),this.screenRoot?.remove(),this.screenRoot=null,this.world?.remove(),this.world=null,this.screen=null,this.worldHost=null}attachWorldToHost(t){if(this.worldHost===t&&this.world?.isConnected)return;if(this.restoreHostPosition(),this.worldHost=t,!this.world){let r=document.createElement("div");r.setAttribute("data-string-dev-viewport-world",this.id),r.setAttribute("data-string-devtools-theme",""),r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="1px",r.style.height="1px",r.style.pointerEvents="none",r.style.overflow="visible",r.style.zIndex=String(this.zIndex),this.world=r}t!==document.body&&t!==document.documentElement&&window.getComputedStyle(t).position==="static"&&(this.hostPositionWasPatched=!0,this.hostPositionInlineValue=t.style.position||null,t.style.position="relative"),t.appendChild(this.world)}restoreHostPosition(){this.world&&this.world.remove(),this.worldHost&&this.hostPositionWasPatched&&(this.hostPositionInlineValue==null||this.hostPositionInlineValue===""?this.worldHost.style.removeProperty("position"):this.worldHost.style.position=this.hostPositionInlineValue),this.hostPositionWasPatched=!1,this.hostPositionInlineValue=null}};var _t=class l{static instance=null;layers=new Map;static getInstance(){return this.instance||(this.instance=new l),this.instance}acquire(t,e){let r=this.layers.get(t);if(r){if(r.zIndex!==e)throw new Error(`Shared devtools layer "${t}" already exists with z-index ${r.zIndex}, requested ${e}.`);return r.refs+=1,r.layer}let i=new Tr(t,e);return this.layers.set(t,{layer:i,refs:1,zIndex:e}),i}release(t){let e=this.layers.get(t);e&&(e.refs-=1,!(e.refs>0)&&(e.layer.destroy(),this.layers.delete(t)))}};var Z=class extends x{static devtool=null;overlayRegistry=_t.getInstance();acquiredViewportLayers=new Map;devtoolListeners=new Set;hotkeyHandler=null;devtoolConfig=null;constructor(t){super(t),this._type=2,Bt();let e=this.constructor.devtool;e&&(this.configureDevtool(e),this.bindDevtoolHotkey(e.hotkey));let r=e?.styles,i=(typeof r=="function"?r():r)??this.getStyles();i&&this.ensureStyle(`${this.getStyleScopeId(i)}-styles`,i)}get respectSelfDisable(){return!1}get connectsConfig(){return this.constructor.devtool?.connects}canConnect(t){let e=this.connectsConfig;return e?!!(e.global===!0||t.keys.includes("dev-inspect")||e.keys?.some(r=>t.keys.includes(r))||e.attributes?.some(r=>t.htmlElement.hasAttribute(r))):super.canConnect(t)}getStyleScopeId(t){let e=this.htmlKey||this.constructor.devtool?.connects?.keys?.[0];if(e)return e;let r=0;for(let i=0;i<t.length;i+=1)r=r*31+t.charCodeAt(i)>>>0;return`string-dev-${r.toString(16)}`}getStyles(){return null}getDevtoolDefinition(){if(!this.devtoolConfig)return null;let t=this.devtoolConfig,e=this.getDevtoolSubBadges();return{id:t.id,label:t.label,icon:t.icon,order:t.order,group:t.group,hotkey:t.hotkey,subBadges:e.length>0?e:void 0,getState:()=>({active:this.getDevtoolActiveState()}),setActive:r=>{this.setDevtoolActiveState(r)},subscribe:r=>(this.devtoolListeners.add(r),r({active:this.getDevtoolActiveState()}),()=>{this.devtoolListeners.delete(r)})}}getDevtoolSubBadges(){return[]}configureDevtool(t){this.devtoolConfig=t}bindDevtoolHotkey(t){typeof window>"u"||!t||(this.hotkeyHandler=e=>{let r=e.target;r&&(r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement||r instanceof HTMLSelectElement||r.isContentEditable)||e.key.toLowerCase()!==t.key.toLowerCase()||e.shiftKey!==(t.shiftKey??!1)||e.ctrlKey!==(t.ctrlKey??!1)||e.altKey!==(t.altKey??!1)||e.metaKey!==(t.metaKey??!1)||(e.preventDefault(),this.setDevtoolActiveState(!this.getDevtoolActiveState()))},window.addEventListener("keydown",this.hotkeyHandler))}emitDevtoolState(t=this.getDevtoolActiveState()){let e={active:t};for(let r of this.devtoolListeners)r(e)}acquireViewportLayer(t,e){let r=this.acquiredViewportLayers.get(t);if(r)return r;let i=this.overlayRegistry.acquire(t,e);return this.acquiredViewportLayers.set(t,i),i}releaseViewportLayer(t){this.acquiredViewportLayers.has(t)&&(this.overlayRegistry.release(t),this.acquiredViewportLayers.delete(t))}ensureStyle(t,e){let r=document.getElementById(t);if(r instanceof HTMLStyleElement)return r;let i=document.createElement("style");return i.id=t,i.textContent=e,document.head.appendChild(i),i}getWorldHost(){return this.data.scroll.container??document.body??document.documentElement}getDevtoolActiveState(){return!1}setDevtoolActiveState(t){}destroy(){this.hotkeyHandler&&(window.removeEventListener("keydown",this.hotkeyHandler),this.hotkeyHandler=null),this.devtoolListeners.clear();for(let t of this.acquiredViewportLayers.keys())this.overlayRegistry.release(t);this.acquiredViewportLayers.clear(),super.destroy()}};var Ei=["S","M","L","XL"];var lo=[1280,1024,768,0];function vn(l,t){let e=t-1-l;return Ei[e]??"S"}var bn=0;function Pr(){return`grid-${Date.now()}-${bn++}`}function Ar(){return`layout-${Date.now()}-${bn++}`}function kr(l=2){let t=Math.max(2,Math.min(4,l)),e=[];for(let r=0;r<t;r++){let i=vn(r,t),n=r===t-1?0:lo[r]??0;e.push({id:Ar(),label:i,minWidth:n,instances:[]})}return e}function de(l){return Number.isFinite(l)?Math.max(0,Math.round(l)):0}function Ft(l){let t=l.length;for(let e=0;e<t;e++)l[e].label=vn(e,t)}var co="string-grid:";function Mi(l){return it(co+l)}function uo(l){if(!l||typeof l!="object")return 0;if(Array.isArray(l))return l.length;let t=l,e=Array.isArray(t.layouts)?t.layouts:[],r=0;for(let i of e){if(!i||typeof i!="object")continue;let n=i,s=Array.isArray(n.instances)?n.instances:Array.isArray(n.grids)?n.grids:[];r+=s.length}return r}var Or=class{adapterRegistry=new Map;elementStates=new Map;registerAdapter(t){this.adapterRegistry.set(t.type,t)}getAdapter(t){return this.adapterRegistry.get(t)}getAdapterRegistry(){return this.adapterRegistry}getLayouts(t){return this.getOrInitState(t).layouts}getLayoutCount(t){return this.getOrInitState(t).layouts.length}getSelectedLayoutId(t){return this.getOrInitState(t).selectedLayoutId}getPanelTitle(t){return this.getOrInitState(t).panelTitle?.trim()||"Layout"}getSelectedLayoutLabel(t){let e=this.getOrInitState(t);return this.findSelectedLayout(e)?.label??"S"}getResolvedLayoutId(t,e){let r=this.getOrInitState(t);return this.findResolvedLayout(r,e)?.id??r.layouts[r.layouts.length-1].id}getSelectedInstances(t){let e=this.getOrInitState(t);return this.findSelectedLayout(e)?.instances??[]}getResolvedInstances(t,e){let r=this.getOrInitState(t);return this.findResolvedLayout(r,e)?.instances??[]}addLayout(t){let e=this.getOrInitState(t);if(e.layouts.length>=4)return null;let r=e.layouts[0],i=r?Math.min(1920,r.minWidth+256):1280,n={id:Ar(),label:"XL",minWidth:i,instances:[]};return e.layouts.unshift(n),this.sortLayouts(e),Ft(e.layouts),this.ensureMinWidthConstraints(e),e.layouts.some(s=>s.id===e.selectedLayoutId)||(e.selectedLayoutId=e.layouts[0].id),this.save(t),n}removeLayout(t,e){let r=this.getOrInitState(t);if(r.layouts.length<=2)return!1;let i=r.layouts.findIndex(n=>n.id===e);return i===-1?!1:(r.layouts.splice(i,1),Ft(r.layouts),this.ensureMinWidthConstraints(r),r.layouts.some(n=>n.id===r.selectedLayoutId)||(r.selectedLayoutId=r.layouts[r.layouts.length-1].id),this.save(t),!0)}selectLayout(t,e,r=!0){let i=this.getOrInitState(t);i.layouts.some(n=>n.id===e)&&(i.selectedLayoutId=e,r&&this.save(t))}updateLayoutMinWidth(t,e,r,i=!0){let n=this.getOrInitState(t),s=n.layouts.find(o=>o.id===e);s&&(s.minWidth=de(r),this.sortLayouts(n),Ft(n.layouts),this.ensureMinWidthConstraints(n),i&&this.save(t))}replaceLayouts(t,e,r){let i=this.normalizeLayouts(e),n={elementId:t,layouts:i,selectedLayoutId:r};this.ensureValidSelection(n),this.elementStates.set(t,n),this.save(t)}getInstances(t){return this.getSelectedInstances(t)}addInstance(t,e){let r=this.adapterRegistry.get(e);if(!r)return null;let i=this.findSelectedLayout(this.getOrInitState(t));if(!i)return null;let n={id:Pr(),type:e,visible:!0,settings:{...r.getDefaults()}};return i.instances.push(n),this.save(t),n}removeInstance(t,e){let r=this.findSelectedLayout(this.getOrInitState(t));r&&(r.instances=r.instances.filter(i=>i.id!==e),this.save(t))}reorderInstance(t,e,r,i){let n=this.findSelectedLayout(this.getOrInitState(t));if(!n||e===r)return;let s=n.instances.findIndex(u=>u.id===e),o=n.instances.findIndex(u=>u.id===r);if(s===-1||o===-1)return;let[a]=n.instances.splice(s,1),d=n.instances.findIndex(u=>u.id===r),c=i==="before"?d:d+1;n.instances.splice(c,0,a),this.save(t)}moveInstanceToEnd(t,e){let r=this.findSelectedLayout(this.getOrInitState(t));if(!r)return;let i=r.instances.findIndex(s=>s.id===e);if(i===-1||i===r.instances.length-1)return;let[n]=r.instances.splice(i,1);r.instances.push(n),this.save(t)}toggleVisibility(t,e){let r=this.findInstance(t,e);r&&(r.visible=!r.visible,this.save(t))}renameInstance(t,e,r){let i=this.findInstance(t,e);i&&(i.name=r.trim()||void 0,this.save(t))}renamePanelTitle(t,e){let r=this.getOrInitState(t);r.panelTitle=e.trim()||"Layout",this.save(t)}updateSetting(t,e,r,i){let n=this.findInstance(t,e);n&&(n.settings[r]=i,this.save(t))}findInstance(t,e){return this.getSelectedInstances(t).find(r=>r.id===e)}save(t){let e=this.elementStates.get(t);if(e)try{let r={layouts:e.layouts,selectedLayoutId:e.selectedLayoutId,panelTitle:e.panelTitle??"Layout"},i=Mi(t);localStorage.setItem(i,JSON.stringify(r))}catch(r){console.warn("[StringDevLayout:storage] save failed",{elementId:t,storageSlot:Mi(t),error:r})}}load(t,e=[]){try{let r=[t,...e],i=[];for(let p of r){let g=Mi(p),m=localStorage.getItem(g);if(m)try{let h=JSON.parse(m);i.push({elementId:p,storageSlot:g,raw:m,parsed:h,gridCount:uo(h)})}catch(h){console.warn("[StringDevLayout:storage] candidate parse failed",{elementId:t,candidateId:p,storageSlot:g,error:h})}}let n=i[0]??null;for(let p of i)(!n||p.gridCount>n.gridCount)&&(n=p);if(!n)return;let s=n.parsed,o=n.elementId;if(Array.isArray(s)){let p=s.filter(m=>this.adapterRegistry.has(m.type));for(let m of p){let h=this.adapterRegistry.get(m.type);h&&(m.settings={...h.getDefaults(),...m.settings})}let g=kr(2);g[g.length-1].instances=p,this.elementStates.set(t,{elementId:t,layouts:g,selectedLayoutId:g[0].id,panelTitle:"Layout"}),o!==t&&this.save(t);return}let a=Array.isArray(s?.layouts)?s.layouts:null;if(!a)return;let d=this.normalizeLayouts(a);if(d.length===0)return;let c=typeof s?.selectedLayoutId=="string"?s.selectedLayoutId:d[0].id,u={elementId:t,layouts:d,selectedLayoutId:c,panelTitle:typeof s?.panelTitle=="string"&&s.panelTitle.trim().length>0?s.panelTitle.trim():"Layout"};this.ensureValidSelection(u),this.elementStates.set(t,u),o!==t&&this.save(t)}catch{}}clear(){this.elementStates.clear()}getOrInitState(t){let e=this.elementStates.get(t);if(!e){let r=kr(2);e={elementId:t,layouts:r,selectedLayoutId:r[0].id,panelTitle:"Layout"},this.elementStates.set(t,e)}return this.sortLayouts(e),this.ensureValidSelection(e),e}normalizeLayouts(t){let i=t.filter(n=>n&&typeof n=="object"&&typeof n.id=="string").map(n=>{let s=Array.isArray(n.instances)?n.instances:Array.isArray(n.grids)?n.grids:[];return{id:n.id,label:n.label??"S",minWidth:de(typeof n.minWidth=="number"?n.minWidth:0),instances:s.filter(o=>this.adapterRegistry.has(o.type)).map(o=>{let a=this.adapterRegistry.get(o.type);return a?{...o,visible:o.visible!==!1,settings:{...a.getDefaults(),...o.settings}}:o})}}).slice(0,4);for(;i.length<2;)i.push({id:Ar(),label:"S",minWidth:0,instances:[]});return this.sortLayoutsArr(i),Ft(i),this.ensureMinWidthConstraintsArr(i),i}sortLayouts(t){this.sortLayoutsArr(t.layouts)}sortLayoutsArr(t){t.sort((e,r)=>r.minWidth-e.minWidth)}ensureValidSelection(t){t.layouts.length<2&&(t.layouts=kr(2)),t.layouts.length>4&&(t.layouts=t.layouts.slice(0,4),Ft(t.layouts)),t.layouts.some(e=>e.id===t.selectedLayoutId)||(t.selectedLayoutId=t.layouts[t.layouts.length-1].id)}ensureMinWidthConstraints(t){this.ensureMinWidthConstraintsArr(t.layouts)}ensureMinWidthConstraintsArr(t){if(t.length!==0){t[t.length-1].minWidth=0;for(let e=t.length-2;e>=0;e--){let r=t[e+1].minWidth;t[e].minWidth<=r&&(t[e].minWidth=r+1)}}}findSelectedLayout(t){return t.layouts.find(e=>e.id===t.selectedLayoutId)}findResolvedLayout(t,e){for(let r of t.layouts)if(e>=r.minWidth)return r;return t.layouts[t.layouts.length-1]}};var po="http://www.w3.org/2000/svg",ue=class{svg;target;resizeObserver;enabled=!0;onResize;constructor(t,e,r){this.target=t,this.onResize=r,this.svg=document.createElementNS(po,"svg"),this.svg.setAttribute("data-string-grid-overlay",""),this.svg.style.position="absolute",this.svg.style.pointerEvents="none",this.svg.style.transformOrigin="top left",e.appendChild(this.svg),this.syncViewBox(),this.resizeObserver=new ResizeObserver(()=>{this.syncViewBox(),this.onResize?.()}),this.resizeObserver.observe(this.target)}getElement(){return this.svg}setPosition(t,e,r,i){this.svg.style.width=`${r}px`,this.svg.style.height=`${i}px`,this.svg.style.transform=`translate3d(${Math.round(t)}px, ${Math.round(e)}px, 0)`}render(t,e){if(this.clearAll(),!this.enabled)return;let{width:r,height:i}=this.getDimensions();for(let n of[...t].reverse()){let s=e.get(n.type);if(s&&n.visible){s.render(this.svg,r,i,{...n.settings,__instanceId:n.id});let o=this.svg.querySelector(`[data-grid-id="${n.id}"]`);o&&(o.setAttribute("data-grid-type",n.type),o.setAttribute("data-grid-visible","true"))}}}setEnabled(t){this.enabled=t,this.svg.style.display=t?"":"none",t||this.clearAll()}clearAll(){let t=this.svg.querySelectorAll("[data-grid-id]");for(let e=t.length-1;e>=0;e--)t[e].remove()}clearInstance(t,e){e.clear(this.svg,t)}syncViewBox(){let{width:t,height:e}=this.getDimensions();this.svg.setAttribute("viewBox",`0 0 ${t} ${e}`)}getDimensions(){return{width:this.target.offsetWidth,height:this.target.offsetHeight}}destroy(){this.resizeObserver.disconnect(),this.svg.remove()}ensurePositioned(){getComputedStyle(this.target).position==="static"&&(this.target.style.position="relative")}};var Q=class{key;label;value;onChange;root=null;constructor(t,e,r,i){this.key=t,this.label=e,this.value=r,this.onChange=i}setDisabled(t){this.root&&this.root.setAttribute("data-disabled",t?"true":"false")}getValue(){return this.value}destroy(){this.root?.remove(),this.root=null}emit(t){this.value=t,this.onChange(this.key,t)}createLabel(){let t=document.createElement("label");return t.textContent=this.label,t.setAttribute("data-stdg-label",""),t}createRow(){let t=document.createElement("div");return t.setAttribute("data-stdg-panel-field",""),t}};var go=320,ho=60,yn=6,Dr=class extends Q{min;max;step;input=null;stepperButtons=[];constructor(t,e,r,i,n=0,s=100,o=1){super(t,e,r,i),this.min=n,this.max=s,this.step=o}build(){let t=this.createRow();return t.appendChild(this.createLabel()),t.appendChild(this.createControls()),this.root=t,t}setValue(t){this.value=t,this.input&&(this.input.value=this.formatValue(t))}setDisabled(t){super.setDisabled(t),this.input&&(this.input.disabled=t);for(let e of this.stepperButtons)e.disabled=t}createControls(){let t=document.createElement("div");t.setAttribute("data-stdg-field-input","");let e=document.createElement("div");return e.setAttribute("data-stdg-stepper",""),e.appendChild(this.createStepperButton("up",1)),e.appendChild(this.createStepperButton("down",-1)),t.appendChild(this.createInput()),t.appendChild(e),t}createInput(){let t=document.createElement("input");return t.type="text",t.inputMode="text",t.setAttribute("enterkeyhint","done"),t.autocomplete="off",t.spellcheck=!1,t.value=this.formatValue(this.value),t.setAttribute("data-stdg-input",""),t.addEventListener("focus",()=>{t.select()}),t.addEventListener("blur",()=>{this.commitValue(t.value)}),t.addEventListener("keydown",e=>{if(e.key==="Enter"){t.blur();return}if(e.key==="Escape"){t.value=this.formatValue(this.value),t.blur();return}e.key!=="ArrowUp"&&e.key!=="ArrowDown"||(e.preventDefault(),this.applyDelta(e.key==="ArrowUp"?1:-1,e))}),t.addEventListener("wheel",e=>{document.activeElement===t&&(e.preventDefault(),this.applyDelta(e.deltaY<0?1:-1,e))}),t.addEventListener("mousedown",e=>{e.button===1&&this.startMiddleDrag(e,t)}),t.addEventListener("auxclick",e=>{e.button===1&&e.preventDefault()}),this.input=t,t}createStepperButton(t,e){let r=document.createElement("button");r.type="button",r.setAttribute("data-stdg-button",""),r.setAttribute("data-stdg-button-icon-12",""),r.setAttribute("data-direction",t),r.innerHTML=V(12,t==="up"?"chevrone-up":"chevrone-down");let i=0,n=0,s=!1,o=()=>{window.clearTimeout(i),window.clearInterval(n),document.removeEventListener("pointerup",o),document.removeEventListener("pointercancel",o)};return r.addEventListener("pointerdown",a=>{a.button===0&&(i=window.setTimeout(()=>{s=!0,this.applyDelta(e),n=window.setInterval(()=>{this.applyDelta(e)},ho)},go),document.addEventListener("pointerup",o),document.addEventListener("pointercancel",o))}),r.addEventListener("click",a=>{if(s){s=!1,a.preventDefault();return}this.applyDelta(e),this.input?.focus(),this.input?.select()}),this.stepperButtons.push(r),r}startMiddleDrag(t,e){t.preventDefault();let r=t.clientX,i=0,n=document.body.style.cursor,s=document.body.style.userSelect;document.body.style.cursor="ew-resize",document.body.style.userSelect="none";let o=()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",o),document.body.style.cursor=n,document.body.style.userSelect=s},a=d=>{let c=d.clientX-r;for(r=d.clientX,i+=c;Math.abs(i)>=yn;){let u=i>0?1:-1;this.applyDelta(u,d),i-=yn*u}};e.focus(),e.select(),document.addEventListener("mousemove",a),document.addEventListener("mouseup",o)}commitValue(t){let e=parseFloat(t.replace(",","."));if(isNaN(e)){this.input&&(this.input.value=this.formatValue(this.value));return}let r=this.normalizeValue(e);this.input&&(this.input.value=this.formatValue(r)),this.emit(r)}applyDelta(t,e){let r=e?.shiftKey?10:e?.altKey?.1:1,i=this.normalizeValue(this.value+t*this.step*r);this.input&&(this.input.value=this.formatValue(i)),this.emit(i)}normalizeValue(t){let e=Math.round(t/this.step)*this.step,r=this.getPrecision(this.step);return Number(e.toFixed(r))}getPrecision(t){return String(t).split(".")[1]?.length??0}formatValue(t){let e=this.getPrecision(this.step);return e>0?t.toFixed(e):String(t)}};var mo=320,fo=60,Sn=6,Ir=class l extends Q{min;max;step;displayMultiplier;displayStep;suffix;units;currentUnit;valueInput=null;unitSelect=null;stepperButtons=[];static DECIMAL_UNITS=new Set(["rem","em"]);constructor(t,e,r,i,n=0,s=100,o=1,a=1,d,c,u,p){super(t,e,r,i),this.min=n,this.max=s,this.step=o,this.displayMultiplier=a,this.displayStep=d,this.suffix=c,this.units=u,this.currentUnit=p}build(){let t=this.createRow();return t.appendChild(this.createLabel()),t.appendChild(this.createControls()),this.root=t,t}setValue(t){this.value=t,this.valueInput&&(this.valueInput.value=this.formatValue(t))}setDisabled(t){super.setDisabled(t),this.valueInput&&(this.valueInput.disabled=t),this.unitSelect&&(this.unitSelect.disabled=t);for(let e of this.stepperButtons)e.disabled=t}createControls(){let t=document.createElement("div");t.setAttribute("data-stdg-field-input","");let e=document.createElement("div");if(e.setAttribute("data-stdg-field-value",""),e.appendChild(this.createInput()),this.suffix){let i=document.createElement("span");i.setAttribute("data-stdg-field-suffix",""),i.textContent=this.suffix,e.appendChild(i)}if(t.appendChild(e),this.units&&this.units.length>0){let i=document.createElement("select");i.setAttribute("data-stdg-select","");for(let n of this.units){let s=document.createElement("option");s.value=n.value,s.textContent=n.label,i.appendChild(s)}i.value=this.currentUnit||this.units[0].value,i.addEventListener("change",()=>{this.currentUnit=i.value,this.valueInput&&(this.valueInput.value=this.formatValue(this.value)),this.onChange(this.key+"Unit",i.value)}),this.unitSelect=i,t.appendChild(i)}let r=document.createElement("div");return r.setAttribute("data-stdg-stepper",""),r.appendChild(this.createStepperButton("up",1)),r.appendChild(this.createStepperButton("down",-1)),t.appendChild(r),t}createInput(){let t=document.createElement("input");return t.type="text",t.inputMode="text",t.setAttribute("enterkeyhint","done"),t.autocomplete="off",t.spellcheck=!1,t.value=this.formatValue(this.value),t.setAttribute("data-stdg-input",""),t.addEventListener("focus",()=>{t.select()}),t.addEventListener("blur",()=>{this.commitInputValue(t)}),t.addEventListener("keydown",e=>{e.key==="Enter"?t.blur():e.key==="Escape"?(t.value=this.formatValue(this.value),t.blur()):(e.key==="ArrowUp"||e.key==="ArrowDown")&&(e.preventDefault(),this.applyDelta(e.key==="ArrowUp"?1:-1,e,t))}),t.addEventListener("wheel",e=>{document.activeElement===t&&(e.preventDefault(),this.applyDelta(e.deltaY<0?1:-1,e,t))}),t.addEventListener("mousedown",e=>{e.button===1&&this.startMiddleDrag(e,t)}),t.addEventListener("auxclick",e=>{e.button===1&&e.preventDefault()}),this.valueInput=t,t}createStepperButton(t,e){let r=document.createElement("button");r.type="button",r.setAttribute("data-stdg-button",""),r.setAttribute("data-stdg-button-icon-12",""),r.setAttribute("data-direction",t),r.innerHTML=V(12,t==="up"?"chevrone-up":"chevrone-down");let i=0,n=0,s=!1,o=()=>{window.clearTimeout(i),window.clearInterval(n),document.removeEventListener("pointerup",o),document.removeEventListener("pointercancel",o)};return r.addEventListener("pointerdown",a=>{a.button===0&&(i=window.setTimeout(()=>{s=!0,this.valueInput&&(this.applyDelta(e,void 0,this.valueInput),n=window.setInterval(()=>{this.valueInput&&this.applyDelta(e,void 0,this.valueInput)},fo))},mo),document.addEventListener("pointerup",o),document.addEventListener("pointercancel",o))}),r.addEventListener("click",a=>{if(s){s=!1,a.preventDefault();return}this.valueInput&&(this.applyDelta(e,void 0,this.valueInput),this.valueInput.focus(),this.valueInput.select())}),this.stepperButtons.push(r),r}startMiddleDrag(t,e){t.preventDefault();let r=t.clientX,i=0,n=document.body.style.cursor,s=document.body.style.userSelect;document.body.style.cursor="ew-resize",document.body.style.userSelect="none";let o=()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",o),document.body.style.cursor=n,document.body.style.userSelect=s},a=d=>{let c=d.clientX-r;for(r=d.clientX,i+=c;Math.abs(i)>=Sn;){let u=i>0?1:-1;this.applyDelta(u,d,e),i-=Sn*u}};e.focus(),e.select(),document.addEventListener("mousemove",a),document.addEventListener("mouseup",o)}commitInputValue(t){let e=parseFloat(t.value.replace(",","."));if(isNaN(e)){t.value=this.formatValue(this.value);return}let r=this.normalizeDisplayValue(e);t.value=this.formatValue(r),this.emit(r)}applyDelta(t,e,r){let i=e?.shiftKey?10:e?.altKey?.1:1,n=this.modelToDisplay(this.value)+t*this.getDisplayStep()*i,s=this.normalizeDisplayValue(n);r.value=this.formatValue(s),this.emit(s)}normalizeValue(t){let e=Math.min(this.max,Math.max(this.min,t));if(l.DECIMAL_UNITS.has(this.currentUnit??""))return Number(e.toFixed(2));let r=Math.round(e/this.step)*this.step,i=this.getPrecision(this.step);return Number(r.toFixed(i))}normalizeDisplayValue(t){let e=this.modelToDisplay(this.min),r=this.modelToDisplay(this.max),i=Math.min(r,Math.max(e,t)),n=this.getDisplayPrecision();if(l.DECIMAL_UNITS.has(this.currentUnit??"")){let d=Number(i.toFixed(n));return this.normalizeValue(this.displayToModel(d))}let s=this.getDisplayStep(),o=Math.round(i/s)*s,a=Number(o.toFixed(n));return this.normalizeValue(this.displayToModel(a))}getPrecision(t){return String(t).split(".")[1]?.length??0}formatValue(t){let e=this.modelToDisplay(t),r=this.getDisplayPrecision();return r>0?e.toFixed(r):String(e)}modelToDisplay(t){let e=this.getDisplayPrecision();return Number((t*this.displayMultiplier).toFixed(e))}displayToModel(t){return t/this.displayMultiplier}getDisplayStep(){return this.displayStep??this.step*this.displayMultiplier}getDisplayPrecision(){if(l.DECIMAL_UNITS.has(this.currentUnit??""))return 2;let t=this.getDisplayStep();return t<1?Math.max(2,this.getPrecision(t)):0}};var Rr=class extends Q{colorInput=null;hexLabel=null;build(){let t=this.createRow();return t.appendChild(this.createLabel()),t.appendChild(this.createControl()),this.root=t,t}setValue(t){this.value=t,this.colorInput&&(this.colorInput.value=t),this.hexLabel&&(this.hexLabel.value=t)}setDisabled(t){super.setDisabled(t),this.colorInput&&(this.colorInput.disabled=t),this.hexLabel&&(this.hexLabel.disabled=t)}createControl(){let t=document.createElement("div");t.setAttribute("data-stdg-field-input","");let e=document.createElement("input");e.type="color",e.value=this.value,e.setAttribute("data-stdg-input",""),e.setAttribute("data-stdg-input-color","");let r=document.createElement("input");return r.type="text",r.inputMode="text",r.value=this.value,r.setAttribute("data-stdg-input",""),e.addEventListener("input",()=>{r.value=e.value,this.emit(e.value)}),r.addEventListener("change",()=>{let i=r.value.trim();e.value=i,this.emit(i)}),this.colorInput=e,this.hexLabel=r,t.appendChild(e),t.appendChild(r),t}};var Hr=class extends Q{options;select=null;stepperButtons=[];constructor(t,e,r,i,n){super(t,e,r,i),this.options=n}build(){let t=this.createRow();return t.appendChild(this.createLabel()),t.appendChild(this.createControl()),this.root=t,t}setValue(t){this.value=t,this.select&&(this.select.value=t)}setDisabled(t){super.setDisabled(t),this.select&&(this.select.disabled=t);for(let e of this.stepperButtons)e.disabled=t}createControl(){let t=document.createElement("div");t.setAttribute("data-stdg-field-input","");let e=document.createElement("select");e.setAttribute("data-stdg-select","");for(let i of this.options){let n=document.createElement("option");n.value=i.value,n.textContent=i.label,i.value===this.value&&(n.selected=!0),e.appendChild(n)}e.addEventListener("change",()=>{this.emit(e.value)}),this.select=e;let r=document.createElement("div");return r.setAttribute("data-stdg-stepper",""),r.appendChild(this.createStepperButton("up",-1)),r.appendChild(this.createStepperButton("down",1)),t.appendChild(e),t.appendChild(r),t}createStepperButton(t,e){let r=document.createElement("button");return r.type="button",r.setAttribute("data-stdg-button",""),r.setAttribute("data-stdg-button-icon-12",""),r.setAttribute("data-direction",t),r.innerHTML=V(12,t==="up"?"chevrone-up":"chevrone-down"),r.addEventListener("click",()=>{if(!this.select)return;let i=this.select.options.length;if(i===0)return;let s=((this.select.selectedIndex+e)%i+i)%i;this.select.selectedIndex=s,this.emit(this.select.value)}),this.stepperButtons.push(r),r}};var Br=class extends Q{checkbox=null;toggle=null;build(){let t=this.createRow();t.appendChild(this.createLabel());let e=document.createElement("label");e.setAttribute("data-stdg-toggle",""),e.setAttribute("data-checked",String(this.value));let r=document.createElement("input");r.type="checkbox",r.checked=this.value,r.setAttribute("data-stdg-toggle-input",""),this.checkbox=r,this.toggle=e;let i=document.createElement("span");return i.setAttribute("data-stdg-toggle-knob",""),r.addEventListener("change",()=>{let n=r.checked;this.value=n,e.setAttribute("data-checked",String(n)),this.emit(n)}),e.appendChild(r),e.appendChild(i),t.appendChild(e),this.root=t,t}setValue(t){this.value=t,this.checkbox&&(this.checkbox.checked=t),this.toggle?.setAttribute("data-checked",String(t))}setDisabled(t){super.setDisabled(t),this.checkbox&&(this.checkbox.disabled=t),this.toggle?.setAttribute("aria-disabled",t?"true":"false")}};var _r=class{fields=[];fieldEntries=[];values={};build(t,e,r){this.destroy(),this.values={...e};let i=(o,a)=>{this.values[o]=a,this.syncDisabledStates(),r(o,a)},n=document.createDocumentFragment(),s=document.createElement("div");s.setAttribute("data-stdg-panel-content",""),n.appendChild(s);for(let o of t){if(o.type==="divider"){s=document.createElement("div"),s.setAttribute("data-stdg-panel-content",""),n.appendChild(s);continue}let a=this.createField(o,e,i);a&&(this.fields.push(a),this.fieldEntries.push({descriptor:o,field:a}),s.appendChild(a.build()))}return this.syncDisabledStates(),n}updateValues(t){this.values={...this.values,...t};for(let e of this.fields){let r=e.key;r&&r in t&&e.setValue(t[r])}this.syncDisabledStates()}destroy(){for(let t of this.fields)t.destroy();this.fields=[],this.fieldEntries=[],this.values={}}createField(t,e,r){switch(t.type){case"number":return new Dr(t.key,t.label,e[t.key]??t.default,r,t.min,t.max,t.step);case"range":return new Ir(t.key,t.label,e[t.key]??t.default,r,t.min,t.max,t.step,t.displayMultiplier,t.displayStep,t.suffix,t.units,e[t.key+"Unit"]??t.defaultUnit);case"color":return new Rr(t.key,t.label,e[t.key]??t.default,r);case"select":return new Hr(t.key,t.label,e[t.key]??t.default,r,t.options);case"toggle":return new Br(t.key,t.label,e[t.key]??t.default,r);default:return null}}syncDisabledStates(){for(let t of this.fieldEntries){let e=t.descriptor.disabledWhen,r=!!e&&this.values[e.key]===e.equals;t.field.setDisabled(r)}}};var wi=12,vo=360,bo=560,pe=class{target;adapterRegistry;hudRoot;trigger;panel;layoutTitle;layoutChipTabs;layoutSettingsToggle;layoutSettingsList;layoutAddButton;layoutIOActions;listContainer;addGuideButton;headerAddButton;addPanel;addGridList;layoutPanel;detailPanel;detailContent;detailTitle=null;detailIcon=null;detailBuilder=null;instances=[];layouts=[];panelTitleValue="Layout";selectedLayoutId="";resolvedLayoutId="";selectedInstanceId=null;selectedBreakpointLayoutId=null;isOpen=!1;panelInBody=!1;isAddPanelOpen=!1;isLayoutSettingsOpen=!1;enabled=!0;onDocumentPointerDownBind;onViewportChangeBind;onAdd;onRemove;onToggle;onSettingChange;onReorder;onMoveToEnd;onSelectLayout;onUpdateLayoutMinWidth;onAddLayout;onRemoveLayout;onExport;onImport;onRenameInstance;onRenamePanelTitle;onHUDOpen;onHUDClose;onLayoutPanelOpen;onLayoutPanelClose;constructor(t,e,r,i){this.target=t,this.adapterRegistry=e,this.onAdd=r.onAdd,this.onRemove=r.onRemove,this.onToggle=r.onToggle,this.onSettingChange=r.onSettingChange,this.onReorder=r.onReorder,this.onMoveToEnd=r.onMoveToEnd,this.onSelectLayout=r.onSelectLayout,this.onUpdateLayoutMinWidth=r.onUpdateLayoutMinWidth,this.onAddLayout=r.onAddLayout,this.onRemoveLayout=r.onRemoveLayout,this.onExport=r.onExport,this.onImport=r.onImport,this.onRenameInstance=r.onRenameInstance,this.onRenamePanelTitle=r.onRenamePanelTitle,this.onHUDOpen=r.onHUDOpen,this.onHUDClose=r.onHUDClose,this.onLayoutPanelOpen=r.onLayoutPanelOpen,this.onLayoutPanelClose=r.onLayoutPanelClose,this.onDocumentPointerDownBind=this.onDocumentPointerDown.bind(this),this.onViewportChangeBind=()=>this.syncPanelPlacement(),this.hudRoot=this.createHudRoot(),this.trigger=this.createTrigger(),this.panel=this.createMainPanel(),this.addPanel=this.createAddPanel(),this.layoutPanel=this.createLayoutPanel(),this.detailPanel=this.createDetailPanel(),i?.attachTrigger!==!1&&this.hudRoot.appendChild(this.trigger),this.panel.appendChild(this.addPanel),this.panel.appendChild(this.layoutPanel),this.panel.appendChild(this.detailPanel),this.hudRoot.appendChild(this.panel),document.addEventListener("pointerdown",this.onDocumentPointerDownBind),window.addEventListener("resize",this.onViewportChangeBind),window.visualViewport?.addEventListener("resize",this.onViewportChangeBind),window.visualViewport?.addEventListener("scroll",this.onViewportChangeBind)}refresh(t,e,r,i,n){this.instances=[...t],this.layouts=[...e],this.panelTitleValue=r.trim()||"Layout",this.selectedLayoutId=i,this.resolvedLayoutId=n,this.selectedInstanceId&&!t.some(s=>s.id===this.selectedInstanceId)&&this.clearSelection(),this.selectedBreakpointLayoutId&&!this.layouts.some(s=>s.id===this.selectedBreakpointLayoutId)&&(this.selectedBreakpointLayoutId=null),this.layoutTitle.value=this.panelTitleValue,this.renderLayoutChips(),this.renderLayoutSettings(),this.renderList(),this.renderDetailPanel()}destroy(){this.detailBuilder?.destroy(),document.removeEventListener("pointerdown",this.onDocumentPointerDownBind),window.removeEventListener("resize",this.onViewportChangeBind),window.visualViewport?.removeEventListener("resize",this.onViewportChangeBind),window.visualViewport?.removeEventListener("scroll",this.onViewportChangeBind),this.panelInBody&&this.panel.remove(),this.hudRoot.remove()}getTriggerElement(){return this.trigger}getHudElement(){return this.hudRoot}setTargetId(t){this.hudRoot.setAttribute("data-target-id",t),this.trigger.setAttribute("data-target-id",t),this.panel.setAttribute("data-target-id",t),this.addPanel.setAttribute("data-target-id",t),this.layoutPanel.setAttribute("data-target-id",t),this.detailPanel.setAttribute("data-target-id",t)}setAnchorPosition(t,e,r="top-left"){this.hudRoot.setAttribute("data-visible","true");let i=r==="top-right"?" translate(-100%, 0%)":"";this.hudRoot.style.transform=`translate3d(${Math.round(t)}px, ${Math.round(e)}px, 0)${i}`,this.syncPanelPlacement()}setAnchorVisible(t){this.hudRoot.setAttribute("data-visible",t?"true":"false")}isHUDOpen(){return this.isOpen}isLayoutSettingsPanelOpen(){return this.isLayoutSettingsOpen}setEnabled(t){this.enabled=t,t||this.hide(),this.hudRoot.style.display=t?"":"none"}isEnabled(){return this.enabled}createHudRoot(){return Rt()}createTrigger(){let t=tt({icon:"settings",label:"Open layout guides",modifiers:["toggle"],attrs:{"data-devguides-id":"layout","data-open":"false","data-state":"visible","data-active":"false","aria-expanded":"false"}});return t.addEventListener("click",e=>{e.stopPropagation(),this.toggle()}),t}createMainPanel(){let t=oe(),e=ae();this.layoutTitle=document.createElement("input"),this.layoutTitle.setAttribute("data-stdg-input",""),this.layoutTitle.setAttribute("data-stdg-panel-title",""),this.layoutTitle.type="text",this.layoutTitle.value=this.panelTitleValue,this.layoutTitle.addEventListener("blur",()=>{let n=this.layoutTitle.value.trim()||"Layout";n!==this.panelTitleValue&&(this.panelTitleValue=n,this.onRenamePanelTitle(n)),this.layoutTitle.value=n}),this.layoutTitle.addEventListener("keydown",n=>{n.stopPropagation(),n.key==="Enter"&&this.layoutTitle.blur(),n.key==="Escape"&&(this.layoutTitle.value=this.panelTitleValue.trim()||"Layout",this.layoutTitle.blur())}),this.layoutTitle.addEventListener("click",n=>{n.stopPropagation(),this.startLayoutTitleRename()}),this.layoutSettingsToggle=tt({icon:"options",label:"Layout Settings",modifiers:["toggle","left"],attrs:{"data-active":"false"}}),this.layoutSettingsToggle.addEventListener("click",n=>{n.stopPropagation(),this.isLayoutSettingsOpen?this.closeLayoutPanel():this.openLayoutPanel()});let r=tt({icon:"close",label:"Close layout guides",modifiers:["right"]});r.addEventListener("click",n=>{n.stopPropagation(),this.hide()}),this.headerAddButton=tt({icon:"plus",label:"Add Layout Guide",modifiers:["toggle","left"],attrs:{"data-active":"false"}}),this.headerAddButton.addEventListener("click",n=>{n.stopPropagation(),this.openAddPanel()}),e.appendChild(this.layoutTitle),e.appendChild(this.headerAddButton),e.appendChild(r);let i=document.createElement("div");return i.setAttribute("data-stdg-panel-responsive",""),this.layoutChipTabs=document.createElement("div"),this.layoutChipTabs.setAttribute("data-stdg-panel-list",""),i.appendChild(this.layoutSettingsToggle),i.appendChild(this.layoutChipTabs),this.listContainer=le({"data-string-grid-list":""}),this.addGuideButton=Ht({icon:"plus",label:"Add Layout Guide",withLabel:!0,attrs:{"data-active":"false"}}),this.addGuideButton.addEventListener("click",n=>{n.stopPropagation(),this.openAddPanel()}),this.listContainer.appendChild(this.addGuideButton),t.appendChild(e),t.appendChild(i),t.appendChild(this.listContainer),t}createAddPanel(){let t=oe({"data-panel":"add"}),e=ae(),r=tt({icon:"close",label:"Close panel",modifiers:["right"]});return r.addEventListener("click",i=>{i.stopPropagation(),this.closeAddPanel()}),e.appendChild(r),this.addGridList=le({"data-string-grid-add-grid-list":"","data-stdg-panel-content-50":""}),this.renderAddPanelList(),t.appendChild(e),t.appendChild(this.addGridList),t}renderAddPanelList(){if(this.addGridList.innerHTML="",this.adapterRegistry.size===0){let t=document.createElement("div");t.setAttribute("data-string-grid-add-grid-empty",""),t.textContent="No layout guides available",this.addGridList.appendChild(t);return}for(let[,t]of this.adapterRegistry){let e=Ht({icon:"",label:t.label,withLabel:!0});e.innerHTML=`${t.icon.replace("<svg","<svg data-stdg-icon-16")}<span>${t.label}</span>`,e.addEventListener("click",r=>{r.stopPropagation(),this.onAdd(t.type),this.closeAddPanel()}),this.addGridList.appendChild(e)}}createLayoutPanel(){let t=oe({"data-panel":"layout"}),e=ae();this.layoutAddButton=tt({icon:"plus",label:"Add Layout Guide",modifiers:["toggle","left"],attrs:{"data-active":"false"}}),this.layoutAddButton.addEventListener("click",o=>{o.stopPropagation(),this.onAddLayout()});let r=tt({icon:"close",label:"Close panel",modifiers:["right"]});r.addEventListener("click",o=>{o.stopPropagation(),this.closeLayoutPanel()}),e.appendChild(this.layoutAddButton),e.appendChild(r),this.layoutSettingsList=le(),this.layoutIOActions=le({"data-stdg-panel-content-50":""});let i=Ht({icon:"export",label:"Export",withLabel:!0,attrs:{"data-io":"export"}});i.addEventListener("click",o=>{o.stopPropagation(),this.onExport()});let n=Ht({icon:"import",label:"Import",withLabel:!0,attrs:{"data-io":"import"}});n.addEventListener("click",o=>{o.stopPropagation(),this.onImport()}),this.layoutIOActions.appendChild(i),this.layoutIOActions.appendChild(n);let s=document.createElement("span");return s.setAttribute("data-stdg-panel-hr",""),t.appendChild(e),t.appendChild(this.layoutSettingsList),t.appendChild(s),t.appendChild(this.layoutIOActions),t}createDetailPanel(){let t=oe({"data-panel":"detail"}),e=ae();this.detailIcon=document.createElement("span"),this.detailIcon.setAttribute("data-stdg-holder-icon-16",""),this.detailIcon.setAttribute("data-stdg-button-left",""),this.detailTitle=document.createElement("span"),this.detailTitle.addEventListener("click",i=>{i.stopPropagation(),this.startDetailRename()});let r=tt({icon:"close",label:"Close detail panel",modifiers:["right"]});return r.addEventListener("click",i=>{i.stopPropagation(),this.closeDetailPanel()}),e.appendChild(this.detailIcon),e.appendChild(this.detailTitle),e.appendChild(r),this.detailContent=document.createElement("div"),this.detailContent.setAttribute("data-string-dev-detail-body",""),t.appendChild(e),t.appendChild(this.detailContent),t}renderLayoutChips(){this.layoutChipTabs.innerHTML="";let t=e=>{this.selectedLayoutId=e,this.renderLayoutChips(),this.renderLayoutSettings()};[...this.layouts].reverse().forEach(e=>{let r=Ht({icon:"",label:`Select ${e.label} layout`});r.innerHTML=`<span>${e.label}</span>`,r.setAttribute("data-active",String(e.id===this.selectedLayoutId)),r.setAttribute("data-resolved",String(e.id===this.resolvedLayoutId)),r.setAttribute("data-mode",e.label),r.addEventListener("click",i=>{i.stopPropagation(),t(e.id),this.onSelectLayout(e.id)}),this.layoutChipTabs.appendChild(r)}),this.layoutSettingsToggle.setAttribute("data-active",String(this.isLayoutSettingsOpen))}renderLayoutSettings(){this.layoutSettingsList.innerHTML="",this.layoutAddButton.style.display=this.layouts.length>=4?"none":"";let{breakpointsRow:t,inputField:e}=this.createBreakpointWidget();this.layoutSettingsList.appendChild(t),this.layoutSettingsList.appendChild(e)}createBreakpointWidget(){let t=[...this.layouts].reverse(),e=t.length>2,r=document.createElement("div");r.setAttribute("data-stdg-panel-breakpoints","");let i=document.createElement("div");i.setAttribute("data-stdg-panel-field","");let n=`st-dg-break-${Date.now()}`,s=document.createElement("span");s.innerHTML=V(16,"break","second");let o=document.createElement("input");o.id=n,o.type="number",o.inputMode="numeric",o.step="1",o.min="1",o.setAttribute("data-stdg-input","");let a=document.createElement("label");a.htmlFor=n,a.setAttribute("data-stdg-field-input-disable",""),a.textContent="px",i.appendChild(s),i.appendChild(o),i.appendChild(a);let d=null,c=null,u=0,p=(h,f,b,y=!1)=>{c?.setAttribute("data-active","false"),d=h,c=b,u=f,this.selectedBreakpointLayoutId=h,b.setAttribute("data-active","true"),o.value=String(f),y&&(o.focus(),o.select())},g=()=>{if(!d||!o.isConnected)return;let h=Number.parseInt(o.value,10);if(Number.isFinite(h)&&h>=0){if(h===u)return;u=h,this.onUpdateLayoutMinWidth(d,h)}else o.value=String(u)};o.addEventListener("keydown",h=>{if(h.stopPropagation(),h.key==="Enter"){g();return}h.key==="Escape"&&(o.value=String(u),o.blur())}),o.addEventListener("blur",()=>requestAnimationFrame(g)),o.addEventListener("click",h=>h.stopPropagation());let m=null;if(t.forEach((h,f)=>{let b=document.createElement("div");b.setAttribute("data-stdg-panel-breakpoint-value","");let y=document.createElement("span");if(y.textContent=h.label,b.appendChild(y),e&&f>=2){let v=yi(`Remove ${h.label} layout`);v.addEventListener("pointerdown",S=>S.stopPropagation()),v.addEventListener("click",S=>{S.preventDefault(),S.stopPropagation(),this.layouts.length>2&&this.onRemoveLayout(h.id)}),b.appendChild(v)}if(r.appendChild(b),f<t.length-1){let v=t[f+1],S=document.createElement("button");S.type="button",S.setAttribute("data-stdg-button",""),S.setAttribute("data-stdg-panel-breakpoint-marker",""),S.setAttribute("data-active","false"),S.setAttribute("aria-label",`Edit ${v.label} breakpoint`);let E=document.createElement("span");E.textContent=String(v.minWidth),S.appendChild(E),S.addEventListener("click",M=>{M.stopPropagation(),p(v.id,v.minWidth,S,!0)}),r.appendChild(S),(this.selectedBreakpointLayoutId===v.id||m===null&&this.selectedBreakpointLayoutId===null)&&(m={layoutId:v.id,value:v.minWidth,el:S})}}),m!==null){let h=m;p(h.layoutId,h.value,h.el)}return{breakpointsRow:r,inputField:i}}syncChipRowStates(){this.layoutChipTabs.querySelectorAll("[data-stdg-panel-button][data-mode]").forEach(e=>{let r=e.getAttribute("data-mode"),i=this.layouts.find(n=>n.label===r);i&&(e.setAttribute("data-active",String(i.id===this.selectedLayoutId)),e.setAttribute("data-resolved",String(i.id===this.resolvedLayoutId)))})}renderList(){for(;this.addGuideButton.nextSibling;)this.listContainer.removeChild(this.addGuideButton.nextSibling);for(let e of this.instances){let r=this.adapterRegistry.get(e.type);if(!r)continue;let i=document.createElement("div");i.setAttribute("data-stdg-panel-list-item",""),i.setAttribute("data-stdg-button",""),i.setAttribute("data-stdg-button-toggle",""),i.setAttribute("data-active",String(e.id===this.selectedInstanceId)),i.innerHTML=`${V(16,"grab","second")}${r.icon.replace("<svg","<svg data-stdg-icon-16")}<span>${e.name?.trim()||r.label}</span>`;let n=this.createToggle(e.visible,()=>this.onToggle(e.id)),s=yi(`Remove ${e.name?.trim()||"instance"}`);s.addEventListener("click",o=>{o.stopPropagation(),this.selectedInstanceId===e.id&&this.closeDetailPanel(),this.onRemove(e.id)}),i.appendChild(n),i.appendChild(s),i.addEventListener("click",()=>{this.selectedInstanceId===e.id?this.closeDetailPanel():this.selectInstance(e.id)}),i.setAttribute("draggable","true"),i.addEventListener("dragstart",o=>{o.stopPropagation(),o.dataTransfer?.setData("text/plain",e.id),i.setAttribute("data-dragging","true")}),i.addEventListener("dragend",()=>{i.removeAttribute("data-dragging"),this.listContainer.querySelectorAll("[data-drag-over]").forEach(o=>o.removeAttribute("data-drag-over"))}),i.addEventListener("dragover",o=>{o.preventDefault(),o.stopPropagation();let a=i.getBoundingClientRect(),d=o.clientY<a.top+a.height/2?"before":"after";this.listContainer.querySelectorAll("[data-drag-over]").forEach(c=>c.removeAttribute("data-drag-over")),i.setAttribute("data-drag-over",d)}),i.addEventListener("dragleave",o=>{i.contains(o.relatedTarget)||i.removeAttribute("data-drag-over")}),i.addEventListener("drop",o=>{o.preventDefault(),o.stopPropagation();let a=o.dataTransfer?.getData("text/plain");if(i.removeAttribute("data-drag-over"),!a||a===e.id)return;let d=i.getBoundingClientRect(),c=o.clientY<d.top+d.height/2?"before":"after";this.onReorder(a,e.id,c)}),this.listContainer.appendChild(i)}this.addGuideButton.setAttribute("data-empty",String(this.instances.length===0));let t=this.instances.length>0;this.addGuideButton.style.display=t?"none":"",this.headerAddButton.style.display=t?"":"none"}renderDetailPanel(){if(!this.selectedInstanceId){this.hideDetailPanelUI();return}let t=this.instances.find(i=>i.id===this.selectedInstanceId);if(!t){this.clearSelection();return}let e=this.adapterRegistry.get(t.type);if(!e){this.clearSelection();return}this.detailIcon&&(this.detailIcon.innerHTML=e.icon.replace("<svg","<svg data-stdg-icon-16 data-stdg-icon-second")),this.detailTitle&&(this.detailTitle.textContent=t.name?.trim()||e.label),this.detailBuilder?.destroy(),this.detailBuilder=new _r;let r=this.detailBuilder.build(e.getUISchema(),t.settings,(i,n)=>this.onSettingChange(t.id,i,n));for(;this.detailContent.firstChild;)this.detailContent.removeChild(this.detailContent.firstChild);this.detailContent.appendChild(r),this.detailPanel.setAttribute("data-open","true"),this.alignDetailPanel(),this.syncPanelPlacement()}createToggle(t,e){let r=document.createElement("label");r.setAttribute("data-stdg-toggle",""),r.setAttribute("data-checked",String(t));let i=document.createElement("input");i.type="checkbox",i.checked=t,i.setAttribute("data-stdg-toggle-input",""),i.addEventListener("change",s=>{s.stopPropagation(),e()});let n=document.createElement("span");return n.setAttribute("data-stdg-toggle-knob",""),r.addEventListener("click",s=>s.stopPropagation()),r.appendChild(i),r.appendChild(n),r}startDetailRename(){if(!this.selectedInstanceId||!this.detailTitle)return;let t=this.instances.find(o=>o.id===this.selectedInstanceId);if(!t)return;let e=this.adapterRegistry.get(t.type);if(!e)return;let r=t.name?.trim()||e.label,i=this.detailTitle.parentElement;if(!i)return;let n=document.createElement("input");n.setAttribute("data-stdg-input",""),n.type="text",n.value=r;let s=()=>{let o=n.value.trim();o!==r&&this.onRenameInstance(t.id,o),i.contains(n)&&i.replaceChild(this.detailTitle,n)};n.addEventListener("blur",s),n.addEventListener("keydown",o=>{o.key==="Enter"&&n.blur(),o.key==="Escape"&&(n.value=r,n.blur())}),n.addEventListener("click",o=>o.stopPropagation()),n.addEventListener("pointerdown",o=>o.stopPropagation()),i.replaceChild(n,this.detailTitle),n.focus(),n.select()}startLayoutTitleRename(){this.layoutTitle.select()}openAddPanel(){this.isAddPanelOpen=!0,this.closeLayoutPanel(),this.clearSelection(),this.renderAddPanelList(),this.addPanel.setAttribute("data-open","true"),this.syncPanelPlacement()}closeAddPanel(){this.isAddPanelOpen=!1,this.addPanel.setAttribute("data-open","false"),this.syncPanelPlacement()}openLayoutPanel(){this.isLayoutSettingsOpen=!0,this.closeAddPanel(),this.clearSelection(),this.layoutPanel.setAttribute("data-open","true"),this.renderLayoutChips(),this.alignLayoutPanel(),this.syncPanelPlacement(),this.onLayoutPanelOpen()}closeLayoutPanel(){this.isLayoutSettingsOpen=!1,this.layoutPanel.setAttribute("data-open","false"),this.renderLayoutChips(),this.syncPanelPlacement(),this.onLayoutPanelClose()}alignLayoutPanel(){if(this.isMobilePanelMode()){this.layoutPanel.style.removeProperty("top");return}if(this.hudRoot.getAttribute("data-target-id")==="__global__"){this.layoutPanel.style.removeProperty("top");return}let t=this.layoutSettingsToggle.getBoundingClientRect(),e=this.panel.getBoundingClientRect();this.layoutPanel.style.top=`${t.top-e.top}px`}selectInstance(t){this.selectedInstanceId=t,this.closeLayoutPanel(),this.closeAddPanel(),this.renderList(),this.renderDetailPanel()}closeDetailPanel(){this.clearSelection(),this.renderList()}clearSelection(){this.selectedInstanceId=null,this.hideDetailPanelUI()}hideDetailPanelUI(){let t=this.detailBuilder;this.detailBuilder=null,this.detailPanel.setAttribute("data-open","false"),this.syncPanelPlacement(),window.setTimeout(()=>{this.detailPanel.getAttribute("data-open")==="false"&&(t?.destroy(),this.detailContent.innerHTML="",this.detailPanel.style.removeProperty("top"))},220)}alignDetailPanel(){if(this.isMobilePanelMode()){this.detailPanel.style.removeProperty("top");return}if(this.hudRoot.getAttribute("data-target-id")==="__global__"){this.detailPanel.style.removeProperty("top");return}let t=this.listContainer.querySelector('[data-stdg-panel-list-item][data-active="true"]');if(!t)return;let e=t.getBoundingClientRect(),r=this.panel.getBoundingClientRect();this.detailPanel.style.top=`${e.top-r.top}px`}show(){this.isOpen=!0,this.panel.setAttribute("data-open","true"),this.trigger.setAttribute("data-active","true"),this.trigger.setAttribute("aria-expanded","true"),this.syncPanelPlacement(),this.onHUDOpen()}hide(){this.isOpen=!1,this.panel.setAttribute("data-open","false"),this.closeAddPanel(),this.closeDetailPanel(),this.closeLayoutPanel(),this.trigger.setAttribute("data-active","false"),this.trigger.setAttribute("aria-expanded","false"),this.syncPanelPlacement(),this.onHUDClose()}toggle(){this.enabled&&(this.isOpen?this.hide():this.show())}isMobilePanelMode(){return typeof window>"u"?!1:window.matchMedia("(max-width: 1024px), (pointer: coarse)").matches}syncPanelPlacement(){if(!this.isMobilePanelMode()){this.panelInBody&&(this.panel.removeAttribute("data-mobile-sheet"),this.panel.style.removeProperty("position"),this.panel.style.removeProperty("bottom"),this.hudRoot.appendChild(this.panel),this.panelInBody=!1),this.hudRoot.setAttribute("data-mobile-sheet","false"),this.panel.style.removeProperty("left"),this.panel.style.removeProperty("top"),this.panel.style.removeProperty("width"),this.panel.style.removeProperty("height"),this.panel.style.removeProperty("max-height");return}if(!this.isOpen)return;this.panelInBody||((document.body??document.documentElement).appendChild(this.panel),this.panelInBody=!0);let e=window.visualViewport,r=e?.width??window.innerWidth,i=e?.height??window.innerHeight,n=Math.max(220,r-wi*2),s=Math.max(120,i-wi*2),o=Math.min(vo,n),a=Math.min(bo,s),d=Math.round((e?.offsetLeft??0)+(r-o)/2);this.hudRoot.setAttribute("data-mobile-sheet","true"),this.panel.setAttribute("data-mobile-sheet","true"),this.panel.style.position="fixed",this.panel.style.left=`${d}px`,this.panel.style.bottom=`${wi}px`,this.panel.style.removeProperty("top"),this.panel.style.width=`${Math.round(o)}px`,this.panel.style.maxHeight=`${Math.round(a)}px`,this.panel.style.removeProperty("height"),this.addPanel.style.removeProperty("top"),this.layoutPanel.style.removeProperty("top"),this.detailPanel.style.removeProperty("top")}onDocumentPointerDown(t){if(!this.isOpen)return;let e=t.target;e instanceof Node&&(this.panel.contains(e)||this.trigger.contains(e)||this.addPanel.contains(e)||this.layoutPanel.contains(e)||this.detailPanel.contains(e)||this.hide())}};var Mt=class{static VERSION=2;static serialize(t,e){return{v:this.VERSION,source:"StringDevLayout",selectedLayout:e,layouts:t.map(r=>({id:r.id,label:r.label,minWidth:r.minWidth,grids:r.instances.map(i=>({id:i.id,type:i.type,visible:i.visible,...i.name!==void 0?{name:i.name}:{},settings:{...i.settings}}))}))}}static deserialize(t,e){if(!t||typeof t!="object")return null;let r=t,i=r.v,n=r.source;if(n!=="StringDevLayout"&&n!=="StringGrid"||i!==1&&i!==2||!Array.isArray(r.layouts))return null;let s=r.layouts.filter(d=>!!d&&typeof d=="object"&&typeof d.id=="string").map((d,c)=>({id:d.id,label:Ei.includes(d.label)?d.label:"S",minWidth:this.resolveImportedMinWidth(d.minWidth,c),instances:(Array.isArray(d.grids)?d.grids:[]).filter(u=>!!u&&typeof u=="object"&&typeof u.type=="string"&&e.has(u.type)).map(u=>{let p=u.type,g=e.get(p);return{id:typeof u.id=="string"?u.id:Pr(),type:p,visible:u.visible!==!1,...typeof u.name=="string"&&u.name?{name:u.name}:{},settings:{...g.getDefaults(),...u.settings&&typeof u.settings=="object"&&!Array.isArray(u.settings)?u.settings:{}}}})}));if(s.length===0)return null;s.sort((d,c)=>c.minWidth-d.minWidth);let o=typeof r.selectedLayout=="string"?r.selectedLayout:typeof r.activeLayout=="string"?r.activeLayout:s[0].id,a=s.some(d=>d.id===o)?o:s[0].id;return{layouts:s,selectedLayoutId:a}}static toFile(t,e){let r=JSON.stringify(e,null,2),i=new Blob([r],{type:"application/json"}),n=URL.createObjectURL(i),s=document.createElement("a");s.href=n,s.download=t,s.click(),URL.revokeObjectURL(n)}static fromFile(){return new Promise((t,e)=>{let r=document.createElement("input");r.type="file",r.accept=".json,application/json";let i=()=>r.remove();r.addEventListener("change",()=>{let n=r.files?.[0];if(!n){i(),e(new Error("No file selected"));return}let s=new FileReader;s.onload=()=>{i();try{t(JSON.parse(s.result))}catch{e(new Error("Invalid JSON"))}},s.onerror=()=>{i(),e(new Error("File read error"))},s.readAsText(n)}),r.addEventListener("cancel",()=>{i(),e(new Error("Cancelled"))}),document.body.appendChild(r),r.click()})}static resolveImportedMinWidth(t,e){return typeof t=="number"&&Number.isFinite(t)?de(t):[1280,1024,768,0][e]??Math.max(0,1280-e*256)}};var Fr="http://www.w3.org/2000/svg",G=class{clear(t,e){let r=t.querySelector(`[data-grid-id="${e}"]`);r&&r.remove()}getGroup(t,e){let r=t.querySelector(`[data-grid-id="${e}"]`);return r||(r=document.createElementNS(Fr,"g"),r.setAttribute("data-grid-id",e),t.appendChild(r)),r}createLine(t,e,r,i,n,s,o=1){let a=document.createElementNS(Fr,"line");return a.setAttribute("data-string-grid-shape","line"),a.setAttribute("x1",String(t)),a.setAttribute("y1",String(e)),a.setAttribute("x2",String(r)),a.setAttribute("y2",String(i)),a.setAttribute("stroke",n),a.setAttribute("stroke-opacity",String(s)),a.setAttribute("stroke-width",String(o)),a}createRect(t,e,r,i,n,s){let o=document.createElementNS(Fr,"rect");return o.setAttribute("data-string-grid-shape","rect"),o.setAttribute("x",String(t)),o.setAttribute("y",String(e)),o.setAttribute("width",String(r)),o.setAttribute("height",String(i)),o.setAttribute("fill",n),o.setAttribute("fill-opacity",String(s)),o}resolveUnit(t,e,r,i){let n=parseFloat(getComputedStyle(document.documentElement).fontSize)||16,s=i instanceof Element&&parseFloat(getComputedStyle(i).fontSize)||n;switch(e){case"%":return t/100*r;case"vw":return t/100*window.innerWidth;case"vh":return t/100*window.innerHeight;case"em":return t*s;case"rem":return t*n;default:return t}}createPath(t,e,r,i=1,n="none"){let s=document.createElementNS(Fr,"path");return s.setAttribute("data-string-grid-shape","path"),s.setAttribute("d",t),s.setAttribute("stroke",e),s.setAttribute("stroke-opacity",String(r)),s.setAttribute("stroke-width",String(i)),s.setAttribute("fill",n),s}};var Vr=class l extends G{type="columns";label="Columns";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="7" y="3" width="2" height="10" fill="currentColor"/><rect x="3" y="3" width="2" height="10" fill="currentColor"/><rect x="11" y="3" width="2" height="10" fill="currentColor"/></svg>';static UNIT_OPTIONS=[{value:"px",label:"px"},{value:"%",label:"%"},{value:"vw",label:"vw"},{value:"vh",label:"vh"},{value:"em",label:"em"},{value:"rem",label:"rem"}];getDefaults(){return{count:12,gap:20,gapUnit:"px",margin:0,marginUnit:"px",color:"#4a90e2",opacity:.15,showLines:!1}}getUISchema(){return[{type:"number",key:"count",label:"Columns",default:12,min:1,max:48,step:1},{type:"range",key:"gap",label:"Gap",default:20,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"range",key:"margin",label:"Margin",default:0,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#4a90e2"},{type:"range",key:"opacity",label:"Opacity",default:.15,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10},{type:"toggle",key:"showLines",label:"Lines only",default:!1}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{count:s,gap:o,gapUnit:a,margin:d,marginUnit:c,color:u,opacity:p,showLines:g}=i,m=t.parentElement,h=this.resolveUnit(o,a||"px",e,m),f=this.resolveUnit(d,c||"px",e,m),b=e-f*2,y=(s-1)*h,v=(b-y)/s;if(!(v<=0))for(let S=0;S<s;S++){let E=f+S*(v+h);g?(n.appendChild(this.createLine(E,0,E,r,u,p)),n.appendChild(this.createLine(E+v,0,E+v,r,u,p))):n.appendChild(this.createRect(E,0,v,r,u,p))}}};var Wr=class l extends G{type="rows";label="Rows";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="3" width="10" height="2" fill="currentColor"/><rect x="3" y="7" width="10" height="2" fill="currentColor"/><rect x="3" y="11" width="10" height="2" fill="currentColor"/></svg>';static UNIT_OPTIONS=[{value:"px",label:"px"},{value:"%",label:"%"},{value:"vh",label:"vh"},{value:"vw",label:"vw"},{value:"em",label:"em"},{value:"rem",label:"rem"}];getDefaults(){return{mode:"count",count:8,size:24,sizeUnit:"px",gap:0,gapUnit:"px",margin:0,marginUnit:"px",color:"#e2784a",opacity:.2,style:"line"}}getUISchema(){return[{type:"select",key:"mode",label:"Mode",default:"count",options:[{value:"count",label:"By count"},{value:"size",label:"By size"}]},{type:"number",key:"count",label:"Rows",default:8,min:1,max:48,step:1,disabledWhen:{key:"mode",equals:"size"}},{type:"range",key:"size",label:"Size",default:24,min:0,max:1200,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px",disabledWhen:{key:"mode",equals:"count"}},{type:"range",key:"gap",label:"Gap",default:0,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"range",key:"margin",label:"Margin",default:0,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#e2784a"},{type:"range",key:"opacity",label:"Opacity",default:.2,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10},{type:"select",key:"style",label:"Style",default:"line",options:[{value:"line",label:"Lines"},{value:"fill",label:"Fill"}]}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{mode:s,count:o,size:a,sizeUnit:d,gap:c,gapUnit:u,margin:p,marginUnit:g,color:m,opacity:h,style:f}=i,b=t.parentElement,y=this.resolveUnit(c,u||"px",r,b),v=this.resolveUnit(p,g||"px",r,b),S=r-v*2;if(!(S<=0))if(s==="count")this.renderByCount(n,e,S,v,o,y,m,h,f);else{let E=this.resolveUnit(a,d||"px",r,b);if(E<=0)return;this.renderBySize(n,e,S,v,E,y,m,h,f)}}renderByCount(t,e,r,i,n,s,o,a,d){if(d==="fill"){let c=(r-(n-1)*s)/n;if(c<=0)return;for(let u=0;u<n;u++){let p=i+u*(c+s);t.appendChild(this.createRect(0,p,e,c,o,a))}}else{if(n===1){let u=i+r/2;t.appendChild(this.createLine(0,u,e,u,o,a));return}let c=r/(n-1);for(let u=0;u<n;u++){let p=i+u*c;t.appendChild(this.createLine(0,p,e,p,o,a))}}}renderBySize(t,e,r,i,n,s,o,a,d){if(d==="fill"){let c=n+s;for(let u=0;u<r;u+=c){let p=Math.min(n,r-u);t.appendChild(this.createRect(0,i+u,e,p,o,a))}}else for(let c=0;c<=r;c+=n)t.appendChild(this.createLine(0,i+c,e,i+c,o,a))}};var Nr=class extends G{type="center";label="Center";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="3" width="10" height="10" rx="3" fill="currentColor"/><path d="M8 2V14" stroke="white"/><path d="M2 8H14" stroke="white"/></svg>';getDefaults(){return{showVertical:!0,showHorizontal:!0,color:"#50e24a",opacity:.5,dashed:!0}}getUISchema(){return[{type:"toggle",key:"showVertical",label:"Vertical",default:!0},{type:"toggle",key:"showHorizontal",label:"Horizontal",default:!0},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#50e24a"},{type:"range",key:"opacity",label:"Opacity",default:.5,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10},{type:"toggle",key:"dashed",label:"Dashed",default:!0}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{showVertical:s,showHorizontal:o,color:a,opacity:d,dashed:c}=i,u=c?"6 3":"none";if(s){let p=this.createLine(e/2,0,e/2,r,a,d);c&&p.setAttribute("stroke-dasharray",u),n.appendChild(p)}if(o){let p=this.createLine(0,r/2,e,r/2,a,d);c&&p.setAttribute("stroke-dasharray",u),n.appendChild(p)}}};var zr=class extends G{type="rule-of-thirds";label="3\xD73";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="4" height="4" fill="currentColor"/><path d="M6 3.6C6 3.03995 6 2.75992 6.10899 2.54601C6.20487 2.35785 6.35785 2.20487 6.54601 2.10899C6.75992 2 7.03995 2 7.6 2H8.4C8.96005 2 9.24008 2 9.45399 2.10899C9.64215 2.20487 9.79513 2.35785 9.89101 2.54601C10 2.75992 10 3.03995 10 3.6V5H6V3.6Z" fill="currentColor"/><path d="M6 11H10V12.4C10 12.9601 10 13.2401 9.89101 13.454C9.79513 13.6422 9.64215 13.7951 9.45399 13.891C9.24008 14 8.96005 14 8.4 14H7.6C7.03995 14 6.75992 14 6.54601 13.891C6.35785 13.7951 6.20487 13.6422 6.10899 13.454C6 13.2401 6 12.9601 6 12.4V11Z" fill="currentColor"/><path d="M2 7.6C2 7.03995 2 6.75992 2.10899 6.54601C2.20487 6.35785 2.35785 6.20487 2.54601 6.10899C2.75992 6 3.03995 6 3.6 6H5V10H3.6C3.03995 10 2.75992 10 2.54601 9.89101C2.35785 9.79513 2.20487 9.64215 2.10899 9.45399C2 9.24008 2 8.96005 2 8.4V7.6Z" fill="currentColor"/><path d="M11 6H12.4C12.9601 6 13.2401 6 13.454 6.10899C13.6422 6.20487 13.7951 6.35785 13.891 6.54601C14 6.75992 14 7.03995 14 7.6V8.4C14 8.96005 14 9.24008 13.891 9.45399C13.7951 9.64215 13.6422 9.79513 13.454 9.89101C13.2401 10 12.9601 10 12.4 10H11V6Z" fill="currentColor"/></svg>';getDefaults(){return{color:"#e2e24a",opacity:.4,showIntersections:!0}}getUISchema(){return[{type:"color",key:"color",label:"Color",default:"#e2e24a"},{type:"range",key:"opacity",label:"Opacity",default:.4,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10},{type:"toggle",key:"showIntersections",label:"Show points",default:!0}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{color:s,opacity:o,showIntersections:a}=i,d=e/3,c=r/3;if(n.appendChild(this.createLine(d,0,d,r,s,o)),n.appendChild(this.createLine(d*2,0,d*2,r,s,o)),n.appendChild(this.createLine(0,c,e,c,s,o)),n.appendChild(this.createLine(0,c*2,e,c*2,s,o)),a){let u=[[d,c],[d*2,c],[d,c*2],[d*2,c*2]];for(let[p,g]of u){let m=document.createElementNS("http://www.w3.org/2000/svg","circle");m.setAttribute("cx",String(p)),m.setAttribute("cy",String(g)),m.setAttribute("r","3"),m.setAttribute("fill",s),m.setAttribute("fill-opacity",String(o*1.5)),n.appendChild(m)}}}};var xi=1.6180339887,Gr=class extends G{type="golden-rectangle";label="Golden";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="3" width="10" height="10" rx="3" fill="currentColor"/><path d="M9 13V3" stroke="white"/><path d="M13 9H9" stroke="white"/></svg>';getDefaults(){return{depth:8,showSpiral:!0,color:"#e2a44a",opacity:.4}}getUISchema(){return[{type:"number",key:"depth",label:"Depth",default:8,min:2,max:14,step:1},{type:"toggle",key:"showSpiral",label:"Show spiral",default:!0},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#e2a44a"},{type:"range",key:"opacity",label:"Opacity",default:.4,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{depth:s,showSpiral:o,color:a,opacity:d}=i,c,u;e/r>=xi?(u=r,c=u*xi):(c=e,u=c/xi);let p=(e-c)/2,g=(r-u)/2;if(c<e-1||u<r-1){let S=this.createPath(`M ${p} ${g} L ${p+c} ${g} L ${p+c} ${g+u} L ${p} ${g+u} Z`,a,d*.3,1);S.setAttribute("stroke-dasharray","6 4"),n.appendChild(S)}let m=p,h=g,f=c,b=u,y="",v=!0;for(let S=0;S<s&&!(f<1||b<1);S++){let E=S%4,M=Math.min(f,b),C,A;switch(E){case 0:{C=m+f-M,A=h,f-M>.5&&n.appendChild(this.createLine(C,h,C,h+b,a,d)),o&&(v&&(y=`M ${C+M} ${A}`,v=!1),y+=` A ${M} ${M} 0 0 1 ${C} ${A+M}`),f-=M;break}case 1:{C=m,A=h+b-M,b-M>.5&&n.appendChild(this.createLine(m,A,m+f,A,a,d)),o&&(v&&(y=`M ${C+M} ${A+M}`,v=!1),y+=` A ${M} ${M} 0 0 1 ${C} ${A}`),b-=M;break}case 2:{C=m,A=h,f-M>.5&&n.appendChild(this.createLine(m+M,h,m+M,h+b,a,d)),o&&(v&&(y=`M ${C} ${A+M}`,v=!1),y+=` A ${M} ${M} 0 0 1 ${C+M} ${A}`),m+=M,f-=M;break}case 3:{C=m,A=h,b-M>.5&&n.appendChild(this.createLine(m,h+M,m+f,h+M,a,d)),o&&(v&&(y=`M ${C} ${A}`,v=!1),y+=` A ${M} ${M} 0 0 1 ${C+M} ${A+M}`),h+=M,b-=M;break}}}o&&y&&n.appendChild(this.createPath(y,a,d*.8,1.5))}};var Ci="http://www.w3.org/2000/svg",$r=class l extends G{static MAX_DOT_CELLS=12e4;static MAX_CROSS_CELLS=8e4;type="dot-grid";label="Dots";icon='<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="11" y="3" width="2" height="2" fill="currentColor"/><rect x="11" y="7" width="2" height="2" fill="currentColor"/><rect x="11" y="11" width="2" height="2" fill="currentColor"/><rect x="7" y="3" width="2" height="2" fill="currentColor"/><rect x="7" y="7" width="2" height="2" fill="currentColor"/><rect x="7" y="11" width="2" height="2" fill="currentColor"/><rect x="3" y="3" width="2" height="2" fill="currentColor"/><rect x="3" y="7" width="2" height="2" fill="currentColor"/><rect x="3" y="11" width="2" height="2" fill="currentColor"/></svg>';static UNIT_OPTIONS=[{value:"px",label:"px"},{value:"%",label:"%"},{value:"vw",label:"vw"},{value:"vh",label:"vh"},{value:"em",label:"em"},{value:"rem",label:"rem"}];getDefaults(){return{step:16,stepUnit:"px",dotSize:1.5,shape:"dot",color:"#a0a0a0",opacity:.4}}getUISchema(){return[{type:"range",key:"step",label:"Step",default:16,min:0,max:100,step:1,units:l.UNIT_OPTIONS,defaultUnit:"px"},{type:"range",key:"dotSize",label:"Size",default:1.5,min:.5,max:6,step:.5},{type:"select",key:"shape",label:"Shape",default:"dot",options:[{value:"dot",label:"Dot \u25CF"},{value:"cross",label:"Cross +"}]},{type:"divider"},{type:"color",key:"color",label:"Color",default:"#a0a0a0"},{type:"range",key:"opacity",label:"Opacity",default:.4,min:0,max:1,step:.01,displayMultiplier:100,displayStep:10}]}render(t,e,r,i){let n=this.getGroup(t,i.__instanceId),{step:s,stepUnit:o,dotSize:a,shape:d,color:c,opacity:u}=i,p=this.resolveUnit(s,o||"px",Math.min(e,r),t.parentElement),g=this.getSafeStep(e,r,p,d);if(g<2)return;let m=this.getPatternId(i.__instanceId),h=this.getDefs(t),f=document.createElementNS(Ci,"pattern");f.setAttribute("id",m),f.setAttribute("data-string-grid-pattern-for",i.__instanceId),f.setAttribute("patternUnits","userSpaceOnUse"),f.setAttribute("width",String(g)),f.setAttribute("height",String(g)),f.setAttribute("x",String(g/2)),f.setAttribute("y",String(g/2));let b=g/2;if(d==="cross")f.appendChild(this.createLine(b-a*2,b,b+a*2,b,c,u,.8)),f.appendChild(this.createLine(b,b-a*2,b,b+a*2,c,u,.8));else{let v=document.createElementNS(Ci,"circle");v.setAttribute("cx",String(b)),v.setAttribute("cy",String(b)),v.setAttribute("r",String(a)),v.setAttribute("fill",c),v.setAttribute("fill-opacity",String(u)),f.appendChild(v)}h.appendChild(f);let y=this.createRect(0,0,e,r,`url(#${m})`,1);y.setAttribute("fill-opacity","1"),n.appendChild(y)}clear(t,e){super.clear(t,e),t.querySelector(`[data-string-grid-pattern-for="${e}"]`)?.remove()}getDefs(t){let e=t.querySelector("defs");return e||(e=document.createElementNS(Ci,"defs"),t.insertBefore(e,t.firstChild)),e}getPatternId(t){return`string-grid-dot-pattern-${t.replace(/[^a-zA-Z0-9_-]/g,"-")}`}getSafeStep(t,e,r,i){let s=Math.max(r,2),o=i==="cross"?l.MAX_CROSS_CELLS:l.MAX_DOT_CELLS;return Math.floor(t/s)*Math.floor(e/s)<=o?s:Math.max(s,Math.sqrt(t*e/o))}};var Ur="string-devtools-overlay-layout:change";var Ti=class{entries=new Map;register(t,e,r=1){this.entries.set(t,{order:e,badgeCount:r})}unregister(t){this.entries.delete(t)}resolveAnchor(t,e,r){let i=this.getSorted(),n=i.findIndex(o=>o.id===t),s=0;for(let o=0;o<n;o+=1)s+=i[o].badgeCount;return{docX:e+0+s*31,docY:r+0}}resolveCollisionOffset(t,e,r,i){let n=[],s=t.parentElement;for(;s;){let d=s.getAttribute("string-id")??s.getAttribute("data-string-id");if(d){let c=i(d);c&&n.push(c)}s=s.parentElement}let o=0,a=!0;for(;a;){a=!1;for(let d of n)if(Math.abs(d.docX-e)<50&&Math.abs(d.docY-(r+o))<31){o+=33,a=!0;break}}return o}emitLayoutChange(){window.dispatchEvent(new CustomEvent(Ur))}getSorted(){let t=[];for(let[e,r]of this.entries)t.push({id:e,...r});return t.sort((e,r)=>e.order!==r.order?e.order-r.order:e.id.localeCompare(r.id)),t}},et=new Ti;function Ln(){return`
1284
1284
  ${yr(["[data-string-grid-root]","[data-stdg-badge]"])}
1285
1285
 
1286
1286
  [data-string-grid-root],