tweakit 0.5.1 → 0.5.2

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/AGENTS.md CHANGED
@@ -90,7 +90,7 @@ Every `{ type }` form also takes `label`, `hint` (a tooltip), `render: (get) =>
90
90
  | `color` | `value` | color string in the picker's notation: `oklch(60% 0.23 286)` by default, whatever you wrote; `#rrggbb` once the user picks hex |
91
91
  | `gradient` | `stops: [[color, position], …]` | `{ stops: [{ color, pos }], interpolation, easing }`, which goes back in whole as `value`; `gradientCss(value, angle)` makes the CSS |
92
92
  | `shadow` | `x, y, blur, spread, color, inset`, or `value` as a `box-shadow` string | `{ x, y, blur, spread, color, inset, css }`; `css` is ready for `box-shadow` |
93
- | `image` | `value`; `options` (URLs or `{ value, label }`) makes a row that opens a gallery pane, with `cols` (1 to 6), `maxSize, upload`, and `clear: false` to keep a value chosen | the chosen URL, the upload's data URL, or `""` |
93
+ | `image` | `value`; `options` (URLs or `{ value, label }`) makes a row that opens a gallery pane, with `cols` (1 to 6), `maxSize, upload`, and `clear: false` to keep a value chosen; an upload past `fit` px (2560) on its long side, or over 1.5 MB, is redrawn, as a PNG up to 1.5 MB, else JPEG at `quality` (0.85), or WebP for transparency; `fit: false` keeps it whole | the chosen URL, the upload's data URL, or `""` |
94
94
  | `motion` | `mode: "easing"` with `curve` and `duration` (ms), or `mode: "spring"` with `stiffness, damping, mass` or `visualDuration, bounce` | `{ mode, …, duration, easing }`; `easing` is a `cubic-bezier(…)` or sampled `linear(…)` string for a CSS transition; a spring's `duration` is its settle time |
95
95
  | `spring` | `mode: "time"` or `"physics"`, `visualDuration, bounce, stiffness, damping, mass` | `{ stiffness, damping, mass }`, plus the time pair when tuned by feel |
96
96
  | `cubicbezier` | `value: [x1, y1, x2, y2]` | `[x1, y1, x2, y2]` |
@@ -1 +1 @@
1
- import{$ as ve,A as nn,B as jn,C as Ue,E as Dn,F as on,G as rn,H as Fn,I as $n,J as Kn,K as xt,L as Tt,M as sn,N as Bn,O as an,Q as qn,R as Yn,S as At,T as Pt,U as Xn,V as Vn,W as Wn,X as zn,Y as Jn,Z as Ae,_ as Ot,aa as ke,ca as ln,d as Mo,da as Ee,e as So,f as Sn,g as j,h as be,i as xn,j as Tn,k as An,l as Pn,m as it,n as On,o as _n,p as Hn,q as Mt,r as Ne,s as Nn,t as In,u as C,v as we,w as J,x as Rn,y as St,z as at}from"./chunk-7OSCMZ2J.js";var Be={number:()=>import("./heavy-PKOMHB3C.js"),interval:()=>import("./interval-L2E4L3AZ.js"),color:()=>import("./colour-2RE3FQ5E.js"),gradient:()=>import("./gradient-DB6XTDHO.js"),shadow:()=>import("./shadow-IKYOV3VN.js"),sides:()=>import("./sides-FH227Z54.js"),tabs:()=>import("./tabs-BKK5NIIY.js"),image:()=>import("./image-JD2NSQYE.js"),fpsgraph:()=>import("./monitor-IEK742PG.js"),monitor:()=>import("./monitor-IEK742PG.js"),spring:()=>import("./spring-3PKAFIH7.js"),cubicbezier:()=>import("./bezier-2RABC6LD.js"),motion:()=>Promise.all([import("./bezier-2RABC6LD.js"),import("./spring-3PKAFIH7.js")]).then(()=>import("./motion-N5UNVR55.js")),point:()=>import("./point-YMMHSLO7.js"),plot:()=>import("./plot-VVTOY3RA.js")},_t={},xo=t=>ke(t)||!Be[t]?null:_t[t]||(_t[t]=Be[t]().catch(n=>{throw delete _t[t],console.error(`[tweaks] control chunk "${t}" failed to load:`,n),n})),cn=(t,n=new Set)=>{for(let s of t)if(s&&(Be[s.type]&&n.add(s.type),s.children&&cn(s.children,n),s.pages))for(let a of s.pages)cn(a.children,n);return n},Qe=t=>{let n=[...cn(t)].map(xo).filter(Boolean);return n.length?Promise.all(n):null};function Ie(t,n,s=0){if(Nt(t))return null;let a=Po(t,n,s);return a&&n&&typeof n=="object"&&(typeof n.render=="function"&&(a.render=n.render),n.disabled!=null&&(a.disabled=n.disabled),n.hint!=null&&(a.hint=String(n.hint)),n.persist===!1&&(a.persist=!1)),a}var Pe=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),Nt=t=>t==="__proto__"||t==="constructor"||t==="prototype",Oe=(t,n)=>t!==n&&!(be(t)&&be(n)&&JSON.stringify(t)===JSON.stringify(n)),It=(t,n,s)=>{t.set(s),t.set(n)},Gn=t=>Array.isArray(t.options)&&{type:"radiogrid",options:t.options,value:t.value??Ne(t.options[0]),cols:t.cols},To=(t,...n)=>{let s=(n.length?n:[0]).map(c=>Mt(Number.isFinite(+c)?+c:0)),a=t.min??Math.min(...s.map(c=>c[0])),i=t.max??Math.max(...s.map(c=>c[1]));return{min:a,max:i,step:t.step??it(a,i)}},dn=(t,n)=>t.label==null?n:String(t.label),Un=t=>typeof t=="function"?t:void 0,Qn=t=>typeof t=="string"&&t.trim()?t.trim().slice(0,12):void 0,Ht=["stiffness","damping","mass","visualDuration","bounce"],Zn={slider:t=>{let n=To(t,t.value??t.min??0);return{value:t.value??n.min,...n,soft:t.soft,unit:Qn(t.unit),format:Un(t.format),parse:Un(t.parse)}},number:t=>({value:t.value??0,min:t.min,max:t.max,step:t.step??1,soft:t.soft,unit:Qn(t.unit)}),checkbox:t=>({value:!!t.value}),radiogrid:Gn,segmented:Gn,list:t=>Array.isArray(t.options)&&{options:t.options,value:t.value??Ne(t.options[0])},text:t=>({value:t.value??"",rows:t.rows,placeholder:t.placeholder}),spring:t=>{let n=be(t.value)?t.value:t,s={stiffness:n.stiffness??300,damping:n.damping??26,mass:n.mass??1};Number.isFinite(+n.visualDuration)&&(s.visualDuration=+n.visualDuration),Number.isFinite(+n.bounce)&&(s.bounce=+n.bounce);let a=t.mode??n.mode;return(a==="time"||a==="physics")&&(s.mode=a),{value:s}},motion:t=>{let n=typeof t.value=="string"||Array.isArray(t.value)?{...t,curve:t.value}:be(t.value)?t.value:t,s=Ht.some(i=>n[i]!=null),a={curve:"ease",duration:300,...s?{}:{visualDuration:.5,bounce:.2}};for(let i of["mode","curve","duration",...Ht])n[i]!=null&&(a[i]=n[i]);return a.mode!=="easing"&&a.mode!=="spring"&&(a.mode=s?"spring":"easing"),{value:a}},point:t=>{if(!Array.isArray(t.components)||!t.components.length)return!1;let n=new Set,s=t.components.map((a,i)=>{let c=String(a.key??((a.label?String(a.label).toLowerCase():"")||`c${i}`)),l=c,h=2;for(;n.has(l);)l=`${c}-${h++}`;return n.add(l),{...a,key:l}});return{components:s,pad:t.pad,invertY:t.invertY,value:Object.fromEntries(s.map(a=>[a.key,a.value??0]))}},buttongroup:t=>({buttons:t.buttons}),separator:()=>({}),tabs:(t,n)=>{if(!t.pages||typeof t.pages!="object"||!Object.keys(t.pages).length)return!1;let s=new Set;return{pages:Object.entries(t.pages).map(([a,i])=>{let c=a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"tab",l=c,h=2;for(;s.has(l);)l=`${c}-${h++}`;return s.add(l),{key:l,title:a.trim()?a:"Tab",children:Object.entries(i).map(([k,x])=>Ie(k,x,n+1)).filter(Boolean)}})}}},Ao=Object.assign(Object.create(null),{list:"options",radiogrid:"options",segmented:"options",point:"components",tabs:"pages"});function Po(t,n,s=0){if(s>64)return null;let a=Sn(t),i=(c,l,h=a)=>({type:c,key:t,label:h,...l});if(be(n)&&!Array.isArray(n)&&Pe(Zn,n.type)){let c;try{c=Zn[n.type](n,s)}catch(l){return console.error(`[tweaks] malformed "${n.type}" schema value for "${t}" \u2014 control skipped:`,l),null}if(c)return i(String(n.type),c,dn(n,a));if(Pe(n,Ao[n.type]))return console.error(`[tweaks] malformed "${n.type}" schema value for "${t}" \u2014 control skipped`),null}else if(be(n)&&!Array.isArray(n)&&typeof n.type=="string"&&(Be[n.type]||ke(n.type))){let{type:c,label:l,...h}=n;return i(c,h,dn(n,a))}if(Array.isArray(n)&&Array.isArray(n[0])&&n[0].length===2&&typeof n[0][0]=="number"){let c=Number.isFinite(+n[1])?+n[1]:+n[0][0],l=Number.isFinite(+n[2])?+n[2]:+n[0][1];return i("interval",{value:n[0].map(Number),min:c,max:l,step:n[3]??it(c,l)})}if(Array.isArray(n)&&n.length<=4&&typeof n[0]=="number"){let c=n[0],[l,h]=Mt(c),k=n.length>1?n[1]:l,x=n.length>2?n[2]:h;return i("slider",{value:c,min:k,max:x,step:n[3]??it(k,x)})}if(typeof n=="number"){let[c,l]=Mt(n);return i("slider",{value:n,min:c,max:l,step:it(c,l)})}return typeof n=="boolean"?i("checkbox",{value:n}):Array.isArray(n)?i("list",{options:n,value:Ne(n[0])}):be(n)&&typeof n.action=="function"?i("button",{action:n.action},dn(n,a)):be(n)&&Array.isArray(n.options)?i("list",{options:n.options,value:n.value??Ne(n.options[0])}):xn(n)?i("color",{value:n}):typeof n=="string"?i("text",{value:n}):be(n)?i("folder",{children:Object.entries(n).filter(([c,l])=>!(c==="render"&&typeof l=="function")&&!((c==="disabled"||c==="hint")&&l!=null)).map(([c,l])=>Ie(c,l,s+1)).filter(Boolean)}):null}var Rt=new Set(["button","fpsgraph","monitor","buttongroup","separator"]);var eo=Ae('<path class="tw-copy-back" d="m5.5 16.5-.7-.2q-1.5-.6-2.1-2.1-.2-.7-.2-2.7v-2c0-3.3 0-5 1-6s2.7-1 6-1h2c1.4 0 2 0 2.7.2q1.6.5 2.1 2.1l.2.7"/><path class="tw-copy-front" d="M7.5 14.5c0-3.3 0-5 1-6s2.7-1 6-1 5 0 6 1 1 2.7 1 6 0 5-1 6-2.7 1-6 1-5 0-6-1-1-2.7-1-6"/>',"tw-toolbar-btn__copy"),to=Ae('<path d="m5 14 3.5 3.5L19 6.5"/>',"tw-toolbar-btn__check",2.4),no=Ae('<path d="M3 12a9 9 0 1 0 9-9 9 9 0 0 0-7.6 4.2M3.3 3l.2 2q0 2.2.6 2.7t2.7.2l2-.2"/>'),oo=Ae('<path d="m17 17 4 4m-2-10a8 8 0 0 0-16 0 8 8 0 0 0 16 0"/>'),pn=t=>Ae('<path d="M18 9s-4.4 6-6 6-6-6-6-6"/>',t,2.5),ro=pn("tw-chevron"),so=Ae('<path d="M20.2 13.5q1.8.8 1.8 1.5 0 .8-2.7 2l-5 2.2Q13 20 12 20q-.7 0-2.4-.8l-4.9-2.3Q2 16 2 15t1.8-1.5"/><path class="tw-layer-top" d="M9.6 4.8Q11.3 4 12 4t2.4.8l4.9 2.3Q22 8 22 9c0 .7-.9 1.1-2.7 2l-5 2.2Q13 14 12 14q-.7 0-2.4-.8l-4.9-2.3Q2 10 2 9c0-.7.9-1.1 2.7-2z"/>'),io=Ae('<path d="M18 6 6 18m12 0L6 6"/>',"",2.2),un=Ae('<circle cx="12" cy="12" r="10"/><path d="M12 16v-4m-.25-3.75a.25.25 0 0 0 .5 0 .25.25 0 0 0-.5 0"/>');var Oo=3;function _o(t,n){let s=t.label,{min:a,max:i,step:c}=On(t.min,t.max,t.step);t.soft||([a,i]=Pn(a,i,c));let l=(i-a)/c<=6,h=Number.isFinite(+t.value)?+t.value:a,k=t.soft&&!l?h:j(h,a,i),x=0,E=Tn(c),L=C("div","tw-slider-wrap"),y=C("div","tw-slider"),ae=C("div","tw-slider-hashmarks"),X=C("div","tw-slider-fill"),H=C("div","tw-slider-handle"),W=J("span","tw-slider-label",s),T=C("span","tw-slider-value"),g=typeof t.unit=="string"?t.unit.trim():"",_=document.createTextNode(""),K=g?/^[%°]$/.test(g)?g:" "+g:"";T.append(_),g&&T.append(J("span","tw-slider-unit",K));let ne=t.format,F=t.parse,le=u=>{if(ne)try{let O=ne(u);if(typeof O=="string"&&O)return O}catch{}return u.toFixed(E)};y.append(ae,X,H,W,T),L.append(y),y.tabIndex=0,y.setAttribute("role","slider"),y.setAttribute("aria-label",s),y.setAttribute("aria-valuemin",String(a)),y.setAttribute("aria-valuemax",String(i));let oe=u=>An(u,a,c),pe=l?Array.from({length:Math.max(0,Math.round((i-a)/c)-1)},(u,O)=>(O+1)*c/(i-a)*100):[];for(let u of pe){let O=C("div","tw-slider-hashmark");O.style.left=u+"%",ae.append(O)}let re=()=>{let u=j((k-a)/(i-a||1)*100,0,100),O=x?` + ${x.toFixed(1)}px`:"",$=`${u}%${O}`;X.style.width=x?`calc(${$})`:u+"%",H.style.left=`max(5px, calc(${$} - 9px))`;let N=oe(k),I=le(N);_.data=I,y.setAttribute("aria-valuenow",String(N)),y.setAttribute("aria-valuetext",I+K);let Z=L.offsetWidth,ie=T.offsetWidth;if(Z){ie&&(W.style.maxWidth=Math.max(0,Z-ie-30)+"px");let Se=Math.max(5,u/100*Z+x-9);y.classList.toggle("is-dodge",Hn(W,T,Se,3))}};re();let G=null,Re=1,ue=null,fe=!0,qe,Ce=null,je=null,nt=`width 0.34s ${an}`,ut=`left 0.34s ${an}, opacity 0.15s, transform 0.2s ${Bn}`,m=.2,De=u=>{if(!G)return k;let O=L.offsetWidth||G.width,$=j((u-G.left)/Re/O,0,1);return j(a+$*(i-a),a,i)},D=(u,O=!0)=>{u=+u,Number.isFinite(u)&&(k=l?j(oe(u),a,i):t.soft?u:j(u,a,i),re(),O&&n(oe(k)))},ce=Math.max(1,Math.round((i-a)/c)),Ye=.2,ft=.3,Xe=520,mt=27,Ve=u=>(u-a)/c,te=0,se=0,z=0,de=!1,Me=null,U=k,Fe=0,he=()=>{z&&cancelAnimationFrame(z),z=0,Fe=0},me=u=>{if(!y.isConnected){he();return}let O=Fe?Math.min((u-Fe)/1e3,.05):1/60;Fe=u;let $=L.offsetWidth||G&&G.width||1,N=Ve(j(U,a,i)),I=j(Math.round(N+Ye),0,ce),Z=de?I+ft*j(N-I,-.5,.5):I;if(sn&&sn.matches)te=Z,se=0;else{let ie=O,Se=1/240;for(;ie>1e-4;){let xe=Math.min(Se,ie);ie-=xe;let gt=Xe*(Z-te)-mt*se;se+=gt*xe,te+=se*xe,te<0&&(te=0,se=0),te>ce&&(te=ce,se=0)}}x=(te-I)*c/(i-a||1)*$,k=j(a+I*c,a,i),re(),I!==Me&&(Me=I,n(oe(k))),!de&&Math.abs(se)<.004&&Math.abs(te-I)<.004?(te=I,se=0,x=0,re(),he(),y.classList.remove("is-active")):z=requestAnimationFrame(me)},Bt=u=>{te=Ve(k),se=0,de=!0,Me=Math.round(Ve(k)),U=De(u),z||(z=requestAnimationFrame(me))};y.addEventListener("pointerdown",u=>{if(!T.classList.contains("is-editing")&&!(u.button!==0||ue)){u.preventDefault(),y.focus({focusVisible:!1}),je=u.pointerId;try{u.target.setPointerCapture(u.pointerId)}catch{}clearTimeout(qe),y.style.transition="",ue={x:u.clientX,y:u.clientY},fe=!0,y.classList.add("is-active"),G=L.getBoundingClientRect(),Re=G.width/(L.offsetWidth||G.width),l?(X.style.transition="",H.style.transition="",Bt(u.clientX)):(X.style.transition=nt,H.style.transition=ut,D(De(u.clientX)))}}),y.addEventListener("pointermove",u=>{if(!(!ue||u.pointerId!==je)){if(u.buttons===0){$e();return}if(fe&&Math.hypot(u.clientX-ue.x,u.clientY-ue.y)>Oo&&(fe=!1,y.classList.add("is-dragging"),l||(X.style.transition="",H.style.transition="")),!fe)if(qn(y,G,u.clientX),l)U=De(u.clientX);else{let O;if(u.altKey){Ce||(Ce={x:u.clientX,v:k});let $=L.offsetWidth||G.width;O=j(Ce.v+(u.clientX-Ce.x)/$*(i-a)*m,a,i)}else Ce=null,O=De(u.clientX);D(O)}}});let $e=u=>{!ue||u&&u.pointerId!==je||(l?(de=!1,y.classList.remove("is-dragging"),z||(z=requestAnimationFrame(me))):(qe=setTimeout(()=>{X.style.transition="",H.style.transition=""},360),y.classList.remove("is-active","is-dragging")),Yn(y),ue=null,Ce=null,je=null)};y.addEventListener("pointerup",$e),y.addEventListener("pointercancel",$e),y.addEventListener("lostpointercapture",$e),jn(y,re),St(re),at(y,[[window,"resize"]],re),y.addEventListener("keydown",u=>{if(u.target!==y||ue)return;let O=_n(u,k,c,a,i,(i-a)/10||c*10);O!=null&&(u.preventDefault(),l&&(he(),x=0,y.classList.remove("is-active")),D(j(O,a,i)))});let ot;T.addEventListener("mouseenter",()=>{ot=setTimeout(()=>T.classList.add("is-editable"),800)}),T.addEventListener("mouseleave",()=>{clearTimeout(ot),T.classList.contains("is-editing")||T.classList.remove("is-editable")}),T.addEventListener("pointerdown",u=>{u.pointerType&&u.pointerType!=="mouse"?(T.classList.add("is-editable"),u.stopPropagation()):T.classList.contains("is-editable")&&u.stopPropagation()});let We=()=>{if(T.classList.contains("is-editing"))return;let u=C("input","tw-slider-input");u.type="text",u.inputMode=F?"text":"decimal",Ue(u),u.value=F?le(oe(k)):oe(k).toFixed(E);let O=u.value;u.style.width=O.length+1+"ch",T.classList.add("is-editing"),T.replaceWith(u),u.focus(),u.select();let $=()=>{u.replaceWith(T),T.classList.remove("is-editing","is-editable")},N=()=>{let I=u.value,Z=NaN;if(I!==O)try{Z=F?F(I):Number(I.replace(g,"").trim()||NaN)}catch{}Number.isFinite(Z)&&D(t.soft?Z:j(Z,a,i)),$()};u.addEventListener("pointerdown",I=>I.stopPropagation()),u.addEventListener("blur",N),u.addEventListener("keydown",I=>{I.key==="Enter"?(u.removeEventListener("blur",N),y.focus(),N()):I.key==="Escape"&&(I.stopPropagation(),u.removeEventListener("blur",N),y.focus(),$())})};return T.addEventListener("click",()=>{T.classList.contains("is-editable")&&We()}),y.addEventListener("keydown",u=>{u.key==="Enter"&&u.target===y&&!ue&&(u.preventDefault(),We())}),{el:L,set:u=>D(u,!1),get:()=>oe(k)}}function Ho(t,n){let s=C("div","tw-row"),a=Jn([{value:"off",label:"Off"},{value:"on",label:"On"}],t.value?"on":"off",i=>n(i==="on"),t.label);return s.append(J("span","tw-row-label",t.label),a.el),{el:s,set:i=>a.set(i?"on":"off"),get:()=>a.get()==="on"}}function No(t,n){let s=t.options||[],a=Math.min(3,Math.max(2,t.cols||(s.length<=3?s.length:s.length===4?2:3))),i=C("div",s.length>a?"tw-radiogrid is-grid":"tw-radiogrid"),c=C("div","tw-radiogrid-grid");c.style.setProperty("--tw-rg-cols",a),c.setAttribute("role","radiogroup"),c.setAttribute("aria-label",t.label);let l=t.value??Ne(s[0]),h=s.map(E=>{let L=Wn("tw-radiogrid-btn",E,y=>x(y));return c.append(L),L}),k=()=>Vn(h,l),x=(E,L=!0)=>{E!=null&&!h.some(y=>y._twVal===E)||(l=E,k(),L&&n(E))};return c.addEventListener("keydown",E=>{let L=Xn(h,l);if(L<0)return;let y=zn(E.key,L,h.length,a);y<0||(E.preventDefault(),y!==L&&(x(h[y]._twVal),h[y].focus()))}),k(),i.append(J("span","tw-radiogrid-label",t.label),c),{el:i,set:E=>x(E,!1),get:()=>l}}var Io=/^(?:#[0-9a-f]{3,8}|[a-z]+|(?:oklch|oklab|rgba?|hsla?|hwb|lab|lch|color|var)\([^()]*\))$/i,Ro=pn("tw-select-chevron");function jo(t,n){let s=t.value,a=t.options.map(g=>({value:Ne(g),label:In(g),color:g&&typeof g=="object"&&typeof g.color=="string"&&Io.test(g.color.trim())?g.color.trim():""})),i=C("div","tw-select"),c=we("tw-select-trigger");c.setAttribute("aria-haspopup","listbox"),c.setAttribute("aria-expanded","false");let l=C("span","tw-select-right"),h=g=>`linear-gradient(${g}, ${g}), var(--tw-checker)`,k=g=>{let _=C("span","tw-option-swatch");return _.style.background=h(g),_},x=C("span","tw-option-swatch"),E=C("span","tw-select-value");l.append(x,E),l.insertAdjacentHTML("beforeend",Ro),c.append(J("span","tw-select-label",t.label),l);let L=C("div","tw-select-dropdown");L.setAttribute("role","listbox");let y=a.map(g=>{let _=we("tw-select-option");return _.setAttribute("role","option"),g.color&&_.append(k(g.color)),_.append(J("span","tw-option-label",g.label)),_.dataset.value=g.value,_.addEventListener("click",()=>{X(g.value),T.close()}),L.append(_),_});i.append(c,L);let ae=()=>{let g=a.find(_=>_.value===s);E.textContent=g?.label??s,x.style.display=g?.color?"":"none",g?.color&&(x.style.background=h(g.color)),y.forEach(_=>{let K=_.dataset.value===String(s);_.dataset.selected=String(K),_.setAttribute("aria-selected",String(K))})},X=(g,_=!0)=>{g!=null&&!a.some(K=>K.value===g)||(s=g,ae(),_&&n(g))},H="",W=0,T=xt(i,c,L,{fallbackH:200,movable:!1,onOpen:()=>{H="",(y.find(g=>g.dataset.value===String(s))||y[0])?.focus()}});return c.addEventListener("keydown",g=>{!T.isOpen()&&(g.key==="ArrowDown"||g.key==="ArrowUp")&&(g.preventDefault(),T.open())}),L.addEventListener("keydown",g=>{let _=y.indexOf(document.activeElement),K=_,ne=!!H&&performance.now()-W<600;if(g.key==="ArrowDown")K=_<0?0:Math.min(y.length-1,_+1);else if(g.key==="ArrowUp")K=_<0?y.length-1:Math.max(0,_-1);else if(g.key==="Home")K=0;else if(g.key==="End")K=y.length-1;else if(g.key.length===1&&(g.key!==" "||ne)&&!g.ctrlKey&&!g.metaKey&&!g.altKey&&!g.isComposing){let F=g.key.toLowerCase();H=(ne?H:"")+F,W=performance.now();let le=H===F.repeat(H.length/F.length),oe=le?F:H,pe=re=>a.findIndex((G,Re)=>Re>=re&&String(G.label).toLowerCase().trimStart().startsWith(oe));if(K=pe(le?_+1:_),K<0&&(K=pe(0)),K<0&&g.key!==" ")return}else return;g.preventDefault(),y[K]?.focus()}),ae(),{el:i,set:g=>X(g,!1),get:()=>s}}function Do(t){let n=J("button","tw-button",t.label);return n.addEventListener("click",()=>typeof t.action=="function"&&t.action()),Ot(n)}function Fo(t){let n=C("div","tw-row tw-buttongroup");t.label&&n.append(J("span","tw-row-label",t.label));let s=C("div","tw-buttongroup-btns"),a=Array.isArray(t.buttons)?t.buttons.map(i=>[i.label??"Button",i.action]):Object.entries(t.buttons||{});for(let[i,c]of a){let l=J("button","tw-buttongroup-btn",i);l.addEventListener("click",()=>typeof c=="function"&&c()),s.append(l)}return n.append(s),Ot(n)}var $o=()=>Ot(C("div","tw-separator"));function Ko(t,n){let s=k=>k==null?"":typeof k=="object"?Nn(k):String(k),a=s(t.value),i=t.rows>0,c=C("div",i?"tw-row tw-row-multiline":"tw-row"),l=C(i?"textarea":"input",i?"tw-text tw-textarea":"tw-text");i?l.rows=t.rows:l.type="text",l.value=a,Ue(l),t.placeholder&&(l.placeholder=t.placeholder),l.addEventListener("input",()=>{a=l.value,n(a)});let h=()=>{let k=l.scrollHeight-l.clientHeight>1;l.classList.toggle("is-clip-top",k&&l.scrollTop>1),l.classList.toggle("is-clip-bottom",k&&l.scrollTop+l.clientHeight<l.scrollHeight-1)};return i&&(l.addEventListener("scroll",h),l.addEventListener("input",h),typeof ResizeObserver=="function"&&new ResizeObserver(h).observe(l)),c.append(J("span","tw-row-label",t.label),l),{el:c,set:k=>{a=s(k),l.value=a,i&&h()},get:()=>a}}function lt(t){let n=C("div","tw-folder"),s=we("tw-folder-header");s.setAttribute("aria-expanded","true"),s.append(J("span","tw-folder-title",t.label)),s.insertAdjacentHTML("beforeend",ro);let a=C("div","tw-folder-body"),i=C("div","tw-controls");a.append(i),n.append(s,a);let c=l=>Pt(n,s,a,l);return s.addEventListener("click",()=>c(!n.classList.contains("is-collapsed"))),{el:n,body:i,setCollapsed:c}}function Ze(t,n){let s=ke(t.type);if(!s)return null;try{return s(t,n)}catch(a){return console.error("[tweaks] control failed to build:",t&&t.type,a),null}}ve("slider",_o);ve("checkbox",Ho);ve("radiogrid",No);ve("list",jo);ve("button",Do);ve("buttongroup",Fo);ve("separator",$o);ve("text",Ko);ve("folder",lt);var ct=(t,n,s)=>{let a=we("tw-toolbar-btn"+(t?" "+t:""),n);return a.title=s,a.setAttribute("aria-label",s),a},Ft=t=>{let n=ct("tw-toolbar-btn--swap",`<span class="tw-toolbar-btn__icons">${eo}${to}</span>`,"Copy values (\u21E7: changed only)");return n.addEventListener("click",async s=>{if(n.disabled)return;let[a,i]=t(s.shiftKey);if(!i)return Ee("Nothing has changed");if(!await gn(a))return Ee("Copy failed");Bo(n),Ee(i>0?`${i} changed value${i===1?"":"s"} copied`:"Values copied")}),n},$t=t=>{let n=ct("tw-toolbar-btn--reset",no,"Reset");return n.addEventListener("click",()=>{n.disabled||(fn(n),t())}),n},Bo=t=>{t.classList.add("is-copied"),clearTimeout(t._t),t._t=setTimeout(()=>t.classList.remove("is-copied"),1400)},fn=t=>{let n=t.querySelector("svg");t._spinSettle||(t._spinSettle=()=>{clearTimeout(t._t),t.classList.remove("is-spinning"),n.style.transition="none",n.style.setProperty("--tw-spin","0deg"),n.getBoundingClientRect(),n.style.transition=""},n.addEventListener("transitionend",a=>{a.propertyName==="transform"&&t.classList.contains("is-spinning")&&performance.now()-t._spinT>250&&t._spinSettle()})),t._spinT=performance.now(),n.style.setProperty("--tw-spin",`${(parseFloat(n.style.getPropertyValue("--tw-spin"))||0)-360}deg`),t.classList.add("is-spinning"),clearTimeout(t._t);let s=()=>{n.getAnimations&&n.getAnimations().length?t._t=setTimeout(s,250):t._spinSettle()};t._t=setTimeout(s,600)},Q=null,jt=0,Dt=null,lo=t=>{t.key==="Escape"&&(t.stopPropagation(),dt())},dt=t=>{t&&Dt&&!t.contains(Dt)||(clearTimeout(jt),document.removeEventListener("keydown",lo),Q&&Q.classList.remove("is-open"))};function qo(t,n){Q||(Q=C("div","tw-tip tw-portal"),Q.setAttribute("role","tooltip")),Q.isConnected||document.body.appendChild(Q),clearTimeout(jt),Q.textContent=n,$n(Q,t);let s=Q.classList.contains("is-open");Q.style.visibility="hidden",Q.classList.add("is-open"),Dn(t,Q,{align:"center",prefer:"above",gap:8}),Q.style.visibility="",document.addEventListener("keydown",lo),Dt=t,s||requestAnimationFrame(function a(){if(Q.classList.contains("is-open")){if(!Dt.isConnected)return dt();requestAnimationFrame(a)}})}function ao(){Q&&(clearTimeout(jt),jt=setTimeout(dt,80))}var mn=".tw-slider-label, .tw-row-label, .tw-select-label, .tw-trigger-label, .tw-radiogrid-label, .tw-field-label, .tw-folder-title, .tw-fps-label, .tw-plot-label, .tw-spring-label, .tw-bezier-label";function et(t,n){let s=t.querySelector(mn)||t;if(s===t&&t.classList.contains("tw-separator"))return;let a=s.closest("button"),i=a?C("span","tw-hint",un):we("tw-hint",un),c=()=>qo(i,n);if(a){i.setAttribute("aria-hidden","true");let l=a.getAttribute("aria-description");a.setAttribute("aria-description",l?`${l}. ${n}`:n)}else i.setAttribute("aria-label",n),i.addEventListener("focus",c),i.addEventListener("blur",ao),i.addEventListener("keydown",l=>{(l.key==="Enter"||l.key===" ")&&l.stopPropagation()});i.addEventListener("pointerenter",c),i.addEventListener("pointerleave",ao),i.addEventListener("pointerdown",l=>l.stopPropagation()),i.addEventListener("click",l=>{l.preventDefault(),l.stopPropagation()}),s.appendChild(i)}async function gn(t){try{return await navigator.clipboard.writeText(t),!0}catch{}let n=document.createElement("textarea");n.value=t,n.style.position="fixed",n.style.top="-9999px",document.body.appendChild(n),n.focus(),n.select();let s=!1;try{s=document.execCommand("copy")}catch{}return document.body.removeChild(n),s}var tt=null,Le=null,pt=null,Kt=null;function Yo(t,n,s={}){let a=Object.entries(n).filter(([e])=>e!=="_last"||(console.warn('[tweaks] "_last" is reserved (the changed-key channel) \u2014 schema entry skipped'),!1)).map(([e,o])=>Ie(e,o)).filter(Boolean),i={},c=[],l=new Set,h=new Set,k=new Set,x=[],E=!1,L=!1,y=[],ae=new Map,X=!1,H=-1,W=e=>{if(!E){if(X){console.warn("[tweaks] call ignored \u2014 the panel could not be built");return}L?e():y.push(e)}},T=null,g=function(e,o){return e==="_last"&&this===i?void 0:o===void 0?null:typeof o=="bigint"?String(o):o},_=!1,K=()=>{let e={};for(let o of c){let r=e;for(let d of o.path.slice(0,-1))r=r[d]||(r[d]={});r[o.key]=o.get()}return JSON.parse(JSON.stringify(e,g))},ne=()=>{try{return JSON.parse(JSON.stringify(i,g))}catch(e){return _||(_=!0,console.warn("[tweaks] a value parked on params can't be serialised \u2014 snapshots carry the controls' values only:",e)),K()}},F=s.persist?`tw:${s.persist===!0?t:s.persist}`:null,le=F?`${F}:presets`:null,oe=e=>{try{return JSON.parse(localStorage.getItem(e)||"null")}catch{return null}},pe=(e,o)=>{try{return localStorage.setItem(e,JSON.stringify(o)),!0}catch{return!1}},re=(e,o)=>o.reduce((r,d)=>r!=null&&Pe(r,d)?r[d]:void 0,e),G=(e,o)=>{let r=re(e,o.path.slice(0,-1));return!r||typeof r!="object"||!Pe(r,o.key)?!1:(Reflect.deleteProperty(r,o.key),!0)},Re=e=>{for(let o of c)o.persist||G(e,o);return e},ue=F?(()=>{let e=0,o=!1,r=new Map,d=()=>{e=0;let v=Re(ne()),M=c.filter(p=>p.persist&&p.m.type==="image").filter(p=>!(r.get(p)===p.get()&&G(v,p)));if(pe(F,v))return;let b=M.filter(p=>G(v,p));if(b.length){for(let p of b)r.set(p,p.get());pe(F,v)&&!o&&(o=!0,console.warn("[tweaks] persist: the values didn't fit in storage with an image included \u2014 saved without it"))}};return x.push(()=>{e&&(clearTimeout(e),d())}),()=>{clearTimeout(e),e=setTimeout(d,150)}})():()=>{},fe=(e,o=i._last)=>{(e?k:h).forEach(r=>{try{r(i,o)}catch(d){console.error("[tweaks] listener threw:",d)}}),E||ue()},qe=e=>typeof e=="function"||typeof e=="symbol"||typeof e=="bigint",Ce=(e,o)=>{if(qe(o))throw new TypeError(`a ${typeof o} is not a control value`);e.set(o),e.target[e.key]=e.get()},je=e=>{It(e,e.raw,e.def),e.target[e.key]=e.get()},nt=!1,ut=()=>{if(typeof s.onReset=="function"&&!nt){nt=!0;try{return s.onReset()}finally{nt=!1}}for(let e of c)try{je(e)}catch(o){console.error(`[tweaks] resetting "${e.path.join(".")}" failed \u2014 control skipped:`,o)}i._last=void 0,fe()},m=C("div","tw-panel");m.dataset.mode="inline";let De=e=>m.setAttribute("aria-label",e.trim()||"Tweaks");m.setAttribute("role","region"),De(t),Rn(m);let D=C("div","tw-header"),ce=we("tw-header-toggle");ce.setAttribute("aria-expanded","true");let Ye=t,ft=J("span","tw-title",Ye);ce.append(ft);let Xe=C("div","tw-toolbar"),mt=()=>{let e={};for(let o of c)Oe(o.get(),o.def)&&(e[o.path.join(".")]=o.get());return JSON.parse(JSON.stringify(e,g))},Ve=Ft(e=>{if(!e)return[JSON.stringify(ne(),null,2),-1];let o=mt();return[JSON.stringify(o,null,2),Object.keys(o).length]}),te={panel:m,entries:c,fromJSON:e=>{_e?.flush(),Ke.fromJSON(e),_e?.flush()},announce:Ee,alive:()=>!E},se=$t(ut),z=null;F&&s.presets!==!1&&(z=ct("",so,"Presets"),z.setAttribute("aria-haspopup","menu"),z.setAttribute("aria-expanded","false"),Xe.append(z));let de=!!s.filter&&(s.toolbar!==!1||(console.warn("[tweaks] opts.filter needs the toolbar (its search button lives there) \u2014 ignored alongside toolbar:false"),!1)),Me=de?ct("",oo,"Filter controls"):null,U=de?C("input","tw-search"):null;de&&(U.type="text",U.placeholder="Filter\u2026",U.spellcheck=!1,U.setAttribute("aria-label","Filter controls"),Ue(U),Xe.append(Me)),Xe.append(Ve,se),D.append(ce),de&&D.append(U),s.toolbar!==!1&&D.append(Xe);let Fe=[Ve,se,z,Me].filter(Boolean);for(let e of Fe)e.disabled=!0;let he=!1,me=!1;D.addEventListener("click",e=>{me&&(me=!1,e.preventDefault(),e.stopPropagation())},!0);let Bt=()=>{m.dataset.mode==="floating"&&m.isConnected&&(rt(),ge())},$e=()=>Pt(m,ce,We,!m.classList.contains("is-collapsed"),Bt);ce.addEventListener("click",$e);let ot=!1;D.addEventListener("pointerdown",e=>{ot=e.target===D||ce.contains(e.target)},!0),D.addEventListener("click",e=>{e.target===D&&ot&&!e.defaultPrevented&&!m.classList.contains("is-searching")&&$e()});let We=C("div","tw-body"),u=C("div","tw-controls");We.append(u),m.append(D,We);let O=on(s.theme);rn(m,O),m._twTheme=O;let $=s.draggable!==!1,N=8,I=28,Z=typeof s.floating=="object"&&s.floating?s.floating:null,ie=Z?.corner||"top-left",Se=/right$/.test(ie),xe=/^bottom/.test(ie);(Se||xe)&&(m.dataset.corner=ie);let gt=()=>document.compatMode==="CSS1Compat"?document.documentElement:null,yn=()=>gt()?.clientWidth||window.innerWidth,yt=()=>gt()?.clientHeight||window.innerHeight,ht=()=>({maxX:Math.max(N,yn()-m.offsetWidth-N),maxY:Math.max(N,yt()-m.scrollHeight-1-Je)}),ze=F?`${F}:pos`:null,bt=$&&ze?oe(ze):null,qt=bt&&typeof bt=="object"&&(bt.corner||"top-left")===ie?bt:null,hn=qt||Z||{x:16,y:16},Yt=e=>{let o=parseFloat(e);return o>=0?o:16},Xt=Yt(hn.x),Vt=Yt(hn.y),V=Xt,B=Vt,Wt=!!qt,Je=N,zt=()=>{let e=parseFloat(getComputedStyle(m).getPropertyValue("--tw-float-gap"));Je=e>=0?e:s.floating&&!Wt?Yt(Z?.y):N},ge=()=>{let e=m.style;e.setProperty("--tw-float-x",V+"px"),e.setProperty("--tw-float-y",B+"px"),e.setProperty("--tw-float-max-h",`calc(100dvh - ${B+Je}px)`)},rt=()=>{zt();let{maxX:e,maxY:o}=ht();if($){V=j(V,N,e),B=j(B,N,o);return}V=j(Xt,Math.min(N,Xt),e);let r=yt()-Math.min(m.scrollHeight+1,yt()/2),d=Math.min(1,r/(Vt+Je||1));B=Math.round(Vt*d),Je=Math.round(Je*d)};($||s.floating)&&(s.floating||qt)&&(m.dataset.mode="floating",rt(),ge(),requestAnimationFrame(()=>{!E&&m.dataset.mode==="floating"&&m.isConnected&&(rt(),ge())}));let wt=e=>{je(e),i._last=e.key,fe()},mo=(e,o)=>{let r=e.querySelector(".tw-slider-value")||e.querySelector(mn)||e;r.classList.add("tw-resettable"),r.title="Double-click or hold to reset";let d=0,v=0,f=0,M=!1,b=()=>{d&&(clearTimeout(d),d=0,r.classList.remove("tw-reset-holding"))};r.addEventListener("pointerdown",p=>{p.stopPropagation(),M=!1,!(p.pointerType!=="touch"&&p.pointerType!=="pen")&&(v=p.clientX,f=p.clientY,r.classList.add("tw-reset-holding"),d=setTimeout(()=>{d=0,r.classList.remove("tw-reset-holding","is-editable"),M=!0,wt(o)},500))}),r.addEventListener("pointermove",p=>{d&&Math.abs(p.clientX-v)+Math.abs(p.clientY-f)>8&&b()}),r.addEventListener("pointerup",b),r.addEventListener("pointercancel",b),r.addEventListener("pointerleave",b),r.addEventListener("contextmenu",p=>{M&&p.preventDefault()}),r.addEventListener("click",p=>{M&&(p.preventDefault(),p.stopImmediatePropagation(),M=!1)},!0),r.addEventListener("dblclick",p=>{r===e&&p.target.closest&&p.target.closest("input, textarea")||(p.preventDefault(),p.stopPropagation(),wt(o))}),r.classList.contains("tw-slider-value")&&e.addEventListener("dblclick",p=>{let S=p.target;!S.classList||!S.classList.contains("tw-slider-input")||(p.preventDefault(),p.stopPropagation(),S.blur(),wt(o))}),e.addEventListener("keydown",p=>{!p.altKey||p.metaKey||p.ctrlKey||p.key!=="Backspace"&&p.key!=="Delete"||(p.preventDefault(),p.stopPropagation(),p.target.classList&&p.target.classList.contains("tw-slider-input")&&p.target.blur(),wt(o))})},Jt=[],Gt,go=(e,o)=>!e._hid==!o?!1:(e._hid=o,Gt?Gt(e,o):e.classList.toggle("tw-cond-hidden",o),!o),Ut=(e,o)=>{o.hint&&et(e,o.hint),(o.render||o.disabled!=null)&&Jt.push({node:e,m:o})},Qt=[],Zt=[],vt=[],kt=[],yo=e=>{typeof e.destroy=="function"&&x.push(e.destroy)},en=(e,o,r,d=[],v=null)=>{for(let f of o){if(f.type==="tabs"){let p={};l.add(p),r[f.key]=p;let S=ke("tabs"),R=S&&S(f);if(!R)continue;kt.push({path:[...d,f.key],ctrl:R,pageKeys:f.pages.map(q=>q.key)}),f.pages.forEach((q,w)=>{let A={};l.add(A),p[q.key]=A,en(R.bodies[w],q.children,A,[...d,f.key,q.key])}),Ut(R.el,f),e.append(R.el);continue}if(f.type==="folder"){let p={};l.add(p),r[f.key]=p;let S=lt(f);vt.push({path:[...d,f.key],el:S.el,setCollapsed:S.setCollapsed}),st.set(S.el,{kind:"folder",path:[...d,f.key],label:f.label});let R=de?{el:S.el,label:f.label,body:S.body}:null;R&&Zt.push(R),en(S.body,f.children,p,[...d,f.key],R),Ut(S.el,f),e.append(S.el);continue}let M=!Rt.has(f.type),b=Ze(f,M?p=>{Oe(r[f.key],p)&&(r[f.key]=p,i._last=f.key,fe())}:()=>{});if(b){if(yo(b),M){let p=b.get();Pe(r,f.key)&&b.set(r[f.key]),r[f.key]=b.get();let S={target:r,key:f.key,set:b.set,get:b.get,raw:f.value,def:p,path:[...d,f.key],persist:f.persist!==!1,m:f,el:b.el};c.push(S),mo(b.el,S),st.set(b.el,{kind:"row",entry:S,label:f.label})}Ut(b.el,f),de&&f.type!=="separator"&&Qt.push({el:b.el,label:f.label,folder:v}),e.append(b.el)}}};if(de){let e=r=>{let d=r.trim().toLowerCase(),v=!1,f=(M,b)=>{!b&&M.classList.contains("tw-filter-hidden")&&(v=!0),M.classList.toggle("tw-filter-hidden",b)};if(!d)Qt.forEach(M=>f(M.el,!1)),Zt.forEach(M=>f(M.el,!1));else{for(let M of Qt){let b=M.folder&&Tt(M.folder.label,d);f(M.el,!(Tt(M.label,d)||b))}for(let M of Zt.slice().reverse()){let b=[...M.body.children].some(p=>!p.classList.contains("tw-filter-hidden"));f(M.el,!(Tt(M.label,d)||b))}}v&&nn()},o=()=>{m.classList.remove("is-searching"),U.value="",e("")};Me.addEventListener("click",()=>{Me.disabled||(m.classList.toggle("is-searching")?(U.focus(),U.select()):o())}),U.addEventListener("input",()=>e(U.value)),U.addEventListener("keydown",r=>{r.key==="Escape"&&(r.preventDefault(),r.stopPropagation(),o(),Me.focus())})}let ho=new Set(a.map(e=>e.key)),Et=(e,o)=>{if(!(!e||typeof e!="object")){for(let r of c){let d=re(e,r.path);if(d!==void 0)try{Ce(r,d)}catch(v){console.error(`[tweaks] restoring "${r.path.join(".")}" failed \u2014 value skipped:`,v)}}for(let r of Object.keys(e))if(!ho.has(r)&&r!=="_last"&&Pe(i,r)&&!Nt(r)&&!qe(e[r]))try{i[r]=e[r]}catch(d){console.error(`[tweaks] restoring "${r}" failed \u2014 value skipped:`,d)}i._last=void 0,fe(o)}},Ge=()=>{let e=le?oe(le):null;return Object.assign(Object.create(null),e&&typeof e=="object"?e:{})},bn=e=>{let o=Ge();o[e]=ne();let r=pe(le,o);return r||console.warn(`[tweaks] preset "${e}" didn't fit in storage \u2014 not saved`),r},wn=e=>{let o=Ge();o[e]&&Et(o[e])},vn=e=>{let o=Ge();delete o[e],pe(le,o)},Lt=e=>e.map(o=>String(o).replace(/~/g,"~1").replace(/\./g,"~0")).join("."),bo=()=>{let e={};if(vt.length){let o={};for(let r of vt)o[Lt(r.path)]=r.el.classList.contains("is-collapsed");e.folders=o}if(kt.length){let o={};for(let r of kt)o[Lt(r.path)]=r.pageKeys[r.ctrl.active()]??null;e.tabs=o}return e},wo=e=>{if(!(!e||typeof e!="object")){if(e.folders)for(let o of vt){let r=e.folders[Lt(o.path)];typeof r=="boolean"&&o.setCollapsed(r)}if(e.tabs)for(let o of kt){let r=o.pageKeys.indexOf(e.tabs[Lt(o.path)]);r>=0&&r!==o.ctrl.active()&&o.ctrl.activate(r)}}};if($||s.floating){$&&(m.dataset.draggable="true");let e=()=>{if(m.dataset.mode==="floating")return;let w=m.getBoundingClientRect();if(V=Se?yn()-w.right:w.left,B=xe?yt()-w.bottom:w.top,m.parentNode&&(T=C("span","tw-lift-slot"),T.style.width=w.width+"px",T.style.height=w.height+"px",T.setAttribute("aria-hidden","true"),m.before(T)),Fn(m,m),document.body.appendChild(m),m.dataset.mode="floating",ge(),T&&typeof MutationObserver=="function"){let A=new MutationObserver(()=>{T&&!T.isConnected&&(A.disconnect(),T=null,m.remove())});A.observe(document.documentElement,{childList:!0,subtree:!0}),x.push(()=>A.disconnect())}},o=()=>{tt&&tt!==m&&tt.classList.remove("is-raised"),m.classList.add("is-raised"),tt=m},r=null,d=0,v=0,f=0,M=0,b=0,p=w=>{for(let[A,Y]of[["pointermove",R],["pointerup",q],["pointercancel",q]])w?document.addEventListener(A,Y,!0):document.removeEventListener(A,Y,!0);w?document.addEventListener("keydown",S,!0):document.removeEventListener("keydown",S,!0)},S=w=>{if(w.key!=="Escape"||r===null)return;w.preventDefault(),w.stopPropagation();let A=r;r=null,p(!1);try{D.releasePointerCapture(A)}catch{}he&&(V=f,B=M,ge()),m.classList.remove("is-dragging"),me=!0,document.addEventListener("pointerup",()=>setTimeout(()=>{me=!1},0),{capture:!0,once:!0})};$&&D.addEventListener("pointerdown",w=>{if(!(w.button!==0||r!==null||w.target.closest(".tw-toolbar, input, textarea, select"))&&(r=w.pointerId,d=w.clientX,v=w.clientY,he=!1,p(!0),m.classList.contains("is-snapping"))){clearTimeout(b);let A=getComputedStyle(m);V=parseFloat(A[Se?"right":"left"])||V,B=parseFloat(A[xe?"bottom":"top"])||B,m.classList.remove("is-snapping"),ge()}}),$&&D.addEventListener("keydown",w=>{if(w.target!==ce||!w.altKey||w.metaKey||w.ctrlKey)return;let A=w.shiftKey?50:10,Y=w.key==="ArrowRight"?A:w.key==="ArrowLeft"?-A:0,P=w.key==="ArrowDown"?A:w.key==="ArrowUp"?-A:0;if(!Y&&!P)return;w.preventDefault(),w.stopPropagation();let ee=m.dataset.mode!=="floating";Wt=!0,e(),o(),zt(),ee&&ce.focus({preventScroll:!0});let{maxX:Ct,maxY:He}=ht();V=j(V+(Se?-Y:Y),N,Ct),B=j(B+(xe?-P:P),N,He),ge(),ze&&pe(ze,{x:V,y:B,corner:ie})});let R=w=>{if(w.pointerId!==r)return;if(w.buttons===0){q(w);return}let A=w.clientX-d,Y=w.clientY-v;if(!he){if(Math.hypot(A,Y)<(w.pointerType==="mouse"?6:10))return;he=!0,Wt=!0,e(),o(),zt(),f=V,M=B;try{D.setPointerCapture(r)}catch{}m.classList.add("is-dragging")}let{maxX:P,maxY:ee}=ht();V=j(f+(Se?-A:A),N,P),B=j(M+(xe?-Y:Y),N,ee),ge()},q=w=>{if(w.pointerId===r){try{D.releasePointerCapture(r)}catch{}if(r=null,p(!1),me=he,me&&setTimeout(()=>{me=!1},0),he){let{maxX:A,maxY:Y}=ht();V<=N+I?V=N:V>=A-I&&(V=A),B<=N+I?B=N:B>=Y-I&&(B=Y),clearTimeout(b),m.classList.add("is-snapping"),b=setTimeout(()=>m.classList.remove("is-snapping"),340),ge(),ze&&pe(ze,{x:V,y:B,corner:ie})}m.classList.remove("is-dragging")}};D.addEventListener("lostpointercapture",q),x.push(()=>p(!1))}let vo=()=>{($||s.floating)&&(m.dataset.mode==="floating"&&(rt(),ge()),x.push(at(m,[[window,"resize"]],()=>{m.dataset.mode==="floating"&&(rt(),ge())})))};if(z){let e=C("div","tw-presets-menu"),o=C("div","tw-presets-save"),r=C("input","tw-presets-input");r.type="text",r.placeholder="Preset name\u2026",r.spellcheck=!1,r.setAttribute("aria-label","New preset name"),Ue(r);let d=J("button","tw-presets-savebtn","Save");o.append(r,d);let v=C("div","tw-presets-list");e.append(o,v);let f=()=>{let p=Ge(),S=Object.keys(p);if(v.replaceChildren(),!S.length)return v.append(J("div","tw-presets-empty","No presets yet"));for(let R of S){let q=C("div","tw-presets-row"),w=J("button","tw-presets-load",R);w.addEventListener("click",()=>{wn(R),b.close(),Ee(`Loaded preset ${R}`)});let A=we("tw-presets-del",io);A.setAttribute("aria-label",`Delete preset ${R}`),A.addEventListener("click",Y=>{Y.stopPropagation(),vn(R),f()}),q.append(w,A),v.append(q)}},M=()=>{let p=r.value.trim();if(!p){r.focus();return}if(!bn(p)){Ee(`Preset ${p} not saved: storage is full`);return}r.value="",f(),Ee(`Saved preset ${p}`)},b=xt(z,z,e,{width:208,fallbackH:160,gap:6,align:"end",onOpen:()=>{f(),r.focus()}});d.addEventListener("click",M),r.addEventListener("keydown",p=>{p.key==="Enter"&&M()})}if(s.onEditStart||s.onEditEnd){let e=".tw-slider, .tw-num-grab, .tw-pad, .tw-wg-area, .tw-wg-hue, .tw-wg-alpha, .tw-bezier-handle, .tw-gradient-bar, .tw-gradient-stop",o=!1,r=()=>{document.removeEventListener("pointerup",r,!0),document.removeEventListener("pointercancel",r,!0),o&&(o=!1,s.onEditEnd&&s.onEditEnd())},d=v=>{o||!v.target.closest(e)||(o=!0,s.onEditStart&&s.onEditStart(),document.addEventListener("pointerup",r,!0),document.addEventListener("pointercancel",r,!0))};m.addEventListener("pointerdown",d),m._twEditPointer=d,x.push(r)}let _e=s.undo?(()=>{let o=[],r=0,d=!1,v=0,f=(P,ee)=>{if(P===ee)return!0;if(!P||!ee||typeof P!="object"||typeof ee!="object"||Array.isArray(P)!=Array.isArray(ee))return!1;let Ct=Object.keys(P).length==Object.keys(ee).length;for(let He in P)P[He]===ee[He]?P[He]=ee[He]:f(P[He],ee[He])||(Ct=!1);return Ct},M=()=>{v=0;let P=ne();f(P,o[r])||(o=o.slice(0,r+1),o.push(P),o.length>200&&(o=o.slice(o.length-200)),r=o.length-1)},b=()=>{d||(clearTimeout(v),v=setTimeout(M,350))},p=()=>{v&&(clearTimeout(v),M())};h.add(b),k.add(b);let S=P=>{d=!0,Et(o[P]),d=!1,r=P},R=()=>{p(),r>0&&S(r-1)},q=()=>{p(),r<o.length-1&&S(r+1)},w=()=>m.matches(":hover")||m.contains(document.activeElement),A=P=>!!(P&&P.matches&&(P.matches("input, textarea")||P.isContentEditable));return{undo:R,redo:q,onKey:P=>{if(!w()||!(P.metaKey||P.ctrlKey)||A(P.target))return;let ee=P.key.toLowerCase();ee==="z"?(P.preventDefault(),P.shiftKey?q():R()):ee==="y"&&(P.preventDefault(),q())},flush:p,arm:()=>{o=[ne()],r=0}}})():null,st=new Map,ko=e=>{for(;e&&e!==m&&m.contains(e);e=e.parentElement){let o=st.get(e);if(o)return o}},Eo=e=>{for(;e&&e!==m;e=e.parentElement)if(st.get(e)?.kind==="row")return e},tn=e=>!!(e.closest(".tw-filter-hidden, .tw-cond-hidden, .tw-tabs-page:not([data-active=true])")||e.parentElement?.closest(".is-collapsed")),ye,kn=e=>{let o=e.target;!m.contains(o)&&!o.closest?.(".tw-portal")&&Te()},Te=()=>{ye&&(ye[0].classList.remove("is-picked"),ye=void 0,document.removeEventListener("pointerdown",kn,!0),Le?.[0]===m&&(Le=null))},Lo=(e,o)=>{Le&&Le[0]!==m&&Le[1](),Te(),ye=[e,o],Le=[m,Te],e.classList.add("is-picked"),document.addEventListener("pointerdown",kn,!0);let r=[...e.querySelectorAll('button:not(:disabled):not([tabindex="-1"]), [tabindex="0"]')].find(d=>!d.closest(".tw-hint, .tw-portal, [inert]"));r?r.focus({preventScroll:!0,focusVisible:!1}):document.activeElement?.blur?.(),document.getSelection?.()?.removeAllRanges()};x.push(Te),m.addEventListener("pointerdown",e=>{let o=e.target;if(Eo(o)||o.closest(".tw-header, .tw-folder-header, button, input, textarea, select")){ye?.[0].contains(o)||Te();return}if(e.button!==0||e.pointerType==="touch")return Te();let r;for(let[d,v]of st){let f=(v.kind==="folder"?d.firstElementChild:d).getBoundingClientRect();f.height&&e.clientY>=f.top&&e.clientY<f.bottom&&!tn(d)&&(r=[d,v])}if(!r)return Te();e.preventDefault(),Lo(...r)},!0);let En=e=>!!(e&&e.matches&&(e.matches("input, textarea, select")||e.isContentEditable)),Co=e=>{if(e.key==="Escape"){ye&&(e.stopPropagation(),Te());return}if(!(e.metaKey||e.ctrlKey)||e.altKey||e.repeat||En(e.target))return;let o=e.key.toLowerCase();if(o!=="c"&&o!=="v")return;Le&&!Le[0].isConnected&&Le[1](),ye&&tn(ye[0])&&Te();let r=document.activeElement,d=ye?ye[1]:Le||!r||tn(r)?void 0:ko(r);if(!d||o==="c"&&String(document.getSelection?.()||""))return;let v=o==="c"?JSON.stringify(d.kind==="row"?d.entry.get():re(ne(),d.path),g,2):"",f=w=>{E||Ee(w?`${d.label} copied`:"Copy failed")},M=ye?.[0],b=document.activeElement,p=!!b?.matches(":focus-visible");if(!pt){pt=C("textarea","tw-sr"),pt.tabIndex=-1,pt.setAttribute("aria-hidden","true");for(let w of["copy","paste"])document.addEventListener(w,A=>Kt?.(A),!0)}let S=pt,R=()=>{Kt=null,document.activeElement===S&&(S.blur(),b?.focus?.({preventScroll:!0,focusVisible:p}))},q=Kt=w=>{if(w.target!==S&&En(w.target))return;if(w.preventDefault(),R(),v)return w.clipboardData?.setData("text/plain",v),f(!!w.clipboardData);let A=w.clipboardData?.getData("text/plain")??null;import("./clip-ECGCECEC.js").then(Y=>Y.pasteInto(A,P=>Y.pasteScope(te,d,P),te,M),()=>{})};S.isConnected||document.body.appendChild(S),S.value=v,S.focus({preventScroll:!0}),S.select(),setTimeout(()=>{Kt===q&&(R(),v&&gn(v).then(f))},1e3)},Ln=()=>{if(!E){if(H=x.length,en(u,a,i),Jt.length){let e=new Map;for(let d of c)e.has(d.key)||e.set(d.key,d);let o=d=>{let v=e.get(d);return v?v.target[v.key]:i[d]},r=()=>{let d=!1;for(let{node:v,m:f}of Jt)try{if(f.render&&go(v,!f.render(o))&&(d=!0),f.disabled!=null){let M=typeof f.disabled=="function"?f.disabled(o):f.disabled;At(v,!!M)}}catch{}d&&nn()};h.add(r),k.add(r),r(),import("./fold-UGN7TXGX.js").then(d=>{Gt=d.fold},()=>{})}if(F&&Et(Re(oe(F))),!E){_e?.arm(),vo(),x.push(at(m,[[document,"keydown"]],e=>{_e?.onKey(e),Co(e)})),L=!0;for(let e of y.splice(0)){if(E)break;try{e()}catch(o){console.error("[tweaks] a call queued before ready failed:",o)}}ae.clear();for(let e of Fe)e.disabled=!1}}},Cn=(e,o)=>{if(String(e).split(".").some(Nt))return console.warn(`[tweaks] set("${e}") ignored \u2014 reserved key`),!1;let r=String(e).split("."),d;if(r.length>1){let b=i;for(let p=0;p<r.length-1&&b;p++)b=b[r[p]],l.has(b)||(b=null);if(d=b&&c.find(p=>p.target===b&&p.key===r[r.length-1]),!d)return console.warn(`[tweaks] set("${e}") \u2014 no control at that path`),!1}else{let b=c.filter(S=>S.key===e),p=b.find(S=>S.target===i);if(!p&&b.length>1)return console.warn(`[tweaks] set("${e}") is ambiguous \u2014 ${b.length} controls share that key; use a dotted path (e.g. "${b[0].path.join(".")}")`),!1;d=p||b[0]}let v=d?d.target:i,f=d?d.key:e,M=v[f];if(d&&qe(o))return console.warn(`[tweaks] set("${e}") ignored \u2014 a ${typeof o} is not a control value`),!1;if(d)try{Ce(d,o)}catch(b){return console.error(`[tweaks] set("${e}") failed \u2014 value skipped:`,b),!1}else{if(l.has(i[e]))return console.warn(`[tweaks] set("${e}") ignored \u2014 it's a folder/tabs group; set its children instead`),!1;i[e]=o}return Oe(M,v[f])?(i._last=f,!0):!1},Ke={el:m,params:i,on(e){return E?()=>{}:(h.add(e),()=>h.delete(e))},set(e,o,r){let d=String(e),v=r?.silent;W(()=>{Cn(d,o)&&fe(v)})},setMany(e,o){if(e==null||typeof e!="object")return;let r=Object.entries(e),d=o?.silent;W(()=>{let v=!1;for(let[f,M]of r)try{Cn(f,M)&&(v=!0)}catch(b){console.error(`[tweaks] setMany("${f}") failed \u2014 key skipped:`,b)}v&&fe(d)})},reset(){L&&!E&&fn(se),W(ut)},toJSON(){return E?{values:{},ui:{}}:{values:ne(),ui:bo()}},changes(){return E?{}:mt()},fromJSON(e,o){if(!e||typeof e!="object")return;let r=o?.silent,d=e.values&&typeof e.values=="object"?{...e.values}:e.values,v=e.ui&&typeof e.ui=="object"?{...e.ui}:e.ui;W(()=>{d&&Et(d,r),wo(v)})},setName(e){E||(Ye=String(e),ft.textContent=Ye,De(Ye))},setTheme(e){if(!E){if(O)for(let o in O)m.style.removeProperty(o);O=on(e),m._twTheme=O,rn(m,O),window.dispatchEvent(new Event("tw-retheme"))}},savePreset:e=>{if(E||X||!le||!e)return!1;L||ae.set(String(e),"save");let o=!0;return W(()=>{o=bn(e)}),o},loadPreset:e=>{let o=ae.get(String(e));return E||X||o==="delete"||!(o==="save"||Ge()[e])?!1:(W(()=>wn(e)),!0)},deletePreset:e=>{le&&(L||ae.set(String(e),"delete"),W(()=>vn(e)))},presets:()=>E?[]:Object.keys(Ge()),undo:()=>{_e&&W(_e.undo)},redo:()=>{_e&&W(_e.redo)},destroy(){if(!E){E=!0,Kn(m),dt(m);for(let e of x.splice(0))try{e()}catch{}h.clear(),T&&(T.remove(),T=null),tt===m&&(tt=null),m.dataset.twDestroyed="",m.remove()}}},Mn=Qe(a);if(Mn){let e=o=>{if(X=!0,y.length=0,H>=0)for(let r of x.splice(H))try{r()}catch{}for(let r of u.children)r.dataset.twDestroyed="";throw h.clear(),c.length=0,u.replaceChildren(),E||console.warn(`[tweaks] "${t}": the panel could not be built \u2014 ${H>=0?"the build threw":"its lazy controls failed to load"}; the API is inert`),o};Ke.ready=m.ready=Mn.then(Ln).then(()=>Ke,e),Ke.ready.catch(()=>{})}else Ln(),Ke.ready=m.ready=Promise.resolve(Ke);return Ke}var co={metaFor:Ie,restoreDefault:It,hasOwn:Pe,valueChanged:Oe,SPRING_KEYS:Ht,ensureForMetas:Qe,LAZY_IMPORT:Be,createFolder:lt,createControl:Ze,makeCopyBtn:Ft,makeResetBtn:$t,addHintMarker:et};function po(t=document){let n=ln();return n?n?n(t,co):Promise.resolve():import("./markup-MLAHTUK4.js").then(()=>ln()(t,co),s=>console.error("[tweaks] markup chunk failed to load:",s))}if(typeof document<"u"){let t=()=>{document.querySelector('[data-tw], .tw-panel[data-mode="inline"] > .tw-controls')&&po(document)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t()}var uo=t=>C("div",`${t} tw-standalone tw-portal`),fo=(t,n,s)=>{let a=Qe(t);if(!a)return n(),Promise.resolve(s);let i=a.then(n).then(()=>s);return i.catch(()=>{}),i};function Xo(t,n,s={}){let a=s.key??"value",i=Ie(a,n);if(!i||i.type==="folder"||i.type==="tabs")throw new TypeError(`[tweaks] mountControl: "${a}" is not a single-control schema value`);s.label!=null&&(i.label=String(s.label));let c=!Rt.has(i.type),l=uo("tw-control");t.append(l);let h=null,k=!1,x=i.value,E,L=!1,y=H=>{Oe(x,H)&&(x=H,s.onChange&&s.onChange(H,a))},ae=()=>{if(k||(h=Ze(i,c?y:()=>{}),!h))return;i.hint&&et(h.el,i.hint);let H=()=>{};try{i.render&&!i.render(H)&&h.el.classList.add("tw-cond-hidden")}catch{}try{(typeof i.disabled=="function"?i.disabled(H):i.disabled)&&At(h.el,!0)}catch{}l.append(h.el),c&&(x=h.get(),L&&(h.set(E),y(h.get())))},X={el:l,set:H=>{k||!c||(h?(h.set(H),y(h.get())):(E=H,L=!0))},get:()=>c?h?h.get():L?E:i.value:void 0,destroy:()=>{k=!0,h&&typeof h.destroy=="function"&&h.destroy(),l.dataset.twDestroyed="",l.remove()},ready:null};return X.ready=fo([i],ae,X),X}function Vo(t={}){let n=uo("tw-color-picker"),s=null,a=!1,i=t.value,c,l=!1,h=null,k=L=>{Oe(i,L)&&(i=L,t.onChange&&t.onChange(L))},x=()=>{if(a)return;let L=ke("colorpicker");L&&(s=L({value:t.value,mode:t.mode},k),i=s.get(),n.append(s.el),h&&s.setMode(h),l&&(s.set(c),k(s.get())),St(s.reflow))},E={el:n,set:L=>{a||(s?(s.set(L),k(s.get())):(c=L,l=!0))},get:()=>s?s.get():l?c:t.value,mode:()=>s?s.mode():h||t.mode||"oklch",setMode:L=>{s?s.setMode(L):h=L},reflow:()=>{s&&s.reflow()},destroy:()=>{a=!0,n.remove()},ready:null};return E.ready=fo([{type:"color"}],x,E),E}export{Vo as createColorPicker,po as enhance,So as gradientCss,Mo as gradientStops,Xo as mountControl,Yo as tweaks};
1
+ import{$ as ve,A as nn,B as jn,C as Ue,E as Dn,F as on,G as rn,H as Fn,I as $n,J as Kn,K as xt,L as Tt,M as sn,N as Bn,O as an,Q as qn,R as Yn,S as At,T as Pt,U as Xn,V as Vn,W as Wn,X as zn,Y as Jn,Z as Ae,_ as Ot,aa as ke,ca as ln,d as So,da as Ee,e as Mo,f as Mn,g as j,h as be,i as xn,j as Tn,k as An,l as Pn,m as it,n as On,o as _n,p as Hn,q as St,r as Ne,s as Nn,t as In,u as S,v as we,w as J,x as Rn,y as Mt,z as at}from"./chunk-7OSCMZ2J.js";var Be={number:()=>import("./heavy-PKOMHB3C.js"),interval:()=>import("./interval-L2E4L3AZ.js"),color:()=>import("./colour-2RE3FQ5E.js"),gradient:()=>import("./gradient-DB6XTDHO.js"),shadow:()=>import("./shadow-IKYOV3VN.js"),sides:()=>import("./sides-FH227Z54.js"),tabs:()=>import("./tabs-BKK5NIIY.js"),image:()=>import("./image-7MCLBOZ3.js"),fpsgraph:()=>import("./monitor-IEK742PG.js"),monitor:()=>import("./monitor-IEK742PG.js"),spring:()=>import("./spring-3PKAFIH7.js"),cubicbezier:()=>import("./bezier-2RABC6LD.js"),motion:()=>Promise.all([import("./bezier-2RABC6LD.js"),import("./spring-3PKAFIH7.js")]).then(()=>import("./motion-N5UNVR55.js")),point:()=>import("./point-YMMHSLO7.js"),plot:()=>import("./plot-VVTOY3RA.js")},_t={},xo=t=>ke(t)||!Be[t]?null:_t[t]||(_t[t]=Be[t]().catch(n=>{throw delete _t[t],console.error(`[tweaks] control chunk "${t}" failed to load:`,n),n})),cn=(t,n=new Set)=>{for(let s of t)if(s&&(Be[s.type]&&n.add(s.type),s.children&&cn(s.children,n),s.pages))for(let a of s.pages)cn(a.children,n);return n},Qe=t=>{let n=[...cn(t)].map(xo).filter(Boolean);return n.length?Promise.all(n):null};function Ie(t,n,s=0){if(Nt(t))return null;let a=Po(t,n,s);return a&&n&&typeof n=="object"&&(typeof n.render=="function"&&(a.render=n.render),n.disabled!=null&&(a.disabled=n.disabled),n.hint!=null&&(a.hint=String(n.hint)),n.persist===!1&&(a.persist=!1)),a}var Pe=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),Nt=t=>t==="__proto__"||t==="constructor"||t==="prototype",Oe=(t,n)=>t!==n&&!(be(t)&&be(n)&&JSON.stringify(t)===JSON.stringify(n)),It=(t,n,s)=>{t.set(s),t.set(n)},Gn=t=>Array.isArray(t.options)&&{type:"radiogrid",options:t.options,value:t.value??Ne(t.options[0]),cols:t.cols},To=(t,...n)=>{let s=(n.length?n:[0]).map(c=>St(Number.isFinite(+c)?+c:0)),a=t.min??Math.min(...s.map(c=>c[0])),i=t.max??Math.max(...s.map(c=>c[1]));return{min:a,max:i,step:t.step??it(a,i)}},dn=(t,n)=>t.label==null?n:String(t.label),Un=t=>typeof t=="function"?t:void 0,Qn=t=>typeof t=="string"&&t.trim()?t.trim().slice(0,12):void 0,Ht=["stiffness","damping","mass","visualDuration","bounce"],Zn={slider:t=>{let n=To(t,t.value??t.min??0);return{value:t.value??n.min,...n,soft:t.soft,unit:Qn(t.unit),format:Un(t.format),parse:Un(t.parse)}},number:t=>({value:t.value??0,min:t.min,max:t.max,step:t.step??1,soft:t.soft,unit:Qn(t.unit)}),checkbox:t=>({value:!!t.value}),radiogrid:Gn,segmented:Gn,list:t=>Array.isArray(t.options)&&{options:t.options,value:t.value??Ne(t.options[0])},text:t=>({value:t.value??"",rows:t.rows,placeholder:t.placeholder}),spring:t=>{let n=be(t.value)?t.value:t,s={stiffness:n.stiffness??300,damping:n.damping??26,mass:n.mass??1};Number.isFinite(+n.visualDuration)&&(s.visualDuration=+n.visualDuration),Number.isFinite(+n.bounce)&&(s.bounce=+n.bounce);let a=t.mode??n.mode;return(a==="time"||a==="physics")&&(s.mode=a),{value:s}},motion:t=>{let n=typeof t.value=="string"||Array.isArray(t.value)?{...t,curve:t.value}:be(t.value)?t.value:t,s=Ht.some(i=>n[i]!=null),a={curve:"ease",duration:300,...s?{}:{visualDuration:.5,bounce:.2}};for(let i of["mode","curve","duration",...Ht])n[i]!=null&&(a[i]=n[i]);return a.mode!=="easing"&&a.mode!=="spring"&&(a.mode=s?"spring":"easing"),{value:a}},point:t=>{if(!Array.isArray(t.components)||!t.components.length)return!1;let n=new Set,s=t.components.map((a,i)=>{let c=String(a.key??((a.label?String(a.label).toLowerCase():"")||`c${i}`)),l=c,b=2;for(;n.has(l);)l=`${c}-${b++}`;return n.add(l),{...a,key:l}});return{components:s,pad:t.pad,invertY:t.invertY,value:Object.fromEntries(s.map(a=>[a.key,a.value??0]))}},buttongroup:t=>({buttons:t.buttons}),separator:()=>({}),tabs:(t,n)=>{if(!t.pages||typeof t.pages!="object"||!Object.keys(t.pages).length)return!1;let s=new Set;return{pages:Object.entries(t.pages).map(([a,i])=>{let c=a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"tab",l=c,b=2;for(;s.has(l);)l=`${c}-${b++}`;return s.add(l),{key:l,title:a.trim()?a:"Tab",children:Object.entries(i).map(([k,x])=>Ie(k,x,n+1)).filter(Boolean)}})}}},Ao=Object.assign(Object.create(null),{list:"options",radiogrid:"options",segmented:"options",point:"components",tabs:"pages"});function Po(t,n,s=0){if(s>64)return null;let a=Mn(t),i=(c,l,b=a)=>({type:c,key:t,label:b,...l});if(be(n)&&!Array.isArray(n)&&Pe(Zn,n.type)){let c;try{c=Zn[n.type](n,s)}catch(l){return console.error(`[tweaks] malformed "${n.type}" schema value for "${t}" \u2014 control skipped:`,l),null}if(c)return i(String(n.type),c,dn(n,a));if(Pe(n,Ao[n.type]))return console.error(`[tweaks] malformed "${n.type}" schema value for "${t}" \u2014 control skipped`),null}else if(be(n)&&!Array.isArray(n)&&typeof n.type=="string"&&(Be[n.type]||ke(n.type))){let{type:c,label:l,...b}=n;return i(c,b,dn(n,a))}if(Array.isArray(n)&&Array.isArray(n[0])&&n[0].length===2&&typeof n[0][0]=="number"){let c=Number.isFinite(+n[1])?+n[1]:+n[0][0],l=Number.isFinite(+n[2])?+n[2]:+n[0][1];return i("interval",{value:n[0].map(Number),min:c,max:l,step:n[3]??it(c,l)})}if(Array.isArray(n)&&n.length<=4&&typeof n[0]=="number"){let c=n[0],[l,b]=St(c),k=n.length>1?n[1]:l,x=n.length>2?n[2]:b;return i("slider",{value:c,min:k,max:x,step:n[3]??it(k,x)})}if(typeof n=="number"){let[c,l]=St(n);return i("slider",{value:n,min:c,max:l,step:it(c,l)})}return typeof n=="boolean"?i("checkbox",{value:n}):Array.isArray(n)?i("list",{options:n,value:Ne(n[0])}):be(n)&&typeof n.action=="function"?i("button",{action:n.action},dn(n,a)):be(n)&&Array.isArray(n.options)?i("list",{options:n.options,value:n.value??Ne(n.options[0])}):xn(n)?i("color",{value:n}):typeof n=="string"?i("text",{value:n}):be(n)?i("folder",{children:Object.entries(n).filter(([c,l])=>!(c==="render"&&typeof l=="function")&&!((c==="disabled"||c==="hint")&&l!=null)).map(([c,l])=>Ie(c,l,s+1)).filter(Boolean)}):null}var Rt=new Set(["button","fpsgraph","monitor","buttongroup","separator"]);var eo=Ae('<path class="tw-copy-back" d="m5.5 16.5-.7-.2q-1.5-.6-2.1-2.1-.2-.7-.2-2.7v-2c0-3.3 0-5 1-6s2.7-1 6-1h2c1.4 0 2 0 2.7.2q1.6.5 2.1 2.1l.2.7"/><path class="tw-copy-front" d="M7.5 14.5c0-3.3 0-5 1-6s2.7-1 6-1 5 0 6 1 1 2.7 1 6 0 5-1 6-2.7 1-6 1-5 0-6-1-1-2.7-1-6"/>',"tw-toolbar-btn__copy"),to=Ae('<path d="m5 14 3.5 3.5L19 6.5"/>',"tw-toolbar-btn__check",2.4),no=Ae('<path d="M3 12a9 9 0 1 0 9-9 9 9 0 0 0-7.6 4.2M3.3 3l.2 2q0 2.2.6 2.7t2.7.2l2-.2"/>'),oo=Ae('<path d="m17 17 4 4m-2-10a8 8 0 0 0-16 0 8 8 0 0 0 16 0"/>'),un=t=>Ae('<path d="M18 9s-4.4 6-6 6-6-6-6-6"/>',t,2.5),ro=un("tw-chevron"),so=Ae('<path d="M20.2 13.5q1.8.8 1.8 1.5 0 .8-2.7 2l-5 2.2Q13 20 12 20q-.7 0-2.4-.8l-4.9-2.3Q2 16 2 15t1.8-1.5"/><path class="tw-layer-top" d="M9.6 4.8Q11.3 4 12 4t2.4.8l4.9 2.3Q22 8 22 9c0 .7-.9 1.1-2.7 2l-5 2.2Q13 14 12 14q-.7 0-2.4-.8l-4.9-2.3Q2 10 2 9c0-.7.9-1.1 2.7-2z"/>'),io=Ae('<path d="M18 6 6 18m12 0L6 6"/>',"",2.2),pn=Ae('<circle cx="12" cy="12" r="10"/><path d="M12 16v-4m-.25-3.75a.25.25 0 0 0 .5 0 .25.25 0 0 0-.5 0"/>');var Oo=3;function _o(t,n){let s=t.label,{min:a,max:i,step:c}=On(t.min,t.max,t.step);t.soft||([a,i]=Pn(a,i,c));let l=(i-a)/c<=6,b=Number.isFinite(+t.value)?+t.value:a,k=t.soft&&!l?b:j(b,a,i),x=0,L=Tn(c),C=S("div","tw-slider-wrap"),y=S("div","tw-slider"),ae=S("div","tw-slider-hashmarks"),X=S("div","tw-slider-fill"),H=S("div","tw-slider-handle"),W=J("span","tw-slider-label",s),T=S("span","tw-slider-value"),g=typeof t.unit=="string"?t.unit.trim():"",_=document.createTextNode(""),K=g?/^[%°]$/.test(g)?g:" "+g:"";T.append(_),g&&T.append(J("span","tw-slider-unit",K));let ne=t.format,F=t.parse,le=p=>{if(ne)try{let O=ne(p);if(typeof O=="string"&&O)return O}catch{}return p.toFixed(L)};y.append(ae,X,H,W,T),C.append(y),y.tabIndex=0,y.setAttribute("role","slider"),y.setAttribute("aria-label",s),y.setAttribute("aria-valuemin",String(a)),y.setAttribute("aria-valuemax",String(i));let oe=p=>An(p,a,c),ue=l?Array.from({length:Math.max(0,Math.round((i-a)/c)-1)},(p,O)=>(O+1)*c/(i-a)*100):[];for(let p of ue){let O=S("div","tw-slider-hashmark");O.style.left=p+"%",ae.append(O)}let re=()=>{let p=j((k-a)/(i-a||1)*100,0,100),O=x?` + ${x.toFixed(1)}px`:"",$=`${p}%${O}`;X.style.width=x?`calc(${$})`:p+"%",H.style.left=`max(5px, calc(${$} - 9px))`;let N=oe(k),I=le(N);_.data=I,y.setAttribute("aria-valuenow",String(N)),y.setAttribute("aria-valuetext",I+K);let Z=C.offsetWidth,ie=T.offsetWidth;if(Z){ie&&(W.style.maxWidth=Math.max(0,Z-ie-30)+"px");let Me=Math.max(5,p/100*Z+x-9);y.classList.toggle("is-dodge",Hn(W,T,Me,3))}};re();let G=null,Re=1,pe=null,fe=!0,qe,Ce=null,je=null,nt=`width 0.34s ${an}`,pt=`left 0.34s ${an}, opacity 0.15s, transform 0.2s ${Bn}`,m=.2,De=p=>{if(!G)return k;let O=C.offsetWidth||G.width,$=j((p-G.left)/Re/O,0,1);return j(a+$*(i-a),a,i)},D=(p,O=!0)=>{p=+p,Number.isFinite(p)&&(k=l?j(oe(p),a,i):t.soft?p:j(p,a,i),re(),O&&n(oe(k)))},ce=Math.max(1,Math.round((i-a)/c)),Ye=.2,ft=.3,Xe=520,mt=27,Ve=p=>(p-a)/c,te=0,se=0,z=0,de=!1,Se=null,U=k,Fe=0,he=()=>{z&&cancelAnimationFrame(z),z=0,Fe=0},me=p=>{if(!y.isConnected){he();return}let O=Fe?Math.min((p-Fe)/1e3,.05):1/60;Fe=p;let $=C.offsetWidth||G&&G.width||1,N=Ve(j(U,a,i)),I=j(Math.round(N+Ye),0,ce),Z=de?I+ft*j(N-I,-.5,.5):I;if(sn&&sn.matches)te=Z,se=0;else{let ie=O,Me=1/240;for(;ie>1e-4;){let xe=Math.min(Me,ie);ie-=xe;let gt=Xe*(Z-te)-mt*se;se+=gt*xe,te+=se*xe,te<0&&(te=0,se=0),te>ce&&(te=ce,se=0)}}x=(te-I)*c/(i-a||1)*$,k=j(a+I*c,a,i),re(),I!==Se&&(Se=I,n(oe(k))),!de&&Math.abs(se)<.004&&Math.abs(te-I)<.004?(te=I,se=0,x=0,re(),he(),y.classList.remove("is-active")):z=requestAnimationFrame(me)},Bt=p=>{te=Ve(k),se=0,de=!0,Se=Math.round(Ve(k)),U=De(p),z||(z=requestAnimationFrame(me))};y.addEventListener("pointerdown",p=>{if(!T.classList.contains("is-editing")&&!(p.button!==0||pe)){p.preventDefault(),y.focus({focusVisible:!1}),je=p.pointerId;try{p.target.setPointerCapture(p.pointerId)}catch{}clearTimeout(qe),y.style.transition="",pe={x:p.clientX,y:p.clientY},fe=!0,y.classList.add("is-active"),G=C.getBoundingClientRect(),Re=G.width/(C.offsetWidth||G.width),l?(X.style.transition="",H.style.transition="",Bt(p.clientX)):(X.style.transition=nt,H.style.transition=pt,D(De(p.clientX)))}}),y.addEventListener("pointermove",p=>{if(!(!pe||p.pointerId!==je)){if(p.buttons===0){$e();return}if(fe&&Math.hypot(p.clientX-pe.x,p.clientY-pe.y)>Oo&&(fe=!1,y.classList.add("is-dragging"),l||(X.style.transition="",H.style.transition="")),!fe)if(qn(y,G,p.clientX),l)U=De(p.clientX);else{let O;if(p.altKey){Ce||(Ce={x:p.clientX,v:k});let $=C.offsetWidth||G.width;O=j(Ce.v+(p.clientX-Ce.x)/$*(i-a)*m,a,i)}else Ce=null,O=De(p.clientX);D(O)}}});let $e=p=>{!pe||p&&p.pointerId!==je||(l?(de=!1,y.classList.remove("is-dragging"),z||(z=requestAnimationFrame(me))):(qe=setTimeout(()=>{X.style.transition="",H.style.transition=""},360),y.classList.remove("is-active","is-dragging")),Yn(y),pe=null,Ce=null,je=null)};y.addEventListener("pointerup",$e),y.addEventListener("pointercancel",$e),y.addEventListener("lostpointercapture",$e),jn(y,re),Mt(re),at(y,[[window,"resize"]],re),y.addEventListener("keydown",p=>{if(p.target!==y||pe)return;let O=_n(p,k,c,a,i,(i-a)/10||c*10);O!=null&&(p.preventDefault(),l&&(he(),x=0,y.classList.remove("is-active")),D(j(O,a,i)))});let ot;T.addEventListener("mouseenter",()=>{ot=setTimeout(()=>T.classList.add("is-editable"),800)}),T.addEventListener("mouseleave",()=>{clearTimeout(ot),T.classList.contains("is-editing")||T.classList.remove("is-editable")}),T.addEventListener("pointerdown",p=>{p.pointerType&&p.pointerType!=="mouse"?(T.classList.add("is-editable"),p.stopPropagation()):T.classList.contains("is-editable")&&p.stopPropagation()});let We=()=>{if(T.classList.contains("is-editing"))return;let p=S("input","tw-slider-input");p.type="text",p.inputMode=F?"text":"decimal",Ue(p),p.value=F?le(oe(k)):oe(k).toFixed(L);let O=p.value;p.style.width=O.length+1+"ch",T.classList.add("is-editing"),T.replaceWith(p),p.focus(),p.select();let $=()=>{p.replaceWith(T),T.classList.remove("is-editing","is-editable")},N=()=>{let I=p.value,Z=NaN;if(I!==O)try{Z=F?F(I):Number(I.replace(g,"").trim()||NaN)}catch{}Number.isFinite(Z)&&D(t.soft?Z:j(Z,a,i)),$()};p.addEventListener("pointerdown",I=>I.stopPropagation()),p.addEventListener("blur",N),p.addEventListener("keydown",I=>{I.key==="Enter"?(p.removeEventListener("blur",N),y.focus(),N()):I.key==="Escape"&&(I.stopPropagation(),p.removeEventListener("blur",N),y.focus(),$())})};return T.addEventListener("click",()=>{T.classList.contains("is-editable")&&We()}),y.addEventListener("keydown",p=>{p.key==="Enter"&&p.target===y&&!pe&&(p.preventDefault(),We())}),{el:C,set:p=>D(p,!1),get:()=>oe(k)}}function Ho(t,n){let s=S("div","tw-row"),a=Jn([{value:"off",label:"Off"},{value:"on",label:"On"}],t.value?"on":"off",i=>n(i==="on"),t.label);return s.append(J("span","tw-row-label",t.label),a.el),{el:s,set:i=>a.set(i?"on":"off"),get:()=>a.get()==="on"}}function No(t,n){let s=t.options||[],a=Math.min(3,Math.max(2,t.cols||(s.length<=3?s.length:s.length===4?2:3))),i=S("div",s.length>a?"tw-radiogrid is-grid":"tw-radiogrid"),c=S("div","tw-radiogrid-grid");c.style.setProperty("--tw-rg-cols",a),c.setAttribute("role","radiogroup"),c.setAttribute("aria-label",t.label);let l=t.value??Ne(s[0]),b=s.map(L=>{let C=Wn("tw-radiogrid-btn",L,y=>x(y));return c.append(C),C}),k=()=>Vn(b,l),x=(L,C=!0)=>{L!=null&&!b.some(y=>y._twVal===L)||(l=L,k(),C&&n(L))};return c.addEventListener("keydown",L=>{let C=Xn(b,l);if(C<0)return;let y=zn(L.key,C,b.length,a);y<0||(L.preventDefault(),y!==C&&(x(b[y]._twVal),b[y].focus()))}),k(),i.append(J("span","tw-radiogrid-label",t.label),c),{el:i,set:L=>x(L,!1),get:()=>l}}var Io=/^(?:#[0-9a-f]{3,8}|[a-z]+|(?:oklch|oklab|rgba?|hsla?|hwb|lab|lch|color|var)\([^()]*\))$/i,Ro=un("tw-select-chevron");function jo(t,n){let s=t.value,a=t.options.map(g=>({value:Ne(g),label:In(g),color:g&&typeof g=="object"&&typeof g.color=="string"&&Io.test(g.color.trim())?g.color.trim():""})),i=S("div","tw-select"),c=we("tw-select-trigger");c.setAttribute("aria-haspopup","listbox"),c.setAttribute("aria-expanded","false");let l=S("span","tw-select-right"),b=g=>`linear-gradient(${g}, ${g}), var(--tw-checker)`,k=g=>{let _=S("span","tw-option-swatch");return _.style.background=b(g),_},x=S("span","tw-option-swatch"),L=S("span","tw-select-value");l.append(x,L),l.insertAdjacentHTML("beforeend",Ro),c.append(J("span","tw-select-label",t.label),l);let C=S("div","tw-select-dropdown");C.setAttribute("role","listbox");let y=a.map(g=>{let _=we("tw-select-option");return _.setAttribute("role","option"),g.color&&_.append(k(g.color)),_.append(J("span","tw-option-label",g.label)),_.dataset.value=g.value,_.addEventListener("click",()=>{X(g.value),T.close()}),C.append(_),_});i.append(c,C);let ae=()=>{let g=a.find(_=>_.value===s);L.textContent=g?.label??s,x.style.display=g?.color?"":"none",g?.color&&(x.style.background=b(g.color)),y.forEach(_=>{let K=_.dataset.value===String(s);_.dataset.selected=String(K),_.setAttribute("aria-selected",String(K))})},X=(g,_=!0)=>{g!=null&&!a.some(K=>K.value===g)||(s=g,ae(),_&&n(g))},H="",W=0,T=xt(i,c,C,{fallbackH:200,movable:!1,onOpen:()=>{H="",(y.find(g=>g.dataset.value===String(s))||y[0])?.focus()}});return c.addEventListener("keydown",g=>{!T.isOpen()&&(g.key==="ArrowDown"||g.key==="ArrowUp")&&(g.preventDefault(),T.open())}),C.addEventListener("keydown",g=>{let _=y.indexOf(document.activeElement),K=_,ne=!!H&&performance.now()-W<600;if(g.key==="ArrowDown")K=_<0?0:Math.min(y.length-1,_+1);else if(g.key==="ArrowUp")K=_<0?y.length-1:Math.max(0,_-1);else if(g.key==="Home")K=0;else if(g.key==="End")K=y.length-1;else if(g.key.length===1&&(g.key!==" "||ne)&&!g.ctrlKey&&!g.metaKey&&!g.altKey&&!g.isComposing){let F=g.key.toLowerCase();H=(ne?H:"")+F,W=performance.now();let le=H===F.repeat(H.length/F.length),oe=le?F:H,ue=re=>a.findIndex((G,Re)=>Re>=re&&String(G.label).toLowerCase().trimStart().startsWith(oe));if(K=ue(le?_+1:_),K<0&&(K=ue(0)),K<0&&g.key!==" ")return}else return;g.preventDefault(),y[K]?.focus()}),ae(),{el:i,set:g=>X(g,!1),get:()=>s}}function Do(t){let n=J("button","tw-button",t.label);return n.addEventListener("click",()=>typeof t.action=="function"&&t.action()),Ot(n)}function Fo(t){let n=S("div","tw-row tw-buttongroup");t.label&&n.append(J("span","tw-row-label",t.label));let s=S("div","tw-buttongroup-btns"),a=Array.isArray(t.buttons)?t.buttons.map(i=>[i.label??"Button",i.action]):Object.entries(t.buttons||{});for(let[i,c]of a){let l=J("button","tw-buttongroup-btn",i);l.addEventListener("click",()=>typeof c=="function"&&c()),s.append(l)}return n.append(s),Ot(n)}var $o=()=>Ot(S("div","tw-separator"));function Ko(t,n){let s=k=>k==null?"":typeof k=="object"?Nn(k):String(k),a=s(t.value),i=t.rows>0,c=S("div",i?"tw-row tw-row-multiline":"tw-row"),l=S(i?"textarea":"input",i?"tw-text tw-textarea":"tw-text");i?l.rows=t.rows:l.type="text",l.value=a,Ue(l),t.placeholder&&(l.placeholder=t.placeholder),l.addEventListener("input",()=>{a=l.value,n(a)});let b=()=>{let k=l.scrollHeight-l.clientHeight>1;l.classList.toggle("is-clip-top",k&&l.scrollTop>1),l.classList.toggle("is-clip-bottom",k&&l.scrollTop+l.clientHeight<l.scrollHeight-1)};return i&&(l.addEventListener("scroll",b),l.addEventListener("input",b),typeof ResizeObserver=="function"&&new ResizeObserver(b).observe(l)),c.append(J("span","tw-row-label",t.label),l),{el:c,set:k=>{a=s(k),l.value=a,i&&b()},get:()=>a}}function lt(t){let n=S("div","tw-folder"),s=we("tw-folder-header");s.setAttribute("aria-expanded","true"),s.append(J("span","tw-folder-title",t.label)),s.insertAdjacentHTML("beforeend",ro);let a=S("div","tw-folder-body"),i=S("div","tw-controls");a.append(i),n.append(s,a);let c=l=>Pt(n,s,a,l);return s.addEventListener("click",()=>c(!n.classList.contains("is-collapsed"))),{el:n,body:i,setCollapsed:c}}function Ze(t,n){let s=ke(t.type);if(!s)return null;try{return s(t,n)}catch(a){return console.error("[tweaks] control failed to build:",t&&t.type,a),null}}ve("slider",_o);ve("checkbox",Ho);ve("radiogrid",No);ve("list",jo);ve("button",Do);ve("buttongroup",Fo);ve("separator",$o);ve("text",Ko);ve("folder",lt);var ct=(t,n,s)=>{let a=we("tw-toolbar-btn"+(t?" "+t:""),n);return a.title=s,a.setAttribute("aria-label",s),a},Ft=t=>{let n=ct("tw-toolbar-btn--swap",`<span class="tw-toolbar-btn__icons">${eo}${to}</span>`,"Copy values (\u21E7: changed only)");return n.addEventListener("click",async s=>{if(n.disabled)return;let[a,i]=t(s.shiftKey);if(!i)return Ee("Nothing has changed");if(!await gn(a))return Ee("Copy failed");Bo(n),Ee(i>0?`${i} changed value${i===1?"":"s"} copied`:"Values copied")}),n},$t=t=>{let n=ct("tw-toolbar-btn--reset",no,"Reset");return n.addEventListener("click",()=>{n.disabled||(fn(n),t())}),n},Bo=t=>{t.classList.add("is-copied"),clearTimeout(t._t),t._t=setTimeout(()=>t.classList.remove("is-copied"),1400)},fn=t=>{let n=t.querySelector("svg");t._spinSettle||(t._spinSettle=()=>{clearTimeout(t._t),t.classList.remove("is-spinning"),n.style.transition="none",n.style.setProperty("--tw-spin","0deg"),n.getBoundingClientRect(),n.style.transition=""},n.addEventListener("transitionend",a=>{a.propertyName==="transform"&&t.classList.contains("is-spinning")&&performance.now()-t._spinT>250&&t._spinSettle()})),t._spinT=performance.now(),n.style.setProperty("--tw-spin",`${(parseFloat(n.style.getPropertyValue("--tw-spin"))||0)-360}deg`),t.classList.add("is-spinning"),clearTimeout(t._t);let s=()=>{n.getAnimations&&n.getAnimations().length?t._t=setTimeout(s,250):t._spinSettle()};t._t=setTimeout(s,600)},Q=null,jt=0,Dt=null,lo=t=>{t.key==="Escape"&&(t.stopPropagation(),dt())},dt=t=>{t&&Dt&&!t.contains(Dt)||(clearTimeout(jt),document.removeEventListener("keydown",lo),Q&&Q.classList.remove("is-open"))};function qo(t,n){Q||(Q=S("div","tw-tip tw-portal"),Q.setAttribute("role","tooltip")),Q.isConnected||document.body.appendChild(Q),clearTimeout(jt),Q.textContent=n,$n(Q,t);let s=Q.classList.contains("is-open");Q.style.visibility="hidden",Q.classList.add("is-open"),Dn(t,Q,{align:"center",prefer:"above",gap:8}),Q.style.visibility="",document.addEventListener("keydown",lo),Dt=t,s||requestAnimationFrame(function a(){if(Q.classList.contains("is-open")){if(!Dt.isConnected)return dt();requestAnimationFrame(a)}})}function ao(){Q&&(clearTimeout(jt),jt=setTimeout(dt,80))}var mn=".tw-slider-label, .tw-row-label, .tw-select-label, .tw-trigger-label, .tw-radiogrid-label, .tw-field-label, .tw-folder-title, .tw-fps-label, .tw-plot-label, .tw-spring-label, .tw-bezier-label";function et(t,n){let s=t.querySelector(mn)||t;if(s===t&&t.classList.contains("tw-separator"))return;let a=s.closest("button"),i=a?S("span","tw-hint",pn):we("tw-hint",pn),c=()=>qo(i,n);if(a){i.setAttribute("aria-hidden","true");let l=a.getAttribute("aria-description");a.setAttribute("aria-description",l?`${l}. ${n}`:n)}else i.setAttribute("aria-label",n),i.addEventListener("focus",c),i.addEventListener("blur",ao),i.addEventListener("keydown",l=>{(l.key==="Enter"||l.key===" ")&&l.stopPropagation()});i.addEventListener("pointerenter",c),i.addEventListener("pointerleave",ao),i.addEventListener("pointerdown",l=>l.stopPropagation()),i.addEventListener("click",l=>{l.preventDefault(),l.stopPropagation()}),s.appendChild(i)}async function gn(t){try{return await navigator.clipboard.writeText(t),!0}catch{}let n=document.createElement("textarea");n.value=t,n.style.position="fixed",n.style.top="-9999px",document.body.appendChild(n),n.focus(),n.select();let s=!1;try{s=document.execCommand("copy")}catch{}return document.body.removeChild(n),s}var tt=null,Le=null,ut=null,Kt=null;function Yo(t,n,s={}){let a=Object.entries(n).filter(([e])=>e!=="_last"||(console.warn('[tweaks] "_last" is reserved (the changed-key channel) \u2014 schema entry skipped'),!1)).map(([e,o])=>Ie(e,o)).filter(Boolean),i={},c=[],l=new Set,b=new Set,k=new Set,x=[],L=!1,C=!1,y=[],ae=new Map,X=!1,H=-1,W=e=>{if(!L){if(X){console.warn("[tweaks] call ignored \u2014 the panel could not be built");return}C?e():y.push(e)}},T=null,g=function(e,o){return e==="_last"&&this===i?void 0:o===void 0?null:typeof o=="bigint"?String(o):o},_=!1,K=()=>{let e={};for(let o of c){let r=e;for(let d of o.path.slice(0,-1))r=r[d]||(r[d]={});r[o.key]=o.get()}return JSON.parse(JSON.stringify(e,g))},ne=()=>{try{return JSON.parse(JSON.stringify(i,g))}catch(e){return _||(_=!0,console.warn("[tweaks] a value parked on params can't be serialised \u2014 snapshots carry the controls' values only:",e)),K()}},F=s.persist?`tw:${s.persist===!0?t:s.persist}`:null,le=F?`${F}:presets`:null,oe=e=>{try{return JSON.parse(localStorage.getItem(e)||"null")}catch{return null}},ue=(e,o)=>{try{return localStorage.setItem(e,JSON.stringify(o)),!0}catch{return!1}},re=(e,o)=>o.reduce((r,d)=>r!=null&&Pe(r,d)?r[d]:void 0,e),G=(e,o)=>{let r=re(e,o.path.slice(0,-1));return!r||typeof r!="object"||!Pe(r,o.key)?!1:(Reflect.deleteProperty(r,o.key),!0)},Re=e=>{for(let o of c)o.persist||G(e,o);return e},pe=F?(()=>{let e=0,o=!1,r=new Map,d=()=>{e=0;let v=Re(ne()),M=c.filter(u=>u.persist&&u.m.type==="image").filter(u=>!(r.get(u)===u.get()&&G(v,u)));if(ue(F,v))return;let h=[];for(let u of M.filter(E=>E.get()).sort((E,R)=>String(R.get()).length-String(E.get()).length))if(G(v,u)&&(h.push(u),r.set(u,u.get()),!!ue(F,v))){for(let E of h)E.note?.("Too big to save");o||(o=!0,console.warn("[tweaks] persist: the values didn't fit in storage with an image included \u2014 saved without it"));return}};return x.push(()=>{e&&(clearTimeout(e),d())}),()=>{clearTimeout(e),e=setTimeout(d,150)}})():()=>{},fe=(e,o=i._last)=>{(e?k:b).forEach(r=>{try{r(i,o)}catch(d){console.error("[tweaks] listener threw:",d)}}),L||pe()},qe=e=>typeof e=="function"||typeof e=="symbol"||typeof e=="bigint",Ce=(e,o)=>{if(qe(o))throw new TypeError(`a ${typeof o} is not a control value`);e.set(o),e.target[e.key]=e.get()},je=e=>{It(e,e.raw,e.def),e.target[e.key]=e.get()},nt=!1,pt=()=>{if(typeof s.onReset=="function"&&!nt){nt=!0;try{return s.onReset()}finally{nt=!1}}for(let e of c)try{je(e)}catch(o){console.error(`[tweaks] resetting "${e.path.join(".")}" failed \u2014 control skipped:`,o)}i._last=void 0,fe()},m=S("div","tw-panel");m.dataset.mode="inline";let De=e=>m.setAttribute("aria-label",e.trim()||"Tweaks");m.setAttribute("role","region"),De(t),Rn(m);let D=S("div","tw-header"),ce=we("tw-header-toggle");ce.setAttribute("aria-expanded","true");let Ye=t,ft=J("span","tw-title",Ye);ce.append(ft);let Xe=S("div","tw-toolbar"),mt=()=>{let e={};for(let o of c)Oe(o.get(),o.def)&&(e[o.path.join(".")]=o.get());return JSON.parse(JSON.stringify(e,g))},Ve=Ft(e=>{if(!e)return[JSON.stringify(ne(),null,2),-1];let o=mt();return[JSON.stringify(o,null,2),Object.keys(o).length]}),te={panel:m,entries:c,fromJSON:e=>{_e?.flush(),Ke.fromJSON(e),_e?.flush()},announce:Ee,alive:()=>!L},se=$t(pt),z=null;F&&s.presets!==!1&&(z=ct("",so,"Presets"),z.setAttribute("aria-haspopup","menu"),z.setAttribute("aria-expanded","false"),Xe.append(z));let de=!!s.filter&&(s.toolbar!==!1||(console.warn("[tweaks] opts.filter needs the toolbar (its search button lives there) \u2014 ignored alongside toolbar:false"),!1)),Se=de?ct("",oo,"Filter controls"):null,U=de?S("input","tw-search"):null;de&&(U.type="text",U.placeholder="Filter\u2026",U.spellcheck=!1,U.setAttribute("aria-label","Filter controls"),Ue(U),Xe.append(Se)),Xe.append(Ve,se),D.append(ce),de&&D.append(U),s.toolbar!==!1&&D.append(Xe);let Fe=[Ve,se,z,Se].filter(Boolean);for(let e of Fe)e.disabled=!0;let he=!1,me=!1;D.addEventListener("click",e=>{me&&(me=!1,e.preventDefault(),e.stopPropagation())},!0);let Bt=()=>{m.dataset.mode==="floating"&&m.isConnected&&(rt(),ge())},$e=()=>Pt(m,ce,We,!m.classList.contains("is-collapsed"),Bt);ce.addEventListener("click",$e);let ot=!1;D.addEventListener("pointerdown",e=>{ot=e.target===D||ce.contains(e.target)},!0),D.addEventListener("click",e=>{e.target===D&&ot&&!e.defaultPrevented&&!m.classList.contains("is-searching")&&$e()});let We=S("div","tw-body"),p=S("div","tw-controls");We.append(p),m.append(D,We);let O=on(s.theme);rn(m,O),m._twTheme=O;let $=s.draggable!==!1,N=8,I=28,Z=typeof s.floating=="object"&&s.floating?s.floating:null,ie=Z?.corner||"top-left",Me=/right$/.test(ie),xe=/^bottom/.test(ie);(Me||xe)&&(m.dataset.corner=ie);let gt=()=>document.compatMode==="CSS1Compat"?document.documentElement:null,yn=()=>gt()?.clientWidth||window.innerWidth,yt=()=>gt()?.clientHeight||window.innerHeight,ht=()=>({maxX:Math.max(N,yn()-m.offsetWidth-N),maxY:Math.max(N,yt()-m.scrollHeight-1-Je)}),ze=F?`${F}:pos`:null,bt=$&&ze?oe(ze):null,qt=bt&&typeof bt=="object"&&(bt.corner||"top-left")===ie?bt:null,hn=qt||Z||{x:16,y:16},Yt=e=>{let o=parseFloat(e);return o>=0?o:16},Xt=Yt(hn.x),Vt=Yt(hn.y),V=Xt,B=Vt,Wt=!!qt,Je=N,zt=()=>{let e=parseFloat(getComputedStyle(m).getPropertyValue("--tw-float-gap"));Je=e>=0?e:s.floating&&!Wt?Yt(Z?.y):N},ge=()=>{let e=m.style;e.setProperty("--tw-float-x",V+"px"),e.setProperty("--tw-float-y",B+"px"),e.setProperty("--tw-float-max-h",`calc(100dvh - ${B+Je}px)`)},rt=()=>{zt();let{maxX:e,maxY:o}=ht();if($){V=j(V,N,e),B=j(B,N,o);return}V=j(Xt,Math.min(N,Xt),e);let r=yt()-Math.min(m.scrollHeight+1,yt()/2),d=Math.min(1,r/(Vt+Je||1));B=Math.round(Vt*d),Je=Math.round(Je*d)};($||s.floating)&&(s.floating||qt)&&(m.dataset.mode="floating",rt(),ge(),requestAnimationFrame(()=>{!L&&m.dataset.mode==="floating"&&m.isConnected&&(rt(),ge())}));let wt=e=>{je(e),i._last=e.key,fe()},mo=(e,o)=>{let r=e.querySelector(".tw-slider-value")||e.querySelector(mn)||e;r.classList.add("tw-resettable"),r.title="Double-click or hold to reset";let d=0,v=0,f=0,M=!1,h=()=>{d&&(clearTimeout(d),d=0,r.classList.remove("tw-reset-holding"))};r.addEventListener("pointerdown",u=>{u.stopPropagation(),M=!1,!(u.pointerType!=="touch"&&u.pointerType!=="pen")&&(v=u.clientX,f=u.clientY,r.classList.add("tw-reset-holding"),d=setTimeout(()=>{d=0,r.classList.remove("tw-reset-holding","is-editable"),M=!0,wt(o)},500))}),r.addEventListener("pointermove",u=>{d&&Math.abs(u.clientX-v)+Math.abs(u.clientY-f)>8&&h()}),r.addEventListener("pointerup",h),r.addEventListener("pointercancel",h),r.addEventListener("pointerleave",h),r.addEventListener("contextmenu",u=>{M&&u.preventDefault()}),r.addEventListener("click",u=>{M&&(u.preventDefault(),u.stopImmediatePropagation(),M=!1)},!0),r.addEventListener("dblclick",u=>{r===e&&u.target.closest&&u.target.closest("input, textarea")||(u.preventDefault(),u.stopPropagation(),wt(o))}),r.classList.contains("tw-slider-value")&&e.addEventListener("dblclick",u=>{let E=u.target;!E.classList||!E.classList.contains("tw-slider-input")||(u.preventDefault(),u.stopPropagation(),E.blur(),wt(o))}),e.addEventListener("keydown",u=>{!u.altKey||u.metaKey||u.ctrlKey||u.key!=="Backspace"&&u.key!=="Delete"||(u.preventDefault(),u.stopPropagation(),u.target.classList&&u.target.classList.contains("tw-slider-input")&&u.target.blur(),wt(o))})},Jt=[],Gt,go=(e,o)=>!e._hid==!o?!1:(e._hid=o,Gt?Gt(e,o):e.classList.toggle("tw-cond-hidden",o),!o),Ut=(e,o)=>{o.hint&&et(e,o.hint),(o.render||o.disabled!=null)&&Jt.push({node:e,m:o})},Qt=[],Zt=[],vt=[],kt=[],yo=e=>{typeof e.destroy=="function"&&x.push(e.destroy)},en=(e,o,r,d=[],v=null)=>{for(let f of o){if(f.type==="tabs"){let u={};l.add(u),r[f.key]=u;let E=ke("tabs"),R=E&&E(f);if(!R)continue;kt.push({path:[...d,f.key],ctrl:R,pageKeys:f.pages.map(q=>q.key)}),f.pages.forEach((q,w)=>{let A={};l.add(A),u[q.key]=A,en(R.bodies[w],q.children,A,[...d,f.key,q.key])}),Ut(R.el,f),e.append(R.el);continue}if(f.type==="folder"){let u={};l.add(u),r[f.key]=u;let E=lt(f);vt.push({path:[...d,f.key],el:E.el,setCollapsed:E.setCollapsed}),st.set(E.el,{kind:"folder",path:[...d,f.key],label:f.label});let R=de?{el:E.el,label:f.label,body:E.body}:null;R&&Zt.push(R),en(E.body,f.children,u,[...d,f.key],R),Ut(E.el,f),e.append(E.el);continue}let M=!Rt.has(f.type),h=Ze(f,M?u=>{Oe(r[f.key],u)&&(r[f.key]=u,i._last=f.key,fe())}:()=>{});if(h){if(yo(h),M){let u=h.get();Pe(r,f.key)&&h.set(r[f.key]),r[f.key]=h.get();let E={target:r,key:f.key,set:h.set,get:h.get,raw:f.value,def:u,path:[...d,f.key],persist:f.persist!==!1,m:f,el:h.el,note:h.note};c.push(E),mo(h.el,E),st.set(h.el,{kind:"row",entry:E,label:f.label})}Ut(h.el,f),de&&f.type!=="separator"&&Qt.push({el:h.el,label:f.label,folder:v}),e.append(h.el)}}};if(de){let e=r=>{let d=r.trim().toLowerCase(),v=!1,f=(M,h)=>{!h&&M.classList.contains("tw-filter-hidden")&&(v=!0),M.classList.toggle("tw-filter-hidden",h)};if(!d)Qt.forEach(M=>f(M.el,!1)),Zt.forEach(M=>f(M.el,!1));else{for(let M of Qt){let h=M.folder&&Tt(M.folder.label,d);f(M.el,!(Tt(M.label,d)||h))}for(let M of Zt.slice().reverse()){let h=[...M.body.children].some(u=>!u.classList.contains("tw-filter-hidden"));f(M.el,!(Tt(M.label,d)||h))}}v&&nn()},o=()=>{m.classList.remove("is-searching"),U.value="",e("")};Se.addEventListener("click",()=>{Se.disabled||(m.classList.toggle("is-searching")?(U.focus(),U.select()):o())}),U.addEventListener("input",()=>e(U.value)),U.addEventListener("keydown",r=>{r.key==="Escape"&&(r.preventDefault(),r.stopPropagation(),o(),Se.focus())})}let ho=new Set(a.map(e=>e.key)),Et=(e,o)=>{if(!(!e||typeof e!="object")){for(let r of c){let d=re(e,r.path);if(d!==void 0)try{Ce(r,d)}catch(v){console.error(`[tweaks] restoring "${r.path.join(".")}" failed \u2014 value skipped:`,v)}}for(let r of Object.keys(e))if(!ho.has(r)&&r!=="_last"&&Pe(i,r)&&!Nt(r)&&!qe(e[r]))try{i[r]=e[r]}catch(d){console.error(`[tweaks] restoring "${r}" failed \u2014 value skipped:`,d)}i._last=void 0,fe(o)}},Ge=()=>{let e=le?oe(le):null;return Object.assign(Object.create(null),e&&typeof e=="object"?e:{})},bn=e=>{let o=Ge();o[e]=ne();let r=ue(le,o);return r||console.warn(`[tweaks] preset "${e}" didn't fit in storage \u2014 not saved`),r},wn=e=>{let o=Ge();o[e]&&Et(o[e])},vn=e=>{let o=Ge();delete o[e],ue(le,o)},Lt=e=>e.map(o=>String(o).replace(/~/g,"~1").replace(/\./g,"~0")).join("."),bo=()=>{let e={};if(vt.length){let o={};for(let r of vt)o[Lt(r.path)]=r.el.classList.contains("is-collapsed");e.folders=o}if(kt.length){let o={};for(let r of kt)o[Lt(r.path)]=r.pageKeys[r.ctrl.active()]??null;e.tabs=o}return e},wo=e=>{if(!(!e||typeof e!="object")){if(e.folders)for(let o of vt){let r=e.folders[Lt(o.path)];typeof r=="boolean"&&o.setCollapsed(r)}if(e.tabs)for(let o of kt){let r=o.pageKeys.indexOf(e.tabs[Lt(o.path)]);r>=0&&r!==o.ctrl.active()&&o.ctrl.activate(r)}}};if($||s.floating){$&&(m.dataset.draggable="true");let e=()=>{if(m.dataset.mode==="floating")return;let w=m.getBoundingClientRect();if(V=Me?yn()-w.right:w.left,B=xe?yt()-w.bottom:w.top,m.parentNode&&(T=S("span","tw-lift-slot"),T.style.width=w.width+"px",T.style.height=w.height+"px",T.setAttribute("aria-hidden","true"),m.before(T)),Fn(m,m),document.body.appendChild(m),m.dataset.mode="floating",ge(),T&&typeof MutationObserver=="function"){let A=new MutationObserver(()=>{T&&!T.isConnected&&(A.disconnect(),T=null,m.remove())});A.observe(document.documentElement,{childList:!0,subtree:!0}),x.push(()=>A.disconnect())}},o=()=>{tt&&tt!==m&&tt.classList.remove("is-raised"),m.classList.add("is-raised"),tt=m},r=null,d=0,v=0,f=0,M=0,h=0,u=w=>{for(let[A,Y]of[["pointermove",R],["pointerup",q],["pointercancel",q]])w?document.addEventListener(A,Y,!0):document.removeEventListener(A,Y,!0);w?document.addEventListener("keydown",E,!0):document.removeEventListener("keydown",E,!0)},E=w=>{if(w.key!=="Escape"||r===null)return;w.preventDefault(),w.stopPropagation();let A=r;r=null,u(!1);try{D.releasePointerCapture(A)}catch{}he&&(V=f,B=M,ge()),m.classList.remove("is-dragging"),me=!0,document.addEventListener("pointerup",()=>setTimeout(()=>{me=!1},0),{capture:!0,once:!0})};$&&D.addEventListener("pointerdown",w=>{if(!(w.button!==0||r!==null||w.target.closest(".tw-toolbar, input, textarea, select"))&&(r=w.pointerId,d=w.clientX,v=w.clientY,he=!1,u(!0),m.classList.contains("is-snapping"))){clearTimeout(h);let A=getComputedStyle(m);V=parseFloat(A[Me?"right":"left"])||V,B=parseFloat(A[xe?"bottom":"top"])||B,m.classList.remove("is-snapping"),ge()}}),$&&D.addEventListener("keydown",w=>{if(w.target!==ce||!w.altKey||w.metaKey||w.ctrlKey)return;let A=w.shiftKey?50:10,Y=w.key==="ArrowRight"?A:w.key==="ArrowLeft"?-A:0,P=w.key==="ArrowDown"?A:w.key==="ArrowUp"?-A:0;if(!Y&&!P)return;w.preventDefault(),w.stopPropagation();let ee=m.dataset.mode!=="floating";Wt=!0,e(),o(),zt(),ee&&ce.focus({preventScroll:!0});let{maxX:Ct,maxY:He}=ht();V=j(V+(Me?-Y:Y),N,Ct),B=j(B+(xe?-P:P),N,He),ge(),ze&&ue(ze,{x:V,y:B,corner:ie})});let R=w=>{if(w.pointerId!==r)return;if(w.buttons===0){q(w);return}let A=w.clientX-d,Y=w.clientY-v;if(!he){if(Math.hypot(A,Y)<(w.pointerType==="mouse"?6:10))return;he=!0,Wt=!0,e(),o(),zt(),f=V,M=B;try{D.setPointerCapture(r)}catch{}m.classList.add("is-dragging")}let{maxX:P,maxY:ee}=ht();V=j(f+(Me?-A:A),N,P),B=j(M+(xe?-Y:Y),N,ee),ge()},q=w=>{if(w.pointerId===r){try{D.releasePointerCapture(r)}catch{}if(r=null,u(!1),me=he,me&&setTimeout(()=>{me=!1},0),he){let{maxX:A,maxY:Y}=ht();V<=N+I?V=N:V>=A-I&&(V=A),B<=N+I?B=N:B>=Y-I&&(B=Y),clearTimeout(h),m.classList.add("is-snapping"),h=setTimeout(()=>m.classList.remove("is-snapping"),340),ge(),ze&&ue(ze,{x:V,y:B,corner:ie})}m.classList.remove("is-dragging")}};D.addEventListener("lostpointercapture",q),x.push(()=>u(!1))}let vo=()=>{($||s.floating)&&(m.dataset.mode==="floating"&&(rt(),ge()),x.push(at(m,[[window,"resize"]],()=>{m.dataset.mode==="floating"&&(rt(),ge())})))};if(z){let e=S("div","tw-presets-menu"),o=S("div","tw-presets-save"),r=S("input","tw-presets-input");r.type="text",r.placeholder="Preset name\u2026",r.spellcheck=!1,r.setAttribute("aria-label","New preset name"),Ue(r);let d=J("button","tw-presets-savebtn","Save");o.append(r,d);let v=S("div","tw-presets-list");e.append(o,v);let f=()=>{let u=Ge(),E=Object.keys(u);if(v.replaceChildren(),!E.length)return v.append(J("div","tw-presets-empty","No presets yet"));for(let R of E){let q=S("div","tw-presets-row"),w=J("button","tw-presets-load",R);w.addEventListener("click",()=>{wn(R),h.close(),Ee(`Loaded preset ${R}`)});let A=we("tw-presets-del",io);A.setAttribute("aria-label",`Delete preset ${R}`),A.addEventListener("click",Y=>{Y.stopPropagation(),vn(R),f()}),q.append(w,A),v.append(q)}},M=()=>{let u=r.value.trim();if(!u){r.focus();return}if(!bn(u)){Ee(`Preset ${u} not saved: storage is full`);return}r.value="",f(),Ee(`Saved preset ${u}`)},h=xt(z,z,e,{width:208,fallbackH:160,gap:6,align:"end",onOpen:()=>{f(),r.focus()}});d.addEventListener("click",M),r.addEventListener("keydown",u=>{u.key==="Enter"&&M()})}if(s.onEditStart||s.onEditEnd){let e=".tw-slider, .tw-num-grab, .tw-pad, .tw-wg-area, .tw-wg-hue, .tw-wg-alpha, .tw-bezier-handle, .tw-gradient-bar, .tw-gradient-stop",o=!1,r=()=>{document.removeEventListener("pointerup",r,!0),document.removeEventListener("pointercancel",r,!0),o&&(o=!1,s.onEditEnd&&s.onEditEnd())},d=v=>{o||!v.target.closest(e)||(o=!0,s.onEditStart&&s.onEditStart(),document.addEventListener("pointerup",r,!0),document.addEventListener("pointercancel",r,!0))};m.addEventListener("pointerdown",d),m._twEditPointer=d,x.push(r)}let _e=s.undo?(()=>{let o=[],r=0,d=!1,v=0,f=(P,ee)=>{if(P===ee)return!0;if(!P||!ee||typeof P!="object"||typeof ee!="object"||Array.isArray(P)!=Array.isArray(ee))return!1;let Ct=Object.keys(P).length==Object.keys(ee).length;for(let He in P)P[He]===ee[He]?P[He]=ee[He]:f(P[He],ee[He])||(Ct=!1);return Ct},M=()=>{v=0;let P=ne();f(P,o[r])||(o=o.slice(0,r+1),o.push(P),o.length>200&&(o=o.slice(o.length-200)),r=o.length-1)},h=()=>{d||(clearTimeout(v),v=setTimeout(M,350))},u=()=>{v&&(clearTimeout(v),M())};b.add(h),k.add(h);let E=P=>{d=!0,Et(o[P]),d=!1,r=P},R=()=>{u(),r>0&&E(r-1)},q=()=>{u(),r<o.length-1&&E(r+1)},w=()=>m.matches(":hover")||m.contains(document.activeElement),A=P=>!!(P&&P.matches&&(P.matches("input, textarea")||P.isContentEditable));return{undo:R,redo:q,onKey:P=>{if(!w()||!(P.metaKey||P.ctrlKey)||A(P.target))return;let ee=P.key.toLowerCase();ee==="z"?(P.preventDefault(),P.shiftKey?q():R()):ee==="y"&&(P.preventDefault(),q())},flush:u,arm:()=>{o=[ne()],r=0}}})():null,st=new Map,ko=e=>{for(;e&&e!==m&&m.contains(e);e=e.parentElement){let o=st.get(e);if(o)return o}},Eo=e=>{for(;e&&e!==m;e=e.parentElement)if(st.get(e)?.kind==="row")return e},tn=e=>!!(e.closest(".tw-filter-hidden, .tw-cond-hidden, .tw-tabs-page:not([data-active=true])")||e.parentElement?.closest(".is-collapsed")),ye,kn=e=>{let o=e.target;!m.contains(o)&&!o.closest?.(".tw-portal")&&Te()},Te=()=>{ye&&(ye[0].classList.remove("is-picked"),ye=void 0,document.removeEventListener("pointerdown",kn,!0),Le?.[0]===m&&(Le=null))},Lo=(e,o)=>{Le&&Le[0]!==m&&Le[1](),Te(),ye=[e,o],Le=[m,Te],e.classList.add("is-picked"),document.addEventListener("pointerdown",kn,!0);let r=[...e.querySelectorAll('button:not(:disabled):not([tabindex="-1"]), [tabindex="0"]')].find(d=>!d.closest(".tw-hint, .tw-portal, [inert]"));r?r.focus({preventScroll:!0,focusVisible:!1}):document.activeElement?.blur?.(),document.getSelection?.()?.removeAllRanges()};x.push(Te),m.addEventListener("pointerdown",e=>{let o=e.target;if(Eo(o)||o.closest(".tw-header, .tw-folder-header, button, input, textarea, select")){ye?.[0].contains(o)||Te();return}if(e.button!==0||e.pointerType==="touch")return Te();let r;for(let[d,v]of st){let f=(v.kind==="folder"?d.firstElementChild:d).getBoundingClientRect();f.height&&e.clientY>=f.top&&e.clientY<f.bottom&&!tn(d)&&(r=[d,v])}if(!r)return Te();e.preventDefault(),Lo(...r)},!0);let En=e=>!!(e&&e.matches&&(e.matches("input, textarea, select")||e.isContentEditable)),Co=e=>{if(e.key==="Escape"){ye&&(e.stopPropagation(),Te());return}if(!(e.metaKey||e.ctrlKey)||e.altKey||e.repeat||En(e.target))return;let o=e.key.toLowerCase();if(o!=="c"&&o!=="v")return;Le&&!Le[0].isConnected&&Le[1](),ye&&tn(ye[0])&&Te();let r=document.activeElement,d=ye?ye[1]:Le||!r||tn(r)?void 0:ko(r);if(!d||o==="c"&&String(document.getSelection?.()||""))return;let v=o==="c"?JSON.stringify(d.kind==="row"?d.entry.get():re(ne(),d.path),g,2):"",f=w=>{L||Ee(w?`${d.label} copied`:"Copy failed")},M=ye?.[0],h=document.activeElement,u=!!h?.matches(":focus-visible");if(!ut){ut=S("textarea","tw-sr"),ut.tabIndex=-1,ut.setAttribute("aria-hidden","true");for(let w of["copy","paste"])document.addEventListener(w,A=>Kt?.(A),!0)}let E=ut,R=()=>{Kt=null,document.activeElement===E&&(E.blur(),h?.focus?.({preventScroll:!0,focusVisible:u}))},q=Kt=w=>{if(w.target!==E&&En(w.target))return;if(w.preventDefault(),R(),v)return w.clipboardData?.setData("text/plain",v),f(!!w.clipboardData);let A=w.clipboardData?.getData("text/plain")??null;import("./clip-ECGCECEC.js").then(Y=>Y.pasteInto(A,P=>Y.pasteScope(te,d,P),te,M),()=>{})};E.isConnected||document.body.appendChild(E),E.value=v,E.focus({preventScroll:!0}),E.select(),setTimeout(()=>{Kt===q&&(R(),v&&gn(v).then(f))},1e3)},Ln=()=>{if(!L){if(H=x.length,en(p,a,i),Jt.length){let e=new Map;for(let d of c)e.has(d.key)||e.set(d.key,d);let o=d=>{let v=e.get(d);return v?v.target[v.key]:i[d]},r=()=>{let d=!1;for(let{node:v,m:f}of Jt)try{if(f.render&&go(v,!f.render(o))&&(d=!0),f.disabled!=null){let M=typeof f.disabled=="function"?f.disabled(o):f.disabled;At(v,!!M)}}catch{}d&&nn()};b.add(r),k.add(r),r(),import("./fold-UGN7TXGX.js").then(d=>{Gt=d.fold},()=>{})}if(F&&Et(Re(oe(F))),!L){_e?.arm(),vo(),x.push(at(m,[[document,"keydown"]],e=>{_e?.onKey(e),Co(e)})),C=!0;for(let e of y.splice(0)){if(L)break;try{e()}catch(o){console.error("[tweaks] a call queued before ready failed:",o)}}ae.clear();for(let e of Fe)e.disabled=!1}}},Cn=(e,o)=>{if(String(e).split(".").some(Nt))return console.warn(`[tweaks] set("${e}") ignored \u2014 reserved key`),!1;let r=String(e).split("."),d;if(r.length>1){let h=i;for(let u=0;u<r.length-1&&h;u++)h=h[r[u]],l.has(h)||(h=null);if(d=h&&c.find(u=>u.target===h&&u.key===r[r.length-1]),!d)return console.warn(`[tweaks] set("${e}") \u2014 no control at that path`),!1}else{let h=c.filter(E=>E.key===e),u=h.find(E=>E.target===i);if(!u&&h.length>1)return console.warn(`[tweaks] set("${e}") is ambiguous \u2014 ${h.length} controls share that key; use a dotted path (e.g. "${h[0].path.join(".")}")`),!1;d=u||h[0]}let v=d?d.target:i,f=d?d.key:e,M=v[f];if(d&&qe(o))return console.warn(`[tweaks] set("${e}") ignored \u2014 a ${typeof o} is not a control value`),!1;if(d)try{Ce(d,o)}catch(h){return console.error(`[tweaks] set("${e}") failed \u2014 value skipped:`,h),!1}else{if(l.has(i[e]))return console.warn(`[tweaks] set("${e}") ignored \u2014 it's a folder/tabs group; set its children instead`),!1;i[e]=o}return Oe(M,v[f])?(i._last=f,!0):!1},Ke={el:m,params:i,on(e){return L?()=>{}:(b.add(e),()=>b.delete(e))},set(e,o,r){let d=String(e),v=r?.silent;W(()=>{Cn(d,o)&&fe(v)})},setMany(e,o){if(e==null||typeof e!="object")return;let r=Object.entries(e),d=o?.silent;W(()=>{let v=!1;for(let[f,M]of r)try{Cn(f,M)&&(v=!0)}catch(h){console.error(`[tweaks] setMany("${f}") failed \u2014 key skipped:`,h)}v&&fe(d)})},reset(){C&&!L&&fn(se),W(pt)},toJSON(){return L?{values:{},ui:{}}:{values:ne(),ui:bo()}},changes(){return L?{}:mt()},fromJSON(e,o){if(!e||typeof e!="object")return;let r=o?.silent,d=e.values&&typeof e.values=="object"?{...e.values}:e.values,v=e.ui&&typeof e.ui=="object"?{...e.ui}:e.ui;W(()=>{d&&Et(d,r),wo(v)})},setName(e){L||(Ye=String(e),ft.textContent=Ye,De(Ye))},setTheme(e){if(!L){if(O)for(let o in O)m.style.removeProperty(o);O=on(e),m._twTheme=O,rn(m,O),window.dispatchEvent(new Event("tw-retheme"))}},savePreset:e=>{if(L||X||!le||!e)return!1;C||ae.set(String(e),"save");let o=!0;return W(()=>{o=bn(e)}),o},loadPreset:e=>{let o=ae.get(String(e));return L||X||o==="delete"||!(o==="save"||Ge()[e])?!1:(W(()=>wn(e)),!0)},deletePreset:e=>{le&&(C||ae.set(String(e),"delete"),W(()=>vn(e)))},presets:()=>L?[]:Object.keys(Ge()),undo:()=>{_e&&W(_e.undo)},redo:()=>{_e&&W(_e.redo)},destroy(){if(!L){L=!0,Kn(m),dt(m);for(let e of x.splice(0))try{e()}catch{}b.clear(),T&&(T.remove(),T=null),tt===m&&(tt=null),m.dataset.twDestroyed="",m.remove()}}},Sn=Qe(a);if(Sn){let e=o=>{if(X=!0,y.length=0,H>=0)for(let r of x.splice(H))try{r()}catch{}for(let r of p.children)r.dataset.twDestroyed="";throw b.clear(),c.length=0,p.replaceChildren(),L||console.warn(`[tweaks] "${t}": the panel could not be built \u2014 ${H>=0?"the build threw":"its lazy controls failed to load"}; the API is inert`),o};Ke.ready=m.ready=Sn.then(Ln).then(()=>Ke,e),Ke.ready.catch(()=>{})}else Ln(),Ke.ready=m.ready=Promise.resolve(Ke);return Ke}var co={metaFor:Ie,restoreDefault:It,hasOwn:Pe,valueChanged:Oe,SPRING_KEYS:Ht,ensureForMetas:Qe,LAZY_IMPORT:Be,createFolder:lt,createControl:Ze,makeCopyBtn:Ft,makeResetBtn:$t,addHintMarker:et};function uo(t=document){let n=ln();return n?n?n(t,co):Promise.resolve():import("./markup-ZJJ6CCWM.js").then(()=>ln()(t,co),s=>console.error("[tweaks] markup chunk failed to load:",s))}if(typeof document<"u"){let t=()=>{document.querySelector('[data-tw], .tw-panel[data-mode="inline"] > .tw-controls')&&uo(document)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t()}var po=t=>S("div",`${t} tw-standalone tw-portal`),fo=(t,n,s)=>{let a=Qe(t);if(!a)return n(),Promise.resolve(s);let i=a.then(n).then(()=>s);return i.catch(()=>{}),i};function Xo(t,n,s={}){let a=s.key??"value",i=Ie(a,n);if(!i||i.type==="folder"||i.type==="tabs")throw new TypeError(`[tweaks] mountControl: "${a}" is not a single-control schema value`);s.label!=null&&(i.label=String(s.label));let c=!Rt.has(i.type),l=po("tw-control");t.append(l);let b=null,k=!1,x=i.value,L,C=!1,y=H=>{Oe(x,H)&&(x=H,s.onChange&&s.onChange(H,a))},ae=()=>{if(k||(b=Ze(i,c?y:()=>{}),!b))return;i.hint&&et(b.el,i.hint);let H=()=>{};try{i.render&&!i.render(H)&&b.el.classList.add("tw-cond-hidden")}catch{}try{(typeof i.disabled=="function"?i.disabled(H):i.disabled)&&At(b.el,!0)}catch{}l.append(b.el),c&&(x=b.get(),C&&(b.set(L),y(b.get())))},X={el:l,set:H=>{k||!c||(b?(b.set(H),y(b.get())):(L=H,C=!0))},get:()=>c?b?b.get():C?L:i.value:void 0,destroy:()=>{k=!0,b&&typeof b.destroy=="function"&&b.destroy(),l.dataset.twDestroyed="",l.remove()},ready:null};return X.ready=fo([i],ae,X),X}function Vo(t={}){let n=po("tw-color-picker"),s=null,a=!1,i=t.value,c,l=!1,b=null,k=C=>{Oe(i,C)&&(i=C,t.onChange&&t.onChange(C))},x=()=>{if(a)return;let C=ke("colorpicker");C&&(s=C({value:t.value,mode:t.mode},k),i=s.get(),n.append(s.el),b&&s.setMode(b),l&&(s.set(c),k(s.get())),Mt(s.reflow))},L={el:n,set:C=>{a||(s?(s.set(C),k(s.get())):(c=C,l=!0))},get:()=>s?s.get():l?c:t.value,mode:()=>s?s.mode():b||t.mode||"oklch",setMode:C=>{s?s.setMode(C):b=C},reflow:()=>{s&&s.reflow()},destroy:()=>{a=!0,n.remove()},ready:null};return L.ready=fo([{type:"color"}],x,L),L}export{Vo as createColorPicker,uo as enhance,Mo as gradientCss,So as gradientStops,Xo as mountControl,Yo as tweaks};
@@ -0,0 +1 @@
1
+ import{i as F}from"./chunk-4ATI34PB.js";import{$ as nt,K as X,W as Y,X as tt,Z as et,r as J,u as c,v as H,w as q}from"./chunk-7OSCMZ2J.js";var ct=t=>String(t).replace(/[\\"]/g,"\\$&").replace(/[\x00-\x1f\x7f]/g,s=>"\\"+s.charCodeAt(0).toString(16)+" "),z=t=>`url("${ct(t)}")`,N=1<<20,at=t=>t>=N?`${Math.round(t/N*10)/10} MB`:t>=1024?`${Math.round(t/1024)} KB`:`${t} B`,rt=t=>{if(/^data:/i.test(t))return"";let s=t.split(/[?#]/)[0].split("/").pop().replace(/\.\w+$/,"");try{return decodeURIComponent(s)}catch{return s}},gt=/^image\/(gif|svg\+xml)$/i,it=1.5*N,ut=(t,s,n)=>{let o=t.getImageData(0,0,s,n).data;for(let r=3;r<o.length;r+=4)if(o[r]<255)return!0;return!1},ot=(t,s,n)=>new Promise(o=>t.toBlob(r=>o(r&&r.type===s?r:null),s,n)),dt=t=>new Promise((s,n)=>{let o=new FileReader;o.onload=()=>s(String(o.result)),o.onerror=n,o.readAsDataURL(t)}),pt=async(t,s,n)=>{if(!s||gt.test(t.type)||typeof Image>"u"||typeof URL.createObjectURL!="function")return"";let o="";try{o=URL.createObjectURL(t);let r=new Image;r.src=o,await r.decode();let E=r.naturalWidth,y=r.naturalHeight,k=Math.min(1,s/Math.max(E,y));if(!(E>0&&y>0)||k===1&&t.size<=it)return"";let v=document.createElement("canvas"),U=v.width=Math.max(1,Math.round(E*k)),p=v.height=Math.max(1,Math.round(y*k)),h=v.getContext("2d");if(!h)return"";h.imageSmoothingQuality="high",h.drawImage(r,0,0,U,p);let x=/^image\/jpe?g$/i.test(t.type),m=x?null:await ot(v,"image/png");if(!m||m.size>it){let R=await ot(v,!x&&ut(h,U,p)?"image/webp":"image/jpeg",n);R&&(!m||R.size<m.size)&&(m=R)}return m&&m.size<t.size?await dt(m):""}catch{return""}finally{o&&URL.revokeObjectURL(o)}},mt=et('<path d="M12 15V4m-4.5 4.5L12 4l4.5 4.5M4 15v3a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-3"/>');function ft(t,s){let n=typeof t.value=="string"?t.value:"",o=new Set,r=(Array.isArray(t.options)?t.options:[]).map(e=>({value:J(e),label:e&&typeof e=="object"&&e.label!=null?String(e.label):""})).filter(e=>typeof e.value=="string"&&!!e.value&&!o.has(e.value)&&!!o.add(e.value)),E=t.upload!==!1||!r.length,y=t.clear!==!1,k=+t.maxSize>0?+t.maxSize:10*N,v=t.fit===!1||t.fit===0?0:typeof t.fit=="number"&&t.fit>=1?Math.round(t.fit):2560,U=typeof t.quality=="number"&&t.quality>0&&t.quality<=1?t.quality:.85,p=c("input","tw-image-input");p.type="file",p.accept="image/*";let h=c("span","tw-image-note"),x=c("span","tw-image-live");x.setAttribute("role","status");let m=[h,x],R,$=e=>{for(let i of m)i.textContent=e;clearTimeout(R),R=setTimeout(()=>{for(let i of m)i.textContent=""},2600)},K=e=>(/^blob:/i.test(e)?"":rt(e))||(/^(data|blob):/i.test(e)?"Uploaded image":"Custom image"),B,D=0,M=(e,i=!0)=>{D++,n=e,B(),i&&s(n)},G=e=>{if(!e)return;if(!e.type.startsWith("image/"))return $("Not an image");if(e.size>k)return $(`${at(e.size)}, max ${at(k)}`);let i=++D;pt(e,v,U).then(f=>{if(D!==i)return;if(f)return M(f);let g=new FileReader;g.onload=()=>{D===i&&M(String(g.result))},g.onerror=()=>$("Couldn't read the file"),g.readAsDataURL(e)})},O=(e,i)=>{let f=()=>!!w.closest(".is-disabled");e.addEventListener("dragover",g=>{f()||(g.preventDefault(),i.dataset.over="true")}),e.addEventListener("dragleave",()=>{i.dataset.over="false"}),e.addEventListener("drop",g=>{i.dataset.over="false",!f()&&(g.preventDefault(),G(g.dataTransfer?.files[0]))})};p.addEventListener("change",()=>{G(p.files?.[0]),p.value=""});let w;if(r.length){let e=F("tw-image",t.label);w=e.root;let i=c("span","tw-trigger-value"),f=c("span","tw-image-note"),g=c("span","tw-trigger-chip tw-image-thumb");e.right.append(g,f,i),m.push(f);let I=c("div","tw-color-pop tw-image-pop tw-image-gallery"),C=E?H("tw-button tw-image-upload",mt):null,j=q("button","tw-image-clear","Clear");j.type="button",j.setAttribute("aria-label",`${t.label}: clear the image`);let S=c("div","tw-image-foot"),P=c("div","tw-image-foot-row"),T=c("div","tw-image-clear-slot");S.append(P),T.append(j);let L=c("div","tw-image-grid");L.setAttribute("role","radiogroup"),L.setAttribute("aria-label",t.label);let V=r.length,W=Math.min(6,Math.max(1,t.cols|0||(V<=3?Math.max(2,V):V===4?2:3)));L.style.setProperty("--tw-img-cols",String(W));let st=(a,u)=>{let d=Y("tw-image-tile",a,l=>M(l));return d.textContent="",d.setAttribute("aria-label",u),d.style.backgroundImage=z(a),d},Q=r.map((a,u)=>a.label||rt(a.value)||`Image ${u+1}`),A=r.map((a,u)=>{let d=st(a.value,Q[u]);return L.append(d),d}),b=H("tw-image-tile tw-image-custom");b.setAttribute("role","radio");let _=()=>b.parentNode?[...A,b]:A;B=()=>{let a=A.findIndex(l=>l._twVal===n);n&&a<0?(b._twVal=n,b.style.backgroundImage=z(n),b.setAttribute("aria-label",K(n)),b.parentNode||L.append(b)):(b.matches(":focus")&&A[Math.max(0,a)].focus(),b.remove());let u=_(),d=Math.max(0,u.findIndex(l=>l._twVal===n));u.forEach((l,lt)=>{let Z=!!n&&l._twVal===n;l.dataset.active=String(Z),l.setAttribute("aria-checked",String(Z)),l.tabIndex=lt===d?0:-1}),T.dataset.open=String(!!n),T.inert=!n,S.dataset.open=String(!!C||y&&!!n),S.inert=S.dataset.open==="false",g.dataset.set=n?"true":"false",g.style.backgroundImage=n?z(n):"",i.textContent=n?a>=0?Q[a]:K(n):"None"},L.addEventListener("keydown",a=>{let u=_(),d=u.indexOf(a.target);if(d<0)return;if(y&&(a.key==="Delete"||a.key==="Backspace")&&!a.altKey&&!a.metaKey&&!a.ctrlKey){a.preventDefault(),A[0].focus(),M("");return}let l=tt(a.key,d,u.length,W);l<0||(a.preventDefault(),l!==d&&(u[l].focus(),M(u[l]._twVal)))}),j.addEventListener("click",()=>{(C||A[0]).focus(),M("")}),I.append(L,S),w.append(I,x),C&&(C.setAttribute("aria-label",`${t.label}: upload an image`),C.append(h,q("span","tw-image-text","Upload image")),C.addEventListener("click",()=>p.click()),P.append(C),w.append(p),O(e.trigger,e.trigger),O(I,I)),y&&P.append(T),X(w,e.trigger,I,{fallbackH:220,initialFocus:()=>_().find(a=>a.tabIndex===0)})}else{let e=F("tw-image",t.label);w=e.root,e.trigger.removeAttribute("aria-expanded"),e.trigger.setAttribute("aria-label",`${t.label}: choose an image`);let i=c("span","tw-image-text"),f=c("span","tw-trigger-chip tw-image-thumb");e.right.append(f,h,i),w.append(p,x),B=()=>{f.dataset.set=n?"true":"false",f.style.backgroundImage=n?z(n):"",i.textContent=n?"Replace":"Drop or choose"},e.trigger.addEventListener("click",()=>p.click()),O(e.trigger,e.trigger)}return B(),{el:w,set:e=>{e!=null&&typeof e!="string"||M(e||"",!1)},get:()=>n,note:$}}nt("image",ft);
@@ -0,0 +1 @@
1
+ import{T as L,aa as O,ba as T,f as H,u as k,v as C}from"./chunk-7OSCMZ2J.js";var j=[],F=e=>({...Object.fromEntries(j.map(t=>[t,a(e[t])])),mode:e.mode}),A={slider:e=>({value:a(e.value),min:a(e.min),max:a(e.max),step:a(e.step),soft:v(e.soft),unit:e.unit}),checkbox:e=>e.options?{type:"radiogrid",options:d(e.options),value:e.value,cols:a(e.cols)}:{value:e.checked==="true"},radiogrid:e=>({options:d(e.options),value:e.value,cols:a(e.cols)}),list:e=>({options:d(e.options),value:e.value}),image:e=>({value:e.value,options:e.options?d(e.options):void 0,cols:a(e.cols),maxSize:a(e.maxSize),fit:e.fit==="false"?!1:a(e.fit),quality:a(e.quality),upload:e.upload==="false"?!1:void 0,clear:e.clear==="false"?!1:void 0}),buttongroup:e=>({buttons:d(e.buttons).map(t=>({label:t}))}),separator:()=>({}),number:e=>({value:a(e.value),min:a(e.min),max:a(e.max),step:a(e.step),unit:e.unit}),text:e=>({value:e.value??"",placeholder:e.placeholder,rows:a(e.rows)}),fpsgraph:e=>({label:e.label??"FPS"}),interval:e=>({value:e.value?e.value.split(",").map(Number):void 0,min:a(e.min),max:a(e.max),step:a(e.step)}),sides:e=>({value:e.value??e,corners:v(e.corners),unit:e.unit,step:a(e.step),min:a(e.min),max:a(e.max)}),shadow:e=>({value:e.value??{...e,inset:v(e.inset)}}),spring:F,motion:e=>({...F(e),curve:e.curve&&e.curve.includes(",")?e.curve.split(",").map(Number):e.curve,duration:a(e.duration)}),cubicbezier:e=>({value:e.value?e.value.split(",").map(Number):void 0}),point:e=>{let t=(e.value||"").split(",").map(o=>parseFloat(o));return{components:d(e.components||"X,Y").map((o,i)=>({key:o.toLowerCase(),label:o,value:isNaN(t[i])?0:t[i],step:a(e.step),min:a(e.min),max:a(e.max)})),pad:v(e.pad),invertY:e.invertY==="true"}},plot:e=>({expr:e.expr,xMin:a(e.xmin),xMax:a(e.xmax),yMin:a(e.ymin),yMax:a(e.ymax),samples:a(e.samples),editable:e.editable!=="false"})},a=e=>{if(e==null||e==="")return;let t=+e;return Number.isFinite(t)?t:void 0},v=e=>e==="true"||e==="",d=e=>(e||"").split(",").map(t=>t.trim()).filter(Boolean),Y=(e,t)=>{let o=t.dataset,i=o.tw,y=o.label??H(o.key||i),b=e.hasOwn(A,i)?A[i](o,t,y):e.LAZY_IMPORT[i]||O(i)?{...o}:null;return b?e.metaFor("v",{type:i,label:y,...b}):null},q=(e,t)=>{e.dataset.value=t==null?"":Array.isArray(t)?t.join(","):typeof t=="object"?Object.values(t).join(","):String(t)},I=(e,t,o)=>{q(e,o),e.dispatchEvent(new CustomEvent("tw:change",{bubbles:!0,detail:{key:t,value:o}}))},x=(e,t)=>[...typeof e.matches=="function"&&e.matches(t)?[e]:[],...e.querySelectorAll(t)];async function K(e,t){let{createFolder:o,createControl:i,makeCopyBtn:y,makeResetBtn:b,addHintMarker:R,restoreDefault:B,hasOwn:_,valueChanged:D,ensureForMetas:N}=t;j=t.SPRING_KEYS,x(e,'.tw-panel[data-mode="inline"]:not([data-tw-panel-bound])').forEach(n=>{let r=n.querySelector(":scope > .tw-header"),c=n.querySelector(":scope > .tw-controls");if(!r||!c)return;n.setAttribute("data-tw-panel-bound","");let p=k("div","tw-body");n.insertBefore(p,c),p.append(c);let s=r.querySelector(".tw-header-toggle"),l=r.querySelector(".tw-title");if(!s&&l&&(s=C("tw-header-toggle"),l.replaceWith(s),s.append(l)),!!s&&(s.setAttribute("aria-expanded","true"),s.addEventListener("click",()=>L(n,s,p,!n.classList.contains("is-collapsed"))),!r.querySelector(".tw-toolbar"))){let f=()=>[...n.querySelectorAll("[data-tw]")].map(u=>u._tw).filter(u=>u&&u.ctrl.get()!==void 0),g=()=>{let u=Object.create(null);for(let h of f()){let M=h.key,P=2;for(;_(u,M);)M=`${h.key}-${P++}`;u[M]=h.ctrl.get()}return JSON.stringify(u,null,2)},m=()=>{for(let u of f())u.reset()},S=k("div","tw-toolbar");S.append(y(()=>[g(),-1]),b(m)),r.append(S)}}),x(e,'[data-tw="folder"]:not([data-tw-bound])').forEach(n=>{n.setAttribute("data-tw-bound","");let r=o({label:n.dataset.label||"Folder"});[...n.children].forEach(c=>r.body.append(c)),n.append(r.el)});let w=x(e,"[data-tw]:not([data-tw-bound])").map(n=>({host:n,meta:Y(t,n)})).filter(n=>n.meta);w.forEach(({host:n})=>n.setAttribute("data-tw-bound",""));let E=N(w.map(n=>n.meta));E&&await E.catch(()=>{});for(let{host:n,meta:r}of w){let c=n.dataset.key||r.label,p,s=m=>{D(p,m)&&(p=m,I(n,c,m))},l=i(r,s);if(!l)continue;n.closest(".tw-panel, .tw-portal")||n.classList.add("tw-portal"),n.append(l.el),n.dataset.hint&&R(l.el,n.dataset.hint);let f=l.get();p=f;let g={...l,set:m=>{l.set(m),s(l.get())}};n._tw={ctrl:g,raw:r.value,def:f,key:c,host:n,reset:()=>{B(l,r.value,f),s(l.get())}}}}T(K);export{A as DATA_VALUE};