tweakit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +44 -0
- package/THIRD-PARTY-NOTICES.md +75 -0
- package/dist/tweaks/bezier-ZSQNFANZ.js +1 -0
- package/dist/tweaks/chunk-EVLD7DUH.js +1 -0
- package/dist/tweaks/chunk-GJESM23Q.js +1 -0
- package/dist/tweaks/colour-W46T6NIC.js +1 -0
- package/dist/tweaks/core.js +1 -0
- package/dist/tweaks/gradient-YEKTFEP4.js +1 -0
- package/dist/tweaks/image-VKNBVMVK.js +1 -0
- package/dist/tweaks/interval-7OUK7M7J.js +1 -0
- package/dist/tweaks/monitor-CY7CABK6.js +2 -0
- package/dist/tweaks/plot-X5IZM3QU.js +2 -0
- package/dist/tweaks/point-23BHLSGI.js +1 -0
- package/dist/tweaks/spring-Z2SKXUVV.js +1 -0
- package/dist/tweaks/tabs-CGHJ2VS2.js +1 -0
- package/dist/tweaks.css +1 -0
- package/dist/tweaks.js +3 -0
- package/dist/types/tweaks/controls/bezier.d.ts +1 -0
- package/dist/types/tweaks/controls/colour.d.ts +14 -0
- package/dist/types/tweaks/controls/gradient.d.ts +1 -0
- package/dist/types/tweaks/controls/image.d.ts +1 -0
- package/dist/types/tweaks/controls/interval.d.ts +1 -0
- package/dist/types/tweaks/controls/monitor.d.ts +1 -0
- package/dist/types/tweaks/controls/plot.d.ts +1 -0
- package/dist/types/tweaks/controls/point.d.ts +1 -0
- package/dist/types/tweaks/controls/spring.d.ts +1 -0
- package/dist/types/tweaks/controls/tabs.d.ts +1 -0
- package/dist/types/tweaks/core.d.ts +4 -0
- package/dist/types/tweaks/shared.d.ts +77 -0
- package/dist/types/tweaks/single.d.ts +12 -0
- package/dist/types/tweaks/types.d.ts +264 -0
- package/dist/types/wide-gamut.d.ts +121 -0
- package/package.json +57 -0
package/dist/tweaks.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var he=t=>t.replace(/([A-Z])/g," $1").replace(/^./,e=>e.toUpperCase()).trim(),N=(t,e,n)=>Math.min(n,Math.max(e,t)),gn=t=>typeof t=="string"&&(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(t.trim())||/^(oklch|oklab|rgba?|hsla?|hwb|lab|lch|color)\(/i.test(t.trim())),Ht=t=>{let e=String(t),n=/e-(\d+)$/i.exec(e);if(n)return Number(n[1])+(e.split("e")[0].split(".")[1]||"").length;let s=e.indexOf(".");return s===-1?0:e.length-s-1},oe=(t,e,n)=>n>0?Number((e+Math.round((t-e)/n)*n).toFixed(Ht(n))):t,Ot=(t,e)=>{let n=e-t;return n<=1?.01:n<=10?.1:n<=100?1:10},De=t=>t>=0?[0,t<=1?1:t*3||100]:[t>=-1?-1:t*3,0],Pt=t=>t==null?void 0:typeof t=="object"?t.value:t,Be=t=>t==null?"":typeof t=="string"?he(t):typeof t=="object"?t.label??String(t.value):String(t),bs="http://www.w3.org/2000/svg",g=(t,e,n)=>{let s=document.createElement(t);return e&&(s.className=e),n!=null&&(s.innerHTML=n),s},Et=(t,e)=>{let n=document.createElementNS(bs,t);return e&&n.setAttribute("class",e),n},vt=(t,e)=>{let n=g("button",t,e);return n.type="button",n},lt=(t,e,n)=>{let s=g(t,e);return s.textContent=n,s},bn=(t,e)=>getComputedStyle(t).getPropertyValue(e).trim(),re=t=>{let e=getComputedStyle(t),n=s=>e.getPropertyValue(s).trim();return n("--tw-accent")||n("--tw-text-primary")||"#fff"},He=t=>["pointerdown","pointermove","pointerup"].forEach(e=>t.addEventListener(e,n=>n.stopPropagation())),St=t=>{requestAnimationFrame(t),document.fonts&&document.fonts.ready&&document.fonts.ready.then(t)},Tt=(t,e,n)=>{let s=r=>{if(!t.isConnected)return o();n(r)},o=()=>e.forEach(([r,i])=>r.removeEventListener(i,s));return e.forEach(([r,i])=>r.addEventListener(i,s)),o},me=(t,e)=>{t.addEventListener("pointerenter",()=>{t.classList.add("is-hover"),e&&e()}),t.addEventListener("pointerleave",()=>t.classList.remove("is-hover"))},Ie=!1;typeof document<"u"&&(document.addEventListener("pointerdown",()=>{Ie=!0},!0),document.addEventListener("keydown",()=>{Ie=!1},!0));var Wt=t=>{t.addEventListener("focus",()=>t.classList.toggle("tw-focus-quiet",Ie)),t.addEventListener("blur",()=>t.classList.remove("tw-focus-quiet"))};function qt(t,{onDown:e,onMove:n,onEnd:s}={}){let o=null,r=i=>{o===null||i.pointerId!==o||(o=null,s&&s(i))};t.addEventListener("pointerdown",i=>{if(!(i.button!==0||o!==null)){o=i.pointerId;try{t.setPointerCapture(i.pointerId)}catch{}e&&e(i)}}),t.addEventListener("pointermove",i=>{if(i.pointerId===o){if(i.buttons===0)return r(i);n&&n(i)}}),t.addEventListener("pointerup",r),t.addEventListener("pointercancel",r),t.addEventListener("lostpointercapture",r)}var Kt=(t,e)=>qt(t,{onDown:n=>{t.classList.add("is-grabbing"),e(n)},onMove:e,onEnd:()=>t.classList.remove("is-grabbing")}),Ut=(t,e)=>{let n=e.getBoundingClientRect();return[N((t.clientX-n.left)/n.width,0,1),N((t.clientY-n.top)/n.height,0,1)]},Xe=(t,e,n=1/0)=>{let s=t.getBoundingClientRect(),o=Math.min(window.devicePixelRatio||1,n);return t.width=s.width*o,t.height=s.height*o,e.setTransform(o,0,0,o,0,0),[s.width,s.height]},je=(t,e,{width:n,fallbackH:s=300,gap:o=6,align:r="start",prefer:i="below"}={})=>{let a=t.getBoundingClientRect();n==="match"&&(e.style.width=a.width+"px");let u=n==="match"?a.width:e.offsetWidth||n||0,d=r==="end"?a.right-u:r==="center"?a.left+a.width/2-u/2:a.left;e.style.left=Math.max(8,Math.min(d,window.innerWidth-u-8))+"px";let c=e.offsetHeight||s,p=window.innerHeight-a.bottom,l=a.top,b=c+12,m=p>=b,f=l>=b,y=(i==="above"?f||!m&&l>=p:!m&&(f||l>p))?a.top-c-o:a.bottom+o;e.style.top=N(y,o,window.innerHeight-c-o)+"px"},ws={accent:"--tw-accent",onAccent:"--tw-on-accent",base:"--tw-base",dropdownBg:"--tw-dropdown-bg",surface:"--tw-surface",surfaceHover:"--tw-surface-hover",surfaceActive:"--tw-surface-active",border:"--tw-border",borderHover:"--tw-border-hover",selection:"--tw-selection",title:"--tw-text-root",section:"--tw-text-section",text:"--tw-text-primary",label:"--tw-text-label",textMuted:"--tw-text-secondary",textFaint:"--tw-text-tertiary",focus:"--tw-text-focus",success:"--tw-success",danger:"--tw-danger",shadow:"--tw-shadow-dropdown",shadowPanel:"--tw-shadow-panel",shadowPanelLifted:"--tw-shadow-panel-lifted",font:"--tw-font-sans",fontMono:"--tw-font-mono",radius:"--tw-radius",density:"--tw-row-height"},vs=new Set(["radius","density"]),Re=t=>(t/=255,t<=.03928?t/12.92:((t+.055)/1.055)**2.4),ys=t=>{t=String(t).trim();let e=/^#([0-9a-f]{3})$/i.exec(t);if(e)return e[1].split("").map(n=>parseInt(n+n,16));if(e=/^#([0-9a-f]{6})$/i.exec(t),e)return[0,2,4].map(n=>parseInt(e[1].slice(n,n+2),16));if(e=/^rgba?\(([^)]+)\)/i.exec(t),e){let n=e[1].split(/[\s,/]+/).filter(Boolean).map(parseFloat);return[n[0],n[1],n[2]]}return null},xs=t=>{let e=ys(t);if(!e||e.some(s=>!Number.isFinite(s)))return"#ffffff";let n=.2126*Re(e[0])+.7152*Re(e[1])+.0722*Re(e[2]);return 1.05/(n+.05)>=(n+.05)/.0571?"#ffffff":"#161616"},ze=t=>{if(!t||typeof t!="object")return null;let e={};for(let[n,s]of Object.entries(t)){if(n.startsWith("--")){e[n]=String(s);continue}let o=ws[n];o&&(e[o]=vs.has(n)&&typeof s=="number"?`${s}px`:String(s))}return e["--tw-accent"]&&!e["--tw-on-accent"]&&(e["--tw-on-accent"]=xs(e["--tw-accent"])),Object.keys(e).length?e:null},ge=(t,e)=>{if(t){if(t._twAppliedVars)for(let n of t._twAppliedVars)t.style.removeProperty(n);if(t._twAppliedVars=e?Object.keys(e):null,e)for(let n in e)t.style.setProperty(n,e[n])}},Ye=(t,e)=>{let n=e?.closest('[data-tw-scheme="light"]')?"light":e?.closest('[data-tw-scheme="dark"]')?"dark":null;n?t.setAttribute("data-tw-scheme",n):t.removeAttribute("data-tw-scheme")},se=(t,e)=>{ge(t,e?.closest(".tw-panel")?._twTheme),Ye(t,e)},Bt=null,wn=()=>{Bt&&Bt()};function Rt(t,e,n,s={}){let o=!1,r=null;n.classList.add("tw-portal"),n.addEventListener("pointerdown",m=>e.closest(".tw-panel")?._twEditPointer?.(m),!0),He(n);let i=()=>je(e,n,{width:s.width,fallbackH:s.fallbackH,gap:s.gap,align:s.align}),a=()=>{if(o){if(!t.isConnected)return b();i(),s.onReflow&&s.onReflow()}},u=m=>{!t.contains(m.target)&&!n.contains(m.target)&&b()},d=m=>{m.key==="Escape"&&o&&(b(),e.focus())},c=()=>se(n,t),p=m=>{m.every(f=>f.target===n)||c()},l=()=>{Bt&&Bt!==b&&Bt(),Bt=b,o=!0,t.classList.add("is-open"),e.setAttribute("aria-expanded","true"),document.body.appendChild(n),se(n,t),window.addEventListener("tw-retheme",c),typeof MutationObserver=="function"&&(r=new MutationObserver(p),r.observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["data-tw-scheme"]})),i(),requestAnimationFrame(()=>{n.classList.add("is-open"),s.onOpen&&s.onOpen(),i()}),requestAnimationFrame(function m(){if(o){if(!t.isConnected)return b();requestAnimationFrame(m)}}),setTimeout(()=>document.addEventListener("pointerdown",u,!0),0),document.addEventListener("keydown",d),window.addEventListener("scroll",a,!0),window.addEventListener("resize",a)},b=()=>{Bt===b&&(Bt=null),n.contains(document.activeElement)&&e.focus(),o=!1,t.classList.remove("is-open"),n.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),document.removeEventListener("pointerdown",u,!0),document.removeEventListener("keydown",d),window.removeEventListener("scroll",a,!0),window.removeEventListener("resize",a),window.removeEventListener("tw-retheme",c),r&&(r.disconnect(),r=null),setTimeout(()=>{o||n.remove()},200)};return e.addEventListener("click",()=>o?b():l()),{open:l,close:b,isOpen:()=>o,reflow:a}}var be=(t,e)=>{if(t=t.toLowerCase(),t.includes(e))return!0;if(e.length<3)return!1;let n=e.length,s=t.length,o=new Array(s+1).fill(0);for(let r=1;r<=n;r++){let i=[r];for(let a=1;a<=s;a++)i[a]=Math.min(o[a]+1,i[a-1]+1,o[a-1]+(e[r-1]===t[a-1]?0:1));o=i}return Math.min(...o)<=(e.length<6?1:2)},We=typeof matchMedia=="function"?matchMedia("(prefers-reduced-motion: reduce)"):{matches:!1},ks=(t,e)=>{We.matches||typeof t.animate!="function"||(t.style.transformOrigin=e>0?"left center":"right center",t.animate([{transform:"scaleX(1)"},{transform:"scaleX(1.18)"},{transform:"scaleX(1)"}],{duration:300,easing:"cubic-bezier(0.22, 1, 0.36, 1)"}))},we=(t,e,n)=>{let s=t.querySelector('[data-active="true"]');if(!s)return;let o=s.offsetLeft,r=s.offsetWidth,i=parseFloat(e.style.left);e.style.left=o+"px",e.style.width=r+"px",n&&Number.isFinite(i)&&i!==o&&ks(e,o>i?1:-1)},qe=(t,e)=>t.forEach(n=>{let s=n.dataset.value===String(e);n.dataset.active=String(s),n.setAttribute("aria-checked",String(s)),n.tabIndex=s?0:-1}),Ge=(t,e,n)=>{let s=vt(t);return s.setAttribute("role","radio"),s.textContent=Be(e),s.dataset.value=Pt(e),s._twVal=Pt(e),s.addEventListener("click",()=>n(s._twVal)),s},ie=(t,e,n,s=0)=>{switch(t){case"ArrowRight":return(e+1)%n;case"ArrowLeft":return(e-1+n)%n;case"ArrowDown":return s<0?-1:s?e+s<n?e+s:e:(e+1)%n;case"ArrowUp":return s<0?-1:s?e-s>=0?e-s:e:(e-1+n)%n;case"Home":return 0;case"End":return n-1}return-1},Zt=(t,e)=>{let n=g("div",t),s=vt("tw-trigger");s.setAttribute("aria-expanded","false");let o=g("span","tw-trigger-right");return s.append(lt("span","tw-trigger-label",e),o),n.append(s),{root:n,trigger:s,right:o}};function Ls(){let t=null,e=0,n=0,s=0;return{show(o,r,i){t=g("div","tw-grab-guide tw-portal"),t.innerHTML='<span class="tw-grab-line"></span><span class="tw-grab-dot"></span><span class="tw-grab-arrow"></span><span class="tw-grab-bubble"></span>',e=r,n=o,s=i??o,t.children[1].style.cssText=`left:${o}px;top:${e}px`,document.body.appendChild(t)},move(o,r){t&&(t.children[0].style.cssText=`left:${Math.min(n,o)}px;top:${e}px;width:${Math.abs(o-n)}px`,t.children[2].style.cssText=`left:${o}px;top:${e}px;transform:translate(-50%,-50%) scaleX(${o>=n?1:-1})`,t.children[3].style.cssText=`left:${s}px;top:${e-16}px`,t.children[3].textContent=r)},hide(){t&&(t.remove(),t=null)}}}function Es(t,e,n,s,o,r){let i=0,a=0,u=null,d=1,c=Ls();t.addEventListener("pointerdown",l=>{if(l.button!==0||u!==null)return;l.preventDefault(),u=l.pointerId,i=l.clientX,a=s(),d=1,t.classList.add("is-dragging");try{t.setPointerCapture(l.pointerId)}catch{}let b=e.getBoundingClientRect();c.show(l.clientX,b.top+b.height/2,b.left+b.width/2),c.move(l.clientX,r())}),t.addEventListener("pointermove",l=>{if(l.pointerId!==u)return;if(l.buttons===0){p(l);return}let b=l.shiftKey?10:l.altKey?.1:1;b!==d&&(d=b,i=l.clientX,a=s()),o(a+(l.clientX-i)*n*b),c.move(l.clientX,r())});let p=l=>{u===null||l.pointerId!==u||(u=null,t.classList.remove("is-dragging"),c.hide())};t.addEventListener("pointerup",p),t.addEventListener("pointercancel",p),t.addEventListener("lostpointercapture",p)}function _t(t,e){let n=Number.isFinite(+t.step)&&+t.step>0?+t.step:1,s=Ht(n),o=+t.min,r=+t.max;if(Number.isFinite(o)&&Number.isFinite(r)&&r<o){let b=o;o=r,r=b}let i=b=>{let m=oe(b,Number.isFinite(o)?o:0,n);return t.soft||(Number.isFinite(o)&&(m=Math.max(o,m)),Number.isFinite(r)&&(m=Math.min(r,m))),m},a=i(Number.isFinite(+t.value)?+t.value:0),u=g("div",t.row?"tw-row":"tw-field"),d=g("div","tw-num-wrap"),c=g("span","tw-num-grab",Ms);c.setAttribute("aria-hidden","true"),c.title="Drag to adjust";let p=g("input","tw-num");p.type="text",p.inputMode="decimal",p.setAttribute("aria-label",t.label),p.value=a.toFixed(s),Wt(p),d.append(c,p),u.append(lt("span",t.row?"tw-row-label":"tw-field-label",t.label),d);let l=(b,m=!0)=>{b=+b,Number.isFinite(b)&&(a=i(b),p.value=a.toFixed(s),m&&e&&e(a))};return p.addEventListener("change",()=>{let b=parseFloat(p.value);l(isNaN(b)?a:b)}),p.addEventListener("keydown",b=>{b.key==="Enter"&&p.blur()}),Es(c,d,n,()=>a,l,()=>p.value),{el:u,set:b=>l(b,!1),get:()=>a}}var Ms='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><path d="M6 4v8M10 4v8"/></svg>',It=t=>({el:t,set:()=>{},get:()=>{}}),vn={},rt=(t,e)=>{vn[t]=e},ve=t=>vn[t];var As=180/Math.PI,ke=Math.PI/180,Nt=(t,e)=>[t[0][0]*e[0]+t[0][1]*e[1]+t[0][2]*e[2],t[1][0]*e[0]+t[1][1]*e[1]+t[1][2]*e[2],t[2][0]*e[0]+t[2][1]*e[1]+t[2][2]*e[2]],Sn=(t,e)=>{let n=[[0,0,0],[0,0,0],[0,0,0]];for(let s=0;s<3;s++)for(let o=0;o<3;o++)n[s][o]=t[s][0]*e[0][o]+t[s][1]*e[1][o]+t[s][2]*e[2][o];return n},Lt=t=>t==null||Number.isNaN(t)?0:t,Ss=(t,e,n)=>Math.min(n,Math.max(e,t)),ye=t=>{let e=Math.abs(t);return e<=.04045?t/12.92:Math.sign(t)*((e+.055)/1.055)**2.4},te=t=>{let e=Math.abs(t);return e<=.0031308?t*12.92:Math.sign(t)*(1.055*e**(1/2.4)-.055)},Le=1.09929682680944,Cn=.018053968510807,Cs=t=>{let e=Math.abs(t);return e<Cn*4.5?t/4.5:Math.sign(t)*((e+Le-1)/Le)**(1/.45)},Ue=t=>{let e=Math.abs(t);return e<Cn?t*4.5:Math.sign(t)*(Le*e**.45-(Le-1))},Tn=1/512,Ts=t=>{let e=Math.abs(t);return e<=Tn*16?t/16:Math.sign(t)*e**1.8},$s=t=>{let e=Math.abs(t);return e>=Tn?Math.sign(t)*e**(1/1.8):16*t},Ve=[[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],le=[[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],_s=[[.4865709486482162,.26566769316909306,.19821728523436247],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],Ze=[[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],Ns=[[.6369580483012914,.14461690358620832,.16888097516417205],[.2627002120112671,.6779980715188708,.05930171646986196],[0,.028072693049087428,1.060985057710791]],Je=[[1.7166511879712674,-.35567078377639233,-.25336628137365974],[-.6666843518324892,1.6164812366349395,.01576854581391113],[.017639857445310783,-.042770613257808524,.9421031212354738]],Fs=[[.7977604896723027,.13518583717574031,.0313493495815248],[.2880711282292934,.7118432178101014,8565396060525902e-20],[0,0,.8251046025104601]],Ps=[[1.3457989731028281,-.25558010007997534,-.05110628506753401],[-.5446224939028347,1.5082327413132781,.02053603239147973],[0,0,1.2119675456389454]],$n=[[1.0479298208405488,.022946793341019088,-.05019222954313557],[.029627815688159344,.990434484573249,-.01707382502938514],[-.009243058152591178,.015055144896577895,.7518742899580008]],_n=[[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]],Os=[[.819022437996703,.3619062600528904,-.1288737815209879],[.0329836539323885,.9292868615863434,.0361446663506424],[.0481771893596242,.2642395317527308,.6335478284694309]],Qe=[[1.2268798758459243,-.5578149944602171,.2813910456659647],[-.0405757452148008,1.112286803280317,-.0717110580655164],[-.0763729366746601,-.4214933324022432,1.5869240198367816]],Rs=[[.210454268309314,.7936177747023054,-.0040720430116193],[1.9779985324311684,-2.42859224204858,.450593709617411],[.0259040424655478,.7827717124575296,-.8086757549230774]],Ct=[[1,.3963377773761749,.2158037573099136],[1,-.1055613458156586,-.0638541728258133],[1,-.0894841775298119,-1.2914855480194092]],xe=216/24389,ae=24389/27,ee=[.3457/.3585,1,(1-.3457-.3585)/.3585],Jt=(t,e,n)=>Nt(n,[e(t[0]),e(t[1]),e(t[2])]),Qt=(t,e,n)=>{let s=Nt(n,t);return[e(s[0]),e(s[1]),e(s[2])]},yn=t=>{let e=Nt(Ct,t);return Nt(Qe,[e[0]**3,e[1]**3,e[2]**3])},xn=t=>{let e=Nt(Os,t);return Nt(Rs,[Math.cbrt(e[0]),Math.cbrt(e[1]),Math.cbrt(e[2])])};function kn(t){let[e,n,s]=t,o=(e+16)/116,r=n/500+o,i=o-s/200,a=r**3>xe?r**3:(116*r-16)/ae,u=e>ae*xe?o**3:e/ae,d=i**3>xe?i**3:(116*i-16)/ae;return Nt(_n,[a*ee[0],u*ee[1],d*ee[2]])}function Ln(t){let e=Nt($n,t),n=i=>i>xe?Math.cbrt(i):(ae*i+16)/116,s=n(e[0]/ee[0]),o=n(e[1]/ee[1]),r=n(e[2]/ee[2]);return[116*o-16,500*(s-o),200*(o-r)]}var Ee=t=>{let e=Math.hypot(t[1],t[2]),n=Math.atan2(t[2],t[1])*As;return n<0&&(n+=360),[t[0],e,n]},Me=t=>[t[0],t[1]*Math.cos(t[2]*ke),t[1]*Math.sin(t[2]*ke)];function Nn(t){let e=((Number.isNaN(t[0])?0:t[0])%360+360)%360,n=t[1]/100,s=t[2]/100,o=r=>{let i=(r+e/30)%12,a=n*Math.min(s,1-s);return s-a*Math.max(-1,Math.min(i-3,9-i,1))};return[o(0),o(8),o(4)]}function Fn(t){let e=Math.max(...t),n=Math.min(...t),s=e-n;if(s===0)return NaN;let o;return e===t[0]?o=(t[1]-t[2])/s+(t[1]<t[2]?6:0):e===t[1]?o=(t[2]-t[0])/s+2:o=(t[0]-t[1])/s+4,o*60}function Is(t){let e=Math.max(...t),n=Math.min(...t),s=(n+e)/2,o=Fn(t),r=e===n||s===0||s===1?0:(e-s)/Math.min(s,1-s);return r<0&&(o+=180,r=-r),o>=360&&(o-=360),[o,r*100,s*100]}function Ds(t){let e=t[1]/100,n=t[2]/100;if(e+n>=1){let r=e/(e+n);return[r,r,r]}let s=Nn([t[0],100,50]),o=1-e-n;return[s[0]*o+e,s[1]*o+e,s[2]*o+e]}var Bs=t=>[Fn(t),Math.min(...t)*100,(1-Math.max(...t))*100];function Hs(t,e){switch(e){case"srgb":return Jt(t,ye,Ve);case"p3":return Jt(t,ye,_s);case"rec2020":return Jt(t,Cs,Ns);case"prophoto-rgb":return Nt(_n,Jt(t,Ts,Fs));case"oklab":return yn(t);case"oklch":return yn(Me(t));case"lab":return kn(t);case"lch":return kn(Me(t));case"hsl":return Jt(Nn(t),ye,Ve);case"hwb":return Jt(Ds(t),ye,Ve)}}function Xs(t,e){switch(e){case"srgb":return Qt(t,te,le);case"p3":return Qt(t,te,Ze);case"rec2020":return Qt(t,Ue,Je);case"prophoto-rgb":return Qt(Nt($n,t),$s,Ps);case"oklab":return xn(t);case"oklch":return Ee(xn(t));case"lab":return Ln(t);case"lch":return Ee(Ln(t));case"hsl":return Is(Qt(t,te,le));case"hwb":return Bs(Qt(t,te,le))}}function kt(t,e,n){return e===n?[t[0],t[1],t[2]]:e==="oklch"&&n==="oklab"?Me(t):e==="oklab"&&n==="oklch"?Ee(t):e==="lch"&&n==="lab"?Me(t):e==="lab"&&n==="lch"?Ee(t):Xs(Hs(t,e),n)}var ne=75e-6;function Ke(t,e){return kt(t,"oklch",e).every(s=>s>=-ne&&s<=1+ne)}var En=t=>t.map(e=>Math.min(1,Math.max(0,e))),Mn=(t,e)=>Math.hypot(t[0]-e[0],t[1]-e[1],t[2]-e[2]);function Ae(t,e){if(Ke(t,e))return kt(t,"oklch",e);let n=t[0];if(n>=1)return[1,1,1];if(n<=0)return[0,0,0];let s=.02,o=1e-4,r=[t[0],t[1],t[2]],i=0,a=t[1],u=!0,d=En(kt(r,"oklch",e));if(Mn(kt(d,e,"oklab"),kt(t,"oklch","oklab"))<s)return d;for(;a-i>o;){let c=(i+a)/2;r[1]=c;let p=kt(r,"oklch",e);if(u&&p.every(b=>b>=-ne&&b<=1+ne)){i=c;continue}d=En(p);let l=Mn(kt(d,e,"oklab"),kt(r,"oklch","oklab"));if(l<s){if(s-l<o)return d;u=!1,i=c}else a=c}return d}function ce(t,e){let n=t*ke,s=Math.cos(n),o=Math.sin(n),r=s*Ct[0][1]+o*Ct[0][2],i=s*Ct[1][1]+o*Ct[1][2],a=s*Ct[2][1]+o*Ct[2][2],u=Sn(e==="p3"?Ze:e==="rec2020"?Je:le,Qe),d=e==="rec2020"?Ue:te,c=-ne,p=1+ne;return(l,b)=>{let m=l+b*r,f=l+b*i,x=l+b*a,y=m**3,S=f**3,E=x**3,A=d(u[0][0]*y+u[0][1]*S+u[0][2]*E);if(A<c||A>p)return!1;let I=d(u[1][0]*y+u[1][1]*S+u[1][2]*E);if(I<c||I>p)return!1;let P=d(u[2][0]*y+u[2][1]*S+u[2][2]*E);return P>=c&&P<=p}}function Pn(t,e){let n=t*ke,s=Math.cos(n),o=Math.sin(n),r=s*Ct[0][1]+o*Ct[0][2],i=s*Ct[1][1]+o*Ct[1][2],a=s*Ct[2][1]+o*Ct[2][2],u=Sn(e==="p3"?Ze:e==="rec2020"?Je:le,Qe),d=e==="rec2020"?Ue:te;return(c,p,l)=>{let b=c+p*r,m=c+p*i,f=c+p*a,x=b**3,y=m**3,S=f**3;l[0]=d(u[0][0]*x+u[0][1]*y+u[0][2]*S),l[1]=d(u[1][0]*x+u[1][1]*y+u[1][2]*S),l[2]=d(u[2][0]*x+u[2][1]*y+u[2][2]*S)}}function de(t,e,n=.5){if(!t(e,0))return 0;let s=0;for(let o=0;o<16;o++){let r=(s+n)/2;t(e,r)?s=r:n=r}return s}var Gt=t=>Math.round(Math.min(1,Math.max(0,t))*255).toString(16).padStart(2,"0"),js=t=>`#${Gt(t[0])}${Gt(t[1])}${Gt(t[2])}`,Se=(t,e,n)=>js(Ae([t,e,n],"srgb"));function On(t){let e=String(t).replace("#","").trim();if(e.length===3&&(e=e.split("").map(s=>s+s).join("")),e.length<6)return[.7,.1,280];let n=[parseInt(e.slice(0,2),16)/255,parseInt(e.slice(2,4),16)/255,parseInt(e.slice(4,6),16)/255];return kt(n,"srgb","oklch").map(Lt)}var Ce=["hex","srgb","css","hsl","hwb","oklch","oklab","lch","lab","p3","rec2020"],Rn={hex:"HEX",srgb:"RGB",css:"CSS",hsl:"HSL",hwb:"HWB",oklch:"OKLCH",oklab:"OKLab",lch:"LCH",lab:"Lab",p3:"P3",rec2020:"Rec2020"},In=["srgb","css","hsl","hwb","hex"],tn=t=>!In.includes(t),Dn=t=>t==="hex"||t==="css"?"srgb":t,zs={hex:"srgb",srgb:"srgb",css:"srgb",hsl:"hsl",hwb:"hwb",oklch:"oklch",oklab:"oklab",lch:"lch",lab:"lab",p3:"display-p3",rec2020:"rec2020"},Bn=t=>zs[t]||"oklch",Ys={srgb:"srgb",hsl:"hsl",hwb:"hwb",oklch:"oklch",oklab:"oklab",lch:"lch",lab:"lab","display-p3":"p3",rec2020:"rec2020"},en=t=>Ys[t]||"oklch",Ws=.5,ue={oklch:[{k:"L",min:0,max:100,step:1,scale:100},{k:"C",min:0,max:Ws,step:.01,scale:1},{k:"H",min:0,max:360,step:1,scale:1}],oklab:[{k:"L",min:0,max:100,step:1,scale:100},{k:"a",min:-.4,max:.4,step:.01,scale:1},{k:"b",min:-.4,max:.4,step:.01,scale:1}],lch:[{k:"L",min:0,max:100,step:1,scale:1},{k:"C",min:0,max:150,step:1,scale:1},{k:"H",min:0,max:360,step:1,scale:1}],lab:[{k:"L",min:0,max:100,step:1,scale:1},{k:"a",min:-125,max:125,step:1,scale:1},{k:"b",min:-125,max:125,step:1,scale:1}],srgb:[{k:"R",min:0,max:255,step:1,scale:255},{k:"G",min:0,max:255,step:1,scale:255},{k:"B",min:0,max:255,step:1,scale:255}],css:[{k:"R",min:0,max:255,step:1,scale:255},{k:"G",min:0,max:255,step:1,scale:255},{k:"B",min:0,max:255,step:1,scale:255}],hsl:[{k:"H",min:0,max:360,step:1,scale:1},{k:"S",min:0,max:100,step:1,scale:1},{k:"L",min:0,max:100,step:1,scale:1}],hwb:[{k:"H",min:0,max:360,step:1,scale:1},{k:"W",min:0,max:100,step:1,scale:1},{k:"B",min:0,max:100,step:1,scale:1}],p3:[{k:"R",min:0,max:1,step:.01,scale:1},{k:"G",min:0,max:1,step:.01,scale:1},{k:"B",min:0,max:1,step:.01,scale:1}],rec2020:[{k:"R",min:0,max:1,step:.01,scale:1},{k:"G",min:0,max:1,step:.01,scale:1},{k:"B",min:0,max:1,step:.01,scale:1}]},qs=t=>t>=1?0:t>=.1?1:t>=.01?2:3,Hn=(t,e,n)=>e==="oklch"?[t[0],t[1],t[2]]:In.includes(n)?e==="srgb"?Ae(t,"srgb"):kt(Ae(t,"srgb"),"srgb",e):kt(t,"oklch",e);function Te(t,e){let n=Hn(t,Dn(e),e);return ue[e].map((s,o)=>{let r=Lt(n[o])*s.scale;return Ss(Math.abs(r)<.5*s.step?0:r,s.min,s.max)})}function Xn(t,e,n,s){let o=Dn(e),r=Hn(t,o,e).map(Lt);r[n]=s/ue[e][n].scale;let i=kt(r,o,"oklch");return[Lt(i[0]),Lt(i[1]),Lt(i[2])]}function jn(t,e){if(!tn(e))return"sRGB";let n=Ae(t,"srgb");return Math.max(...n)<.03||Math.min(...n)>.97||Ke(t,"srgb")?"sRGB":Ke(t,"p3")?"P3":"wide"}function nn(t,e){if(e==="hex")return Se(t[0],t[1],t[2]);let n=ue[e],s=Te(t,e),o=r=>s[r].toFixed(qs(n[r].step));return e==="css"?`${o(0)}, ${o(1)}, ${o(2)}`:e==="oklch"||e==="oklab"||e==="lch"||e==="lab"?`${o(0)}% ${o(1)} ${o(2)}`:e==="hsl"||e==="hwb"?`${o(0)} ${o(1)}% ${o(2)}%`:`${o(0)} ${o(1)} ${o(2)}`}var An=(t,e)=>e==="hex"?t:e==="srgb"?`rgb(${t})`:e==="css"?`rgba(${t}, 1)`:e==="hsl"?`hsl(${t})`:e==="hwb"?`hwb(${t})`:e==="p3"?`color(display-p3 ${t})`:e==="rec2020"?`color(rec2020 ${t})`:`${e}(${t})`;function zn(t,e,n){let s=Lt(n);if(e==="hex")return Se(t[0],t[1],t[2])+(s<.999?Gt(s):"");let o=nn(t,e);if(s>=.999)return An(o,e);let r=+s.toFixed(3);return e==="css"?`rgba(${o}, ${r})`:An(`${o} / ${r}`,e)}var Wn=(()=>{try{return document.createElement("canvas").getContext("2d",{colorSpace:"display-p3"})?.getContextAttributes?.().colorSpace==="display-p3"}catch{return!1}})(),sn=Wn?{colorSpace:"display-p3"}:{},Gs=Wn?"p3":"srgb",$e=(t,e)=>{let n=t.length-1,s=Math.max(0,Math.min(n,e*n)),o=Math.floor(s),r=s-o;return t[o]*(1-r)+t[Math.min(o+1,n)]*r},Vs=(t,e)=>{let n=ce(t,e),s=new Float64Array(128);for(let o=0;o<128;o++)s[o]=de(n,o/127);return s},on="repeating-conic-gradient(#6b6b6b 0% 25%, #9a9a9a 0% 50%) 0 0 / 8px 8px",Ks={srgb:"srgb","display-p3":"p3",rec2020:"rec2020","prophoto-rgb":"prophoto-rgb"},Yn=t=>{let e=/^([+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?)(deg|grad|rad|turn)$/i.exec(t);if(!e)return Lt(parseFloat(t));let n=parseFloat(e[1]);return e[2].toLowerCase()==="turn"?n*360:e[2].toLowerCase()==="grad"?n*.9:e[2].toLowerCase()==="rad"?n*180/Math.PI:n};function Ft(t){if(t=String(t??"").trim(),/^#?([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(t)){let a=t.replace("#",""),u=1;a.length===4?(u=parseInt(a[3]+a[3],16)/255,a=a.slice(0,3)):a.length===8&&(u=parseInt(a.slice(6,8),16)/255,a=a.slice(0,6));let[d,c,p]=On("#"+a);return[d,c,p,u]}let e=t.match(/^(oklch|oklab|lch|lab|color)\(\s*([^)]*?)\s*\)$/i);if(e){let a=e[1].toLowerCase(),[u,d]=e[2].split("/").map(x=>x.trim()),c=u.split(/\s+/).filter(Boolean),p=a;if(a==="color"&&(p=Ks[(c[0]||"").toLowerCase()],c=c.slice(1),!p))return[.7,.1,280,1];let l=(x,y=1)=>!x||x==="none"?0:Lt(parseFloat(x))*(/%$/.test(x)?y:1),b=d?N(l(d,.01),0,1):1,m=a==="lab"?[N(l(c[0]),0,100),l(c[1],1.25),l(c[2],1.25)]:a==="lch"?[N(l(c[0]),0,100),Math.max(0,l(c[1],1.5)),Yn(c[2]||"0")]:a==="color"?[l(c[0],.01),l(c[1],.01),l(c[2],.01)]:a==="oklab"?[N(l(c[0],.01),0,1),l(c[1],.004),l(c[2],.004)]:[N(l(c[0],.01),0,1),Math.max(0,l(c[1],.004)),Yn(c[2]||"0")],f=p==="oklch"?m:kt(m,p,"oklch");return[Lt(f[0]),Lt(f[1]),(Lt(f[2])%360+360)%360,b]}let n=Ft._c2d||(Ft._c2d=document.createElement("canvas").getContext("2d"));n.fillStyle="#000",n.fillStyle=t;let s=n.fillStyle;if(s[0]==="#")return Ft(s);let o=s.match(/^rgba?\(([^)]*)\)/i),r=((o?o[1]:"").match(/-?[\d.]+(?:e[+-]?\d+)?/gi)||[0,0,0]).map(Number),i=kt([r[0]/255,r[1]/255,r[2]/255],"srgb","oklch");return[Lt(i[0]),Lt(i[1]),Lt(i[2]),r[3]!=null?N(Lt(r[3]),0,1):1]}function rn(t,e){let[n,s,o,r]=Ft(t.value||"#7c5cff"),i=Ce.includes(t.mode)?t.mode:"oklch",a=NaN,u=null,d=[],c=NaN,p="",l=()=>zn([n,s,o],i,r),b=g("div","tw-color-body"),m=g("div","tw-wg-area"),f=document.createElement("canvas");f.className="tw-wg-canvas";let x=g("div","tw-wg-thumb");m.append(f,x);let y=g("div","tw-wg-hue"),S=document.createElement("canvas");S.className="tw-wg-hue-canvas";let E=g("div","tw-wg-hue-thumb");y.append(S,E);let A=g("div","tw-wg-alpha"),I=g("div","tw-wg-alpha-grad"),P=g("div","tw-wg-hue-thumb");A.append(I,P),A.tabIndex=0,A.setAttribute("role","slider"),A.setAttribute("aria-label","Alpha"),A.setAttribute("aria-valuemin","0"),A.setAttribute("aria-valuemax","1");let z=g("div","tw-color-mode-row"),j=g("select","tw-color-mode");j.setAttribute("aria-label","Color mode"),Ce.forEach(X=>{let W=document.createElement("option");W.value=X,W.textContent=Rn[X],j.append(W)}),j.value=i;let k=g("span","tw-color-gamut");z.append(j,k);let O=g("div","tw-color-channels");b.append(m,y,A,z,O);let Y=f.getContext("2d",sn),J=S.getContext("2d"),K=document.createElement("canvas"),T=K.getContext("2d",sn),D=null,v=()=>{let X=m.getBoundingClientRect(),W=Math.round(X.width),st=Math.round(X.height);if(W<2)return;let pt=window.devicePixelRatio||1,L=tn(i)?"p3":"srgb",G=Vs(o,L);u=G;let Q=Math.round(W*pt),gt=Math.round(st*pt),ft=Math.max(1,Math.round(Q/4)),At=Math.max(1,Math.round(gt/4));(K.width!==ft||K.height!==At)&&(K.width=ft,K.height=At,D=new ImageData(ft,At,sn));let xt=D.data,Yt=At>1?1/(At-1):0,_=ft>1?1/(ft-1):0,et=Pn(o,Gs),V=[0,0,0];for(let tt=0;tt<At;tt++){let $=1-tt*Yt,M=$e(G,$);for(let R=0;R<ft;R++){et($,R*_*M,V);let F=(tt*ft+R)*4;xt[F]=Math.round(N(V[0],0,1)*255),xt[F+1]=Math.round(N(V[1],0,1)*255),xt[F+2]=Math.round(N(V[2],0,1)*255),xt[F+3]=255}}if(T.putImageData(D,0,0),f.width=Q,f.height=gt,Y.imageSmoothingEnabled=!0,Y.drawImage(K,0,0,Q,gt),L!=="srgb"){let tt=($,M,R,F)=>{let C=ce(o,$),ct=[];for(let at=0;at<=100;at++){let nt=at/100,ht=$e(G,nt);if(ht<=0)continue;let dt=de(C,nt,ht);dt<=0||ct.push([Math.min(dt/ht*Q,Q-R*pt/2),(1-nt)*gt])}ct.length<2||(Y.save(),Y.strokeStyle=M,Y.lineWidth=R*pt,Y.lineJoin=Y.lineCap="round",Y.setLineDash(F.map(at=>at*pt)),Y.beginPath(),ct.forEach((at,nt)=>nt?Y.lineTo(at[0],at[1]):Y.moveTo(at[0],at[1])),Y.stroke(),Y.restore())};tt("srgb","rgba(255,255,255,0.7)",1.5,[]),tt("p3","rgba(255,255,255,0.4)",1,[3,3])}a=o},h=.7,w=0,B=()=>{let X=y.getBoundingClientRect(),W=Math.max(1,Math.round(X.width)),st=Math.max(1,Math.round(X.height));if(W<2||W===w&&S.width===W)return;w=W,S.width=W,S.height=st;let pt=h;for(let L=0;L<W;L++){let G=L/(W-1)*360,Q=kt([pt,de(ce(G,"srgb"),pt),G],"oklch","srgb");J.fillStyle=`rgb(${N(Q[0]*255,0,255)|0},${N(Q[1]*255,0,255)|0},${N(Q[2]*255,0,255)|0})`,J.fillRect(L,0,1,st)}},H=()=>{let X=u?$e(u,n):.4,W=pt=>`${N(pt,0,1)*100}%`,st=(pt,L)=>{let G=N(pt,0,1);return`calc(${G*100}% + ${(.5-G)*L}px)`};if(x.style.left=W(X>0?s/X:0),x.style.top=W(1-n),E.style.left=st(o/360,16),P.style.left=st(r,16),A.setAttribute("aria-valuenow",String(+r.toFixed(2))),I.style.background=`linear-gradient(to right, oklch(${n} ${s} ${o} / 0), oklch(${n} ${s} ${o}))`,x.style.background=`oklch(${n} ${s} ${o})`,P.style.background=`linear-gradient(oklch(${n} ${s} ${o} / ${r}), oklch(${n} ${s} ${o} / ${r})), var(--tw-dropdown-bg)`,o!==c){let pt=kt([h,de(ce(o,"srgb"),h),o],"oklch","srgb");p=`rgb(${N(pt[0]*255,0,255)|0} ${N(pt[1]*255,0,255)|0} ${N(pt[2]*255,0,255)|0})`,c=o}E.style.background=p},q=()=>{if(k.textContent=jn([n,s,o],i),i==="hex"){let X=O.querySelector(".tw-color-chan-input");X&&document.activeElement!==X&&(X.value=Se(n,s,o)+(r<.999?Gt(r):""))}else{let X=Te([n,s,o],i);d.forEach((W,st)=>{W.el.contains(document.activeElement)||W.set(X[st])})}},Z=()=>{B(),v(),H()},ot=()=>e(l()),U=X=>{X&&o!==a&&v(),H(),q()},it=()=>{if(O.replaceChildren(),d=[],i==="hex"){O.classList.add("tw-color-channels--hex");let X=g("div","tw-color-chan"),W=g("input","tw-color-chan-input");W.type="text",W.spellcheck=!1,W.setAttribute("aria-label","Hex color"),Wt(W),W.addEventListener("change",()=>{let st=W.value.trim();/^#?([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(st)&&([n,s,o,r]=Ft(st),U(!0),ot())}),W.addEventListener("keydown",st=>{st.key==="Enter"&&W.blur()}),X.append(lt("span","tw-color-chan-label","HEX"),W),O.append(X)}else{O.classList.remove("tw-color-channels--hex");let X=Te([n,s,o],i);ue[i].forEach((W,st)=>{let pt=_t({label:W.k,value:X[st],min:W.min,max:W.max,step:W.step},L=>{[n,s,o]=Xn([n,s,o],i,st,N(L,W.min,W.max)),U(!0),ot()});d.push(pt),O.append(pt.el)})}q()},wt=X=>Ut(X,m);Kt(m,X=>{let[W,st]=wt(X);n=1-st,s=W*(u?$e(u,n):.4),H(),q(),ot()});let Dt=X=>Ut(X,y)[0]*360;Kt(y,X=>{o=Dt(X),U(!0),ot()});let bt=X=>Ut(X,A)[0];return Kt(A,X=>{r=bt(X),H(),q(),ot()}),A.addEventListener("keydown",X=>{let W=X.shiftKey?.1:.01,st=r;switch(X.key){case"ArrowRight":case"ArrowUp":st+=W;break;case"ArrowLeft":case"ArrowDown":st-=W;break;case"Home":st=0;break;case"End":st=1;break;default:return}X.preventDefault(),r=N(st,0,1),H(),q(),ot()}),j.addEventListener("change",()=>{i=j.value,it(),v(),H(),t.onMode&&t.onMode()}),it(),{el:b,set:X=>{let W=document.activeElement;W&&b.contains(W)&&W.blur(),[n,s,o,r]=Ft(X),U(!0)},get:()=>l(),mode:()=>i,setMode:X=>{X===i||!Ce.includes(X)||(i=X,j.value=X,it(),v(),H())},reflow:Z,swatchCss:()=>`linear-gradient(oklch(${n} ${s} ${o} / ${r}), oklch(${n} ${s} ${o} / ${r})), ${on}`,valueText:()=>nn([n,s,o],i)+(r<.999?i==="hex"?Gt(r):` / ${+r.toFixed(2)}`:"")}}function Us(t,e){let{root:n,trigger:s,right:o}=Zt("tw-color",t.label||"Colour"),r=g("span","tw-trigger-chip tw-color-swatch"),i=g("span","tw-trigger-value");o.append(r,i);let a=g("div","tw-color-pop"),u=()=>{r.style.background=d.swatchCss(),i.textContent=d.valueText()},d=rn({value:t.value,onMode:()=>u()},c=>{u(),e(c)});return a.append(d.el),n.append(a),Rt(n,s,a,{width:240,fallbackH:340,gap:6,onOpen:d.reflow,onReflow:d.reflow}),u(),{el:n,set:c=>{d.set(c),u()},get:()=>d.get()}}var qn=(t,e,n,s)=>s<.999?`oklch(${+t.toFixed(4)} ${+e.toFixed(4)} ${+n.toFixed(2)} / ${+s.toFixed(3)})`:`oklch(${+t.toFixed(4)} ${+e.toFixed(4)} ${+n.toFixed(2)})`;rt("color",Us);var Zs='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true"><path d="M12 5v14M5 12h14"/></svg>',Gn=t=>t&&!Array.isArray(t)&&typeof t.interpolation=="string"?t.interpolation:null;function Vn(t){let e=[{color:"oklch(0.72 0.19 25)",pos:0},{color:"oklch(0.72 0.16 280)",pos:1}],s=((Array.isArray(t)?t:t&&Array.isArray(t.stops)?t.stops:null)||[]).map(o=>Array.isArray(o)?{color:String(o[0]),pos:N(+o[1]||0,0,1)}:o&&typeof o=="object"?{color:String(o.color),pos:N(+o.pos||0,0,1)}:null).filter(Boolean);return s.length>=2?s:e}function Js(t,e){let n=Vn(t.value),s=n[0],{root:o,trigger:r,right:i}=Zt("tw-gradient",t.label||"Gradient"),a=g("span","tw-gradient-count"),u=g("span","tw-trigger-chip tw-gradient-preview");i.append(a,u);let d=g("div","tw-color-pop tw-gradient-pop"),c=g("div","tw-gradient-bar-row"),p=g("div","tw-gradient-bar"),l=g("div","tw-gradient-grad"),b=g("div","tw-gradient-rail");p.append(l,b);let m=vt("tw-gradient-add",Zs);m.title="Add a stop after the selected one",m.setAttribute("aria-label","Add a colour stop after the selected one"),c.append(p,m);let f=()=>[...n].sort((h,w)=>h.pos-w.pos),x=()=>f().map(h=>`${h.color} ${(h.pos*100).toFixed(1)}%`).join(", "),y=()=>Bn(j.mode()),S=()=>`linear-gradient(in ${y()} to right, ${x()})`,E=()=>{let h=S();l.style.background=h,u.style.background=`${h}, ${on}`},A=()=>{a.textContent=`${n.length} stop${n.length===1?"":"s"}`},I=()=>({stops:f().map(h=>({color:h.color,pos:+h.pos.toFixed(4)})),interpolation:y()}),P=()=>e(I()),z=h=>[...b.children].find(w=>w._stop===h),j=rn({value:s.color,mode:en(Gn(t.value)||"oklab"),onMode:()=>{E(),P()}},h=>{s.color=h,z(s)?.style.setProperty("--stop",h),E(),P()});d.append(c,j.el),o.append(d);let k=()=>{for(let h of b.children)h.dataset.sel=String(h._stop===s)},O=()=>{b.replaceChildren();for(let h of n){let w=vt("tw-gradient-stop");w._stop=h,w.style.left=h.pos*100+"%",w.style.setProperty("--stop",h.color),w.dataset.sel=String(h===s),w.setAttribute("aria-label","Colour stop");let B=!1;qt(w,{onDown:H=>{H.preventDefault(),H.stopPropagation(),w.focus({focusVisible:!1}),Y(h,!1),B=!1},onMove:H=>{let q=b.getBoundingClientRect();h.pos=N((H.clientX-q.left)/(q.width||1),0,1),w.style.left=h.pos*100+"%",E(),P(),B=n.length>2&&(H.clientY<q.top-24||H.clientY>q.bottom+24),w.dataset.removing=String(B)},onEnd:()=>{B?T(h):w.dataset.removing="false"}}),w.addEventListener("dblclick",H=>{H.preventDefault(),T(h)}),w.addEventListener("keydown",H=>{let q=H.key==="ArrowLeft"?-1:H.key==="ArrowRight"?1:0;q&&(H.preventDefault(),h.pos=N(h.pos+q*(H.shiftKey?.1:.01),0,1),w.style.left=h.pos*100+"%",E(),P())}),b.append(w)}},Y=(h,w)=>{h!==s&&(j.set(h.color),s=h),w?O():k()},J=h=>{let w=b.getBoundingClientRect();return N((h-w.left)/(w.width||1),0,1)},K=h=>{let w=f(),B=w[0],H=w[w.length-1];for(let mt=0;mt<w.length-1;mt++)if(h>=w[mt].pos&&h<=w[mt+1].pos){B=w[mt],H=w[mt+1];break}let q=H.pos>B.pos?N((h-B.pos)/(H.pos-B.pos),0,1):0,Z=Ft(B.color),ot=Ft(H.color),U=mt=>mt[1]<1e-4,it=ot[2]-Z[2];it>180?it-=360:it<-180&&(it+=360),(U(Z)||U(ot))&&(it=0);let wt=(((U(Z)&&!U(ot)?ot[2]:Z[2])+it*q)%360+360)%360;return qn(Z[0]+(ot[0]-Z[0])*q,Z[1]+(ot[1]-Z[1])*q,wt,Z[3]+(ot[3]-Z[3])*q)},T=h=>{if(n.length<=2)return;let w=n.indexOf(h);if(w<0)return;n.splice(w,1);let B=s===h?n[Math.max(0,w-1)]:s;E(),Y(B,!0),A(),P(),z(s)?.focus()},D=h=>{let w={color:K(h),pos:N(h,0,1)};return n.push(w),E(),Y(w,!0),A(),P(),w},v=()=>{let h=f(),w=h.indexOf(s);w<0&&(w=0);let B=w<h.length-1?(h[w].pos+h[w+1].pos)/2:w>0?(h[w-1].pos+h[w].pos)/2:N(h[w].pos+.1,0,1);D(B)};return m.addEventListener("click",h=>{h.stopPropagation(),v()}),p.addEventListener("dblclick",h=>{h.target.closest(".tw-gradient-stop")||(h.preventDefault(),D(J(h.clientX)))}),d.tabIndex=-1,d.addEventListener("keydown",h=>{(h.key==="Delete"||h.key==="Backspace")&&!/^(input|textarea|select)$/i.test(h.target.tagName)&&n.length>2&&(h.preventDefault(),T(s))}),Rt(o,r,d,{width:260,fallbackH:392,gap:6,onOpen:()=>j.reflow(),onReflow:()=>j.reflow()}),O(),E(),A(),{el:o,set:h=>{let w=Gn(h);w&&j.setMode(en(w));let B=Vn(h).sort((H,q)=>H.pos-q.pos);if(B.length===n.length)f().forEach((H,q)=>{H.color=B[q].color,H.pos=B[q].pos;let Z=z(H);Z&&(Z.style.left=H.pos*100+"%",Z.style.setProperty("--stop",H.color))});else{let H=s.pos;n=B,s=n.reduce((q,Z)=>Math.abs(Z.pos-H)<Math.abs(q.pos-H)?Z:q,n[0]),O()}E(),A(),j.set(s.color)},get:()=>I()}}rt("gradient",Js);function Qs(t,e){let n=t.label,s=+t.min,o=+t.max,r=+t.step,i=+(t.value&&t.value[0]),a=+(t.value&&t.value[1]);if(Number.isFinite(s)||(s=Number.isFinite(i)?i:0),Number.isFinite(o)||(o=Number.isFinite(a)?a:1),o<s){let v=s;s=o,o=v}(!(r>0)||r>o-s)&&(r=Ot(s,o));let u=Ht(r),d=v=>oe(v,s,r),c=N(d(Number.isFinite(i)?i:s),s,o),p=N(d(Number.isFinite(a)?a:o),s,o);if(c>p){let v=c;c=p,p=v}let l=g("div","tw-slider-wrap"),b=g("div","tw-slider tw-interval"),m=g("div","tw-slider-fill"),f=g("div","tw-slider-handle"),x=g("div","tw-slider-handle"),y=lt("span","tw-slider-label",n),S=g("span","tw-slider-value");b.append(m,f,x,y,S),l.append(b),[["minimum",f],["maximum",x]].forEach(([v,h])=>{h.tabIndex=0,h.setAttribute("role","slider"),h.setAttribute("aria-label",`${n} ${v}`),h.setAttribute("aria-valuemin",String(s)),h.setAttribute("aria-valuemax",String(o))});let E=v=>(v-s)/(o-s||1)*100,A=()=>{let v=E(c),h=E(p);m.style.left=v+"%",m.style.width=Math.max(0,h-v)+"%",f.style.left=`clamp(5px, calc(${v}% - 1.5px), calc(100% - 9px))`,x.style.left=`clamp(5px, calc(${h}% - 1.5px), calc(100% - 9px))`,S.textContent=`${c.toFixed(u)} \u2013 ${p.toFixed(u)}`,f.setAttribute("aria-valuenow",String(c)),x.setAttribute("aria-valuenow",String(p));let w=l.offsetWidth;if(w){let B=y.offsetLeft,H=B+y.offsetWidth,q=S.offsetLeft,Z=q+S.offsetWidth,ot=U=>{let it=U/100*w,wt=it-1.5,mt=it+1.5;return wt<H&&mt>B||wt<Z&&mt>q};f.classList.toggle("is-dodge",ot(E(c))),x.classList.toggle("is-dodge",ot(E(p)))}};A();let I=()=>e([c,p]),P=v=>{c=N(Math.min(d(v),p),s,o),A()},z=v=>{p=N(Math.max(d(v),c),s,o),A()},j=null,k=1,O=null,Y=null,J=v=>{let h=l.offsetWidth||j.width,w=N((v-j.left)/k/h,0,1);return N(s+w*(o-s),s,o)},K=v=>{let h=J(v);O||(O=h<c?"lo":h>p?"hi":Math.abs(h-c)<=Math.abs(h-p)?"lo":"hi"),O==="lo"?P(h):z(h),I()};b.addEventListener("pointerdown",v=>{if(!(v.button!==0||j)){v.preventDefault();try{v.target.setPointerCapture(v.pointerId)}catch{}Y=v.pointerId,j=l.getBoundingClientRect(),k=j.width/(l.offsetWidth||j.width),b.classList.add("is-active","is-dragging"),O=null,K(v.clientX),(O==="lo"?f:x).focus({focusVisible:!1})}}),b.addEventListener("pointermove",v=>{if(!(!j||v.pointerId!==Y)){if(v.buttons===0){T();return}K(v.clientX)}});let T=v=>{v&&v.pointerId!==Y||(j=null,O=null,Y=null,b.classList.remove("is-active","is-dragging"))};b.addEventListener("pointerup",T),b.addEventListener("pointercancel",T),b.addEventListener("lostpointercapture",T),me(b,A),St(A),Tt(b,[[window,"resize"],[window,"tw-reflow"]],A);let D=v=>h=>{let w=h.shiftKey?10:1,B=v==="lo"?c:p;switch(h.key){case"ArrowRight":case"ArrowUp":B+=r*w;break;case"ArrowLeft":case"ArrowDown":B-=r*w;break;case"Home":B=v==="lo"?s:c;break;case"End":B=v==="lo"?p:o;break;default:return}h.preventDefault(),v==="lo"?P(B):z(B),I()};return f.addEventListener("keydown",D("lo")),x.addEventListener("keydown",D("hi")),{el:l,set:v=>{if(Array.isArray(v)){let h=+v[0],w=+v[1];if(!Number.isFinite(h)||!Number.isFinite(w))return;c=N(d(Math.min(h,w)),s,o),p=N(d(Math.max(h,w)),s,o),A()}},get:()=>[c,p]}}rt("interval",Qs);var to=0;function eo(t){let e=`tw-tabs-${++to}`,n=g("div","tw-tabs"),s=g("div","tw-tabs-bar");s.setAttribute("role","tablist");let o=g("div","tw-tabs-pill");s.append(o);let r=g("div","tw-tabs-pages"),i=[],a=t.pages.map((c,p)=>{let l=lt("button","tw-tabs-tab",c.title);l.type="button",l.setAttribute("role","tab"),l.dataset.active=String(p===0),l.setAttribute("aria-selected",String(p===0)),l.tabIndex=p===0?0:-1,l.id=`${e}-tab-${p}`,l.setAttribute("aria-controls",`${e}-page-${p}`);let b=g("div","tw-tabs-page tw-controls");return b.dataset.active=String(p===0),b.setAttribute("role","tabpanel"),b.id=`${e}-page-${p}`,b.setAttribute("aria-labelledby",l.id),i.push(b),r.append(b),l.addEventListener("click",()=>d(p)),s.append(l),l});n.append(s,r);let u=c=>we(s,o,c);function d(c){a.forEach((p,l)=>{p.dataset.active=String(l===c),p.setAttribute("aria-selected",String(l===c)),p.tabIndex=l===c?0:-1}),i.forEach((p,l)=>p.dataset.active=String(l===c)),u(!0),requestAnimationFrame(()=>window.dispatchEvent(new Event("tw-reflow")))}return s.addEventListener("keydown",c=>{let p=a.findIndex(b=>b.dataset.active==="true");if(p<0)return;let l=ie(c.key,p,a.length,-1);l<0||(c.preventDefault(),d(l),a[l].focus())}),St(u),{el:n,bodies:i}}rt("tabs",eo);function no(t,e){let n=t.value||"",s=g("div","tw-row tw-image-row"),o=vt("tw-image-drop");o.setAttribute("aria-label",`${t.label}: choose an image`);let r=g("span","tw-image-thumb"),i=g("span","tw-image-text");o.append(r,i);let a=g("input","tw-image-input");a.type="file",a.accept="image/*",s.append(lt("span","tw-row-label",t.label),o,a);let u=()=>{o.dataset.set=n?"true":"false",r.style.backgroundImage=n?`url("${n}")`:"",i.textContent=n?"Replace":"Drop or choose"},d=c=>{if(!c||!c.type.startsWith("image/"))return;let p=new FileReader;p.onload=()=>{n=String(p.result),u(),e(n)},p.readAsDataURL(c)};return o.addEventListener("click",()=>a.click()),a.addEventListener("change",()=>{a.files[0]&&d(a.files[0])}),s.addEventListener("dragover",c=>{c.preventDefault(),s.dataset.over="true"}),s.addEventListener("dragleave",()=>{s.dataset.over="false"}),s.addEventListener("drop",c=>{c.preventDefault(),s.dataset.over="false",c.dataTransfer.files[0]&&d(c.dataTransfer.files[0])}),u(),{el:s,set:c=>{n=c||"",u()},get:()=>n}}rt("image",no);function so(t){let e=g("div","tw-fps"),n=lt("span","tw-fps-val","\u2014"),s=document.createElement("canvas");s.className="tw-fps-canvas",e.append(lt("span","tw-fps-label",t.label||"FPS"),n,s);let o=s.getContext("2d"),r=80,i=new Array(r).fill(0),a=120,u=0,d=0,c=0,p=0,l=0,b=!1,m=()=>{[p,l]=Xe(s,o,2)},f=()=>{if(p){o.clearRect(0,0,p,l),o.strokeStyle=re(e),o.lineWidth=1.5,o.lineJoin="round",o.beginPath();for(let y=0;y<r;y++){let S=i[(u+y)%r],E=y/(r-1)*p,A=l-Math.min(S/a,1)*l;y?o.lineTo(E,A):o.moveTo(E,A)}o.stroke()}},x=y=>{if(!s.isConnected){if(b){window.removeEventListener("resize",m),window.removeEventListener("tw-reflow",m),c=0;return}d=0,c=requestAnimationFrame(x);return}if(b||(b=!0,m()),d){let S=1e3/(y-d);i[u]=S,u=(u+1)%r,n.textContent=Math.round(S),f()}d=y,c=requestAnimationFrame(x)};return requestAnimationFrame(()=>{m(),c=requestAnimationFrame(x)}),window.addEventListener("resize",m),window.addEventListener("tw-reflow",m),It(e)}function oo(t){let e=typeof t.get=="function"?t.get:()=>t.value,n=Math.max(30,Number.isFinite(+t.interval)?+t.interval:200),s;try{s=e()}catch{}let o=typeof s=="number",r=t.view==="graph"||o&&t.graph!==!1&&t.view!=="text"&&t.rows==null,i=g("div","tw-fps tw-monitor"),a=lt("span","tw-fps-val","\u2014");i.append(lt("span","tw-fps-label",t.label||"Monitor"),a);let u=0,d=()=>{},c=!1,p=P=>typeof P=="number"?Number.isInteger(P)?String(P):P.toFixed(t.decimals??2):String(P),l=()=>{u&&clearInterval(u),u=0,window.removeEventListener("resize",d),window.removeEventListener("tw-reflow",d)},b=P=>{u=setInterval(()=>{if(!i.isConnected){c&&l();return}c=!0;let z;try{z=e()}catch{return}P(z)},n)};if(!r&&t.rows){a.remove();let P=Math.max(1,Math.floor(+t.rows)||1),z=g("pre","tw-monitor-buffer");z.style.setProperty("--tw-monitor-rows",P),i.append(z);let j=[];return b(k=>{for(j.push(p(k));j.length>P;)j.shift();z.textContent=j.join(`
|
|
2
|
+
`)}),It(i)}if(!r)return b(P=>{a.textContent=p(P)}),It(i);let m=document.createElement("canvas");m.className="tw-fps-canvas",i.append(m);let f=m.getContext("2d"),x=80,y=new Array(x).fill(NaN),S=0,E=0,A=0;d=()=>{[E,A]=Xe(m,f,2)};let I=()=>{if(E||d(),!E)return;let P=t.min,z=t.max;if(P==null||z==null){let O=1/0,Y=-1/0;for(let K of y)Number.isNaN(K)||(K<O&&(O=K),K>Y&&(Y=K));O===1/0?(O=0,Y=1):O===Y&&(O-=.5,Y+=.5);let J=(Y-O)*.1;P==null&&(P=O-J),z==null&&(z=Y+J)}let j=z-P||1;f.clearRect(0,0,E,A),f.strokeStyle=re(i),f.lineWidth=1.5,f.lineJoin="round",f.beginPath();let k=!1;for(let O=0;O<x;O++){let Y=y[(S+O)%x];if(Number.isNaN(Y))continue;let J=O/(x-1)*E,K=A-N((Y-P)/j,0,1)*A;k?f.lineTo(J,K):(f.moveTo(J,K),k=!0)}f.stroke()};return b(P=>{typeof P=="number"&&(y[S]=P,S=(S+1)%x,a.textContent=p(P),I())}),requestAnimationFrame(()=>{d(),I()}),window.addEventListener("resize",d),window.addEventListener("tw-reflow",d),It(i)}rt("fpsgraph",so);rt("monitor",oo);function ro(t,e,n,s=64){let o=Math.sqrt(t/n),r=e/(2*Math.sqrt(t*n)),i=Math.min(2.2,9/Math.max(r*o,.5)),a=[];for(let u=0;u<s;u++){let d=u/(s-1)*i,c;if(r<1-1e-4){let p=o*Math.sqrt(1-r*r);c=1-Math.exp(-r*o*d)*(Math.cos(p*d)+r*o/p*Math.sin(p*d))}else if(r<=1+1e-4)c=1-Math.exp(-o*d)*(1+o*d);else{let p=Math.sqrt(r*r-1),l=o*(r+p),b=o*(r-p);c=1-(l*Math.exp(-b*d)-b*Math.exp(-l*d))/(l-b)}a.push(c)}return a}function io(t,e){let n=(E,A,I)=>Number.isFinite(+E)?Math.max(A,+E):I,s=E=>({stiffness:n(E.stiffness,1,300),damping:n(E.damping,.5,26),mass:n(E.mass,.1,1)}),o=s({stiffness:300,damping:26,mass:1,...t.value||{}}),r=g("div","tw-spring"),i=g("div","tw-spring-viz"),a=document.createElement("canvas");a.className="tw-spring-canvas",i.append(a);let u=g("div","tw-fields");r.append(i,u);let d=a.getContext("2d"),c=()=>{let E=i.getBoundingClientRect(),A=Math.max(1,Math.round(E.width)),I=Math.max(1,Math.round(E.height));if(A<2)return;let P=window.devicePixelRatio||1;a.width=A*P,a.height=I*P,d.setTransform(P,0,0,P,0,0),d.clearRect(0,0,A,I);let z=ro(o.stiffness,o.damping,o.mass,Math.max(160,Math.round(A*P))),j=Math.max(1.05,...z),k=6,O=J=>k+J/(z.length-1)*(A-2*k),Y=J=>I-k-J/j*(I-2*k);d.strokeStyle=bn(r,"--tw-surface-active")||"rgba(255,255,255,0.1)",d.lineWidth=1,d.beginPath(),d.moveTo(k,Y(1)),d.lineTo(A-k,Y(1)),d.stroke(),d.strokeStyle=re(r),d.lineWidth=1.5,d.lineJoin=d.lineCap="round",d.beginPath(),z.forEach((J,K)=>K?d.lineTo(O(K),Y(J)):d.moveTo(O(K),Y(J))),d.stroke()},p=()=>e({...o}),l={};[["stiffness","Stiffness",1],["damping","Damping",.5],["mass","Mass",.1]].forEach(([E,A,I])=>{l[E]=_t({label:A,value:o[E],step:I,min:I},P=>{o[E]=P,c(),p()}),u.append(l[E].el)});let b=1,m=500,f=1,x=40,y=null,S=E=>{if(!y)return;let A=N((E.clientX-y.left)/y.width,0,1),I=N((E.clientY-y.top)/y.height,0,1);o.stiffness=Math.round(b+A*(m-b)),o.damping=Math.round((f+I*(x-f))*10)/10,l.stiffness.set(o.stiffness),l.damping.set(o.damping),c(),p()};return qt(i,{onDown:E=>{E.preventDefault(),y=i.getBoundingClientRect(),i.classList.add("is-dragging"),S(E)},onMove:S,onEnd:()=>{y=null,i.classList.remove("is-dragging")}}),St(c),Tt(a,[[window,"resize"],[window,"tw-reflow"],[matchMedia("(prefers-color-scheme: dark)"),"change"],[window,"tw-retheme"]],c),{el:r,set:E=>{o=s({...o,...E||{}}),Object.keys(l).forEach(A=>l[A].set(o[A])),c()},get:()=>({...o})}}rt("spring",io);function ao(t,e){let n=[.25,.1,.25,1],s=Array.isArray(t.value)&&t.value.length===4?t.value.map(Number):n.slice();s.some(T=>!Number.isFinite(T))&&(s=n.slice());let o=-.25,r=1.25,i=r-o,a=8,u=g("div","tw-bezier"),d=g("div","tw-bezier-graph"),c=Et("svg","tw-bezier-svg");c.setAttribute("preserveAspectRatio","none");let p=Et("line","tw-bezier-guide"),l=Et("line","tw-bezier-guide"),b=Et("line","tw-bezier-diag"),m=Et("line","tw-bezier-ctl"),f=Et("line","tw-bezier-ctl"),x=Et("path","tw-bezier-curve");c.append(p,l,b,m,f,x);let y=vt("tw-bezier-handle");y.setAttribute("aria-label","Control point 1");let S=vt("tw-bezier-handle");S.setAttribute("aria-label","Control point 2"),d.append(c,y,S);let E=g("div","tw-fields tw-bezier-fields");u.append(d,E);let A=0,I=0,P=T=>a+T*(A-2*a),z=T=>I-a-(T-o)/i*(I-2*a),j=(T,D,v,h,w)=>{T.setAttribute("x1",D),T.setAttribute("y1",v),T.setAttribute("x2",h),T.setAttribute("y2",w)},k=()=>{if(A=d.offsetWidth,I=d.offsetHeight,A<2)return;c.setAttribute("viewBox",`0 0 ${A} ${I}`);let[T,D,v,h]=s,w=P(0),B=z(0),H=P(1),q=z(1),Z=P(T),ot=z(D),U=P(v),it=z(h);j(p,a,B,A-a,B),j(l,a,q,A-a,q),j(b,w,B,H,q),j(m,w,B,Z,ot),j(f,H,q,U,it),x.setAttribute("d",`M${w},${B} C${Z},${ot} ${U},${it} ${H},${q}`),y.style.left=Z+"px",y.style.top=ot+"px",S.style.left=U+"px",S.style.top=it+"px"},O=[{label:"X1",i:0,lo:0,hi:1},{label:"Y1",i:1,lo:o,hi:r},{label:"X2",i:2,lo:0,hi:1},{label:"Y2",i:3,lo:o,hi:r}],Y=O.map(T=>{let D=_t({label:T.label,value:s[T.i],step:.01,min:T.lo,max:T.hi},v=>{s[T.i]=v,k(),e(s.slice())});return E.append(D.el),D}),J=()=>Y.forEach((T,D)=>T.set(s[O[D].i])),K=(T,D)=>{let v=null,h=0,w=0,B=1;qt(T,{onDown:H=>{H.preventDefault(),v=d.getBoundingClientRect(),h=d.offsetWidth||v.width,w=d.offsetHeight||v.height,B=v.width/h,T.classList.add("is-dragging"),T.focus({focusVisible:!1})},onMove:H=>{let q=(H.clientX-v.left)/B,Z=(H.clientY-v.top)/B,ot=N((q-a)/(h-2*a),0,1),U=N(o+(w-a-Z)/(w-2*a)*i,o,r);s[D*2]=+ot.toFixed(2),s[D*2+1]=+U.toFixed(2),k(),J(),e(s.slice())},onEnd:()=>{v=null,T.classList.remove("is-dragging")}})};return K(y,0),K(S,1),St(k),Tt(u,[[window,"resize"],[window,"tw-reflow"]],k),{el:u,set:T=>{if(Array.isArray(T)&&T.length===4){let D=T.map(Number);if(D.some(v=>!Number.isFinite(v)))return;s=D.map((v,h)=>N(v,O[h].lo,O[h].hi)),k(),J()}},get:()=>s.slice()}}rt("cubicbezier",ao);function lo(t,e){let n=t.components,{root:s,trigger:o,right:r}=Zt("tw-point",t.label||"Point"),i=g("span","tw-trigger-value"),a=g("div","tw-trigger-chip tw-point-preview"),u=g("div","tw-point-preview-dot");a.append(u),r.append(i,a);let d=g("div","tw-color-pop tw-point-pop"),c=g("div","tw-point-body");d.append(c);let p=t.pad!==!1&&n.length>=2,l=n[0],b=n[1],m=l?.min??-1,f=l?.max??1,x=b?.min??-1,y=b?.max??1,S=(T,D,v)=>v>D?N((T-D)/(v-D),0,1):.5,E=null,A=null,I=null;if(p){E=g("div","tw-pad"),A=g("div","tw-pad-thumb");let T=Et("svg","tw-pad-line");T.setAttribute("viewBox","0 0 100 100"),T.setAttribute("preserveAspectRatio","none"),I=Et("line"),T.append(I);let D=S(0,x,y);I.setAttribute("x1",S(0,m,f)*100),I.setAttribute("y1",(t.invertY?D:1-D)*100),E.append(g("div","tw-pad-axis tw-pad-axis-x"),g("div","tw-pad-axis tw-pad-axis-y"),T,A),c.append(E)}let P=g("div","tw-fields");c.append(P);let z=()=>{K(),J()},j=()=>e(O()),k=n.map(T=>{let D=_t({label:T.label,value:T.value??0,step:T.step??1,min:T.min,max:T.max},()=>{z(),j()});return P.append(D.el),D}),O=()=>Object.fromEntries(n.map((T,D)=>[T.key,k[D].get()])),Y=(T,D)=>(+T).toFixed(Ht(D??1)),J=()=>{i.textContent=n.map((T,D)=>Y(k[D].get(),T.step)).join(", ")},K=()=>{u.style.left="50%",u.style.top="50%"};if(p){let D=h=>`calc(${(h*100).toFixed(2)}% + ${((.5-h)*5).toFixed(2)}px)`;K=()=>{let h=S(k[0].get(),m,f),w=S(k[1].get(),x,y),B=t.invertY?w:1-w,H=h*100,q=B*100;A.style.left=H+"%",A.style.top=q+"%",u.style.left=D(h),u.style.top=D(B),I.setAttribute("x2",H),I.setAttribute("y2",q)},Kt(E,h=>{let[w,B]=Ut(h,E),H=t.invertY?B:1-B;k[0].set(m+w*(f-m)),k[1].set(x+H*(y-x)),z(),j()})}return s.append(d),Rt(s,o,d,{width:216,fallbackH:240,gap:6,onOpen:z}),z(),{el:s,set:T=>{T&&n.forEach((D,v)=>{T[D.key]!=null&&k[v].set(T[D.key])}),z()},get:O}}rt("point",lo);var co=Object.assign(Object.create(null),{sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,atan2:Math.atan2,sinh:Math.sinh,cosh:Math.cosh,tanh:Math.tanh,sqrt:Math.sqrt,cbrt:Math.cbrt,abs:Math.abs,exp:Math.exp,log:Math.log,ln:Math.log,log10:Math.log10,log2:Math.log2,floor:Math.floor,ceil:Math.ceil,round:Math.round,sign:Math.sign,trunc:Math.trunc,min:Math.min,max:Math.max,pow:Math.pow,hypot:Math.hypot,mod:(t,e)=>t%e,clamp:(t,e,n)=>Math.min(Math.max(t,e),n)}),Kn=Object.assign(Object.create(null),{pi:Math.PI,e:Math.E,tau:Math.PI*2,phi:(1+Math.sqrt(5))/2});function an(t){if(typeof t!="string"||!t.trim()||t.length>512)return null;let e=t,n=[],s=/\d*\.?\d+(?:[eE][+-]?\d+)?/y,o=/[A-Za-z_]\w*/y,r=0;for(;r<e.length;){let f=e[r];if(f===" "||f===" "||f===`
|
|
3
|
+
`){r++;continue}if(f>="0"&&f<="9"||f==="."&&e[r+1]>="0"&&e[r+1]<="9"){s.lastIndex=r;let x=s.exec(e);if(!x||x.index!==r)return null;n.push({t:"num",v:parseFloat(x[0])}),r=s.lastIndex;continue}if(f>="A"&&f<="Z"||f>="a"&&f<="z"||f==="_"){o.lastIndex=r;let x=o.exec(e);n.push({t:"id",v:x[0]}),r=o.lastIndex;continue}if(f==="*"&&e[r+1]==="*"){n.push({t:"op",v:"^"}),r+=2;continue}if("+-*/%^".includes(f)){n.push({t:"op",v:f}),r++;continue}if(f==="("){n.push({t:"lp"}),r++;continue}if(f===")"){n.push({t:"rp"}),r++;continue}if(f===","){n.push({t:"comma"}),r++;continue}return null}if(!n.length)return null;let i=0,a=()=>n[i],u=f=>{let x=n[i];return!x||f&&x.t!==f?null:(i++,x)},d=()=>{let f=c();if(!f)return null;for(;a()&&a().t==="op"&&(a().v==="+"||a().v==="-");){let x=u("op").v,y=c();if(!y)return null;let S=f;f=x==="+"?E=>S(E)+y(E):E=>S(E)-y(E)}return f},c=()=>{let f=p();if(!f)return null;for(;a()&&a().t==="op"&&(a().v==="*"||a().v==="/"||a().v==="%");){let x=u("op").v,y=p();if(!y)return null;let S=f;f=x==="*"?E=>S(E)*y(E):x==="/"?E=>S(E)/y(E):E=>S(E)%y(E)}return f},p=()=>{if(a()&&a().t==="op"&&(a().v==="-"||a().v==="+")){let f=u("op").v,x=p();return x?f==="-"?y=>-x(y):x:null}return l()},l=()=>{let f=b();if(!f)return null;if(a()&&a().t==="op"&&a().v==="^"){u("op");let x=p();return x?y=>Math.pow(f(y),x(y)):null}return f},b=()=>{let f=a();if(!f)return null;if(f.t==="num")return u("num"),()=>f.v;if(f.t==="lp"){u("lp");let x=d();return!x||!u("rp")?null:x}if(f.t==="id"){u("id");let x=f.v.toLowerCase();if(a()&&a().t==="lp"){let y=co[x];if(!y)return null;u("lp");let S=[];if(a()&&a().t!=="rp")do{let E=d();if(!E)return null;S.push(E)}while(u("comma"));return u("rp")?E=>y(...S.map(A=>A(E))):null}if(x==="x")return y=>y;if(x in Kn){let y=Kn[x];return()=>y}return null}return null},m=d();return m&&i===n.length?m:null}function uo(t,e){let n=Number(t.xMin),s=Number(t.xMax);if(Number.isFinite(n)||(n=-10),Number.isFinite(s)||(s=10),s<n){let S=n;n=s,s=S}s===n&&(n-=1,s+=1);let o=Math.max(2,Math.min(4096,t.samples|0||256)),r=Number.isFinite(t.yMin)&&Number.isFinite(t.yMax)&&+t.yMax>+t.yMin,i=t.editable!==!1&&!t.fn,a=t.expr!=null?String(t.expr):"",u=typeof t.fn=="function"?t.fn:an(a),d=g("div","tw-plot");t.label&&d.append(lt("div","tw-plot-label",t.label));let c=g("div","tw-plot-graph"),p=Et("svg","tw-plot-svg");p.setAttribute("preserveAspectRatio","none");let l=Et("line","tw-plot-axis"),b=Et("line","tw-plot-axis"),m=Et("path","tw-plot-curve");p.append(l,b,m),c.append(p),d.append(c);let f=null;if(i){let S=g("div","tw-plot-field");f=g("input","tw-plot-input"),f.type="text",f.value=a,f.spellcheck=!1,f.autocapitalize="off",f.autocomplete="off",f.setAttribute("aria-label",`${t.label||"Plot"} \u2014 expression in x`),S.append(g("span","tw-plot-fx","y ="),f),d.append(S)}let x=6,y=()=>{let S=c.getBoundingClientRect(),E=S.width,A=S.height;if(E<2)return;p.setAttribute("viewBox",`0 0 ${E} ${A}`);let I=typeof u=="function",P=[],z=1/0,j=-1/0;if(I)for(let v=0;v<o;v++){let h=n+(s-n)*(v/(o-1)),w;try{w=u(h)}catch{w=NaN}P.push(w),Number.isFinite(w)&&(w<z&&(z=w),w>j&&(j=w))}let k=t.yMin,O=t.yMax;if(!r)if(!Number.isFinite(z)||z===j){let v=Number.isFinite(z)?z:0;k=v-1,O=v+1}else{let v=(j-z)*.12;k=z-v,O=j+v}let Y=v=>x+(v-n)/(s-n)*(E-2*x),J=v=>A-x-(v-k)/(O-k)*(A-2*x),K=(v,h,w,B,H,q)=>{v.style.display=q?"":"none",q&&(v.setAttribute("x1",h),v.setAttribute("y1",w),v.setAttribute("x2",B),v.setAttribute("y2",H))};K(l,x,J(0),E-x,J(0),k<=0&&O>=0),K(b,Y(0),x,Y(0),A-x,n<=0&&s>=0);let T="",D=!1;if(I)for(let v=0;v<o;v++){let h=P[v];if(!Number.isFinite(h)){D=!1;continue}let w=Y(n+(s-n)*(v/(o-1))),B=N(J(h),-1e4,1e4);T+=(D?"L":"M")+w.toFixed(1)+","+B.toFixed(1)+" ",D=!0}m.setAttribute("d",T),d.classList.toggle("is-invalid",i&&!I)};return i&&f.addEventListener("input",()=>{a=f.value;let S=an(a);S?u=S:u=null,y(),e(a)}),St(y),Tt(d,[[window,"resize"],[window,"tw-reflow"]],y),{el:d,get:()=>a,set:S=>{S!=null&&(a=String(S),f&&(f.value=a),t.fn||(u=an(a)),y())}}}rt("plot",uo);var ln={},_e={},po=t=>ve(t)||!ln[t]?null:_e[t]||(_e[t]=ln[t]().catch(e=>{throw delete _e[t],console.error(`[tweaks] control chunk "${t}" failed to load:`,e),e})),cn=(t,e=new Set)=>{for(let n of t)if(n&&(ln[n.type]&&e.add(n.type),n.children&&cn(n.children,e),n.pages))for(let s of n.pages)cn(s.children,e);return e},ls=t=>{let e=[...cn(t)].map(po).filter(Boolean);return e.length?Promise.all(e):null};function Fe(t,e,n=0){if(t==="__proto__"||t==="constructor"||t==="prototype")return null;let s=fo(t,e,n);return s&&e&&typeof e=="object"&&(typeof e.render=="function"&&(s.render=e.render),e.disabled!=null&&(s.disabled=e.disabled),e.hint!=null&&(s.hint=String(e.hint))),s}var Vt=t=>t&&typeof t=="object",un=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Un=(t,e)=>t!==e&&!(Vt(t)&&Vt(e)&&JSON.stringify(t)===JSON.stringify(e)),Zn=(t,e,n)=>Array.isArray(t.options)&&{type:"radiogrid",key:e,label:n,options:t.options,value:t.value??Pt(t.options[0]),cols:t.cols},Jn={slider:(t,e,n)=>{let s=t.min??0,o=t.max??1;return{type:"slider",key:e,label:n,value:t.value??s,min:s,max:o,step:t.step??Ot(s,o),soft:t.soft}},number:(t,e,n)=>({type:"number",key:e,label:n,value:t.value??0,min:t.min,max:t.max,step:t.step??1,soft:t.soft}),checkbox:(t,e,n)=>({type:"checkbox",key:e,label:n,value:!!t.value}),radiogrid:Zn,segmented:Zn,list:(t,e,n)=>Array.isArray(t.options)&&{type:"list",key:e,label:n,options:t.options,value:t.value??Pt(t.options[0])},color:(t,e,n)=>({type:"color",key:e,label:t.label||n,value:t.value}),text:(t,e,n)=>({type:"text",key:e,label:n,value:t.value??"",rows:t.rows,placeholder:t.placeholder}),interval:(t,e,n)=>{let s=t.min??0,o=t.max??1;return{type:"interval",key:e,label:n,value:(Array.isArray(t.value)?t.value:[s,o]).map(Number),min:s,max:o,step:t.step??Ot(s,o)}},spring:(t,e,n)=>{let s=Vt(t.value)?t.value:t;return{type:"spring",key:e,label:n,value:{stiffness:s.stiffness??300,damping:s.damping??26,mass:s.mass??1}}},cubicbezier:(t,e,n)=>({type:"cubicbezier",key:e,label:n,value:Array.isArray(t.value)&&t.value.length===4?t.value.map(Number):[.25,.1,.25,1]}),point:(t,e,n)=>Array.isArray(t.components)&&{type:"point",key:e,label:n,components:t.components,pad:t.pad,invertY:t.invertY,value:Object.fromEntries(t.components.map(s=>[s.key,s.value??0]))},gradient:(t,e,n)=>({type:"gradient",key:e,label:n,value:t.value??t.stops??null}),image:(t,e,n)=>({type:"image",key:e,label:n,value:t.value||""}),plot:(t,e,n)=>{let s=t.expr!=null?String(t.expr):typeof t.fn=="function"?"":"sin(x)";return{type:"plot",key:e,label:n,value:s,expr:s,fn:typeof t.fn=="function"?t.fn:null,xMin:t.xMin??t.min??-10,xMax:t.xMax??t.max??10,yMin:t.yMin,yMax:t.yMax,samples:t.samples,editable:t.editable}},fpsgraph:(t,e,n)=>({type:"fpsgraph",key:e,label:t.label||n}),monitor:(t,e,n)=>({type:"monitor",key:e,label:n,get:t.get,value:t.value,graph:t.graph,view:t.view,min:t.min,max:t.max,interval:t.interval,rows:t.rows,decimals:t.decimals}),buttongroup:(t,e,n)=>({type:"buttongroup",key:e,label:n,buttons:t.buttons}),separator:(t,e,n)=>({type:"separator",key:e,label:n}),tabs:(t,e,n,s)=>{if(!t.pages||typeof t.pages!="object")return!1;let o=new Set;return{type:"tabs",key:e,label:n,pages:Object.entries(t.pages).map(([r,i])=>{let a=r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"tab",u=a,d=2;for(;o.has(u);)u=`${a}-${d++}`;return o.add(u),{key:u,title:r,children:Object.entries(i).map(([c,p])=>Fe(c,p,(s||0)+1)).filter(Boolean)}})}}};function fo(t,e,n=0){if(n>64)return null;let s=he(t);if(Vt(e)&&!Array.isArray(e)&&un(Jn,e.type)){let o;try{o=Jn[e.type](e,t,s,n)}catch(r){return console.error(`[tweaks] malformed "${e.type}" schema value for "${t}" \u2014 control skipped:`,r),null}if(o)return o}if(Array.isArray(e)&&Array.isArray(e[0])&&e[0].length===2&&typeof e[0][0]=="number"){let o=Number.isFinite(+e[1])?+e[1]:+e[0][0],r=Number.isFinite(+e[2])?+e[2]:+e[0][1];return{type:"interval",key:t,label:s,value:e[0].map(Number),min:o,max:r,step:e[3]??Ot(o,r)}}if(Array.isArray(e)&&e.length<=4&&typeof e[0]=="number"){let o=e[0],[r,i]=De(o),a=e.length>1?e[1]:r,u=e.length>2?e[2]:i;return{type:"slider",key:t,label:s,value:o,min:a,max:u,step:e[3]??Ot(a,u)}}if(typeof e=="number"){let[o,r]=De(e);return{type:"slider",key:t,label:s,value:e,min:o,max:r,step:Ot(o,r)}}return typeof e=="boolean"?{type:"checkbox",key:t,label:s,value:e}:Array.isArray(e)?{type:"list",key:t,label:s,options:e,value:Pt(e[0])}:Vt(e)&&typeof e.action=="function"?{type:"button",key:t,label:e.label||s,action:e.action}:Vt(e)&&Array.isArray(e.options)?{type:"list",key:t,label:s,options:e.options,value:e.value??Pt(e.options[0])}:gn(e)?{type:"color",key:t,label:s,value:e}:typeof e=="string"?{type:"text",key:t,label:s,value:e}:Vt(e)?{type:"folder",key:t,label:s,children:Object.entries(e).filter(([o,r])=>!(o==="render"&&typeof r=="function")&&!((o==="disabled"||o==="hint")&&r!=null)).map(([o,r])=>Fe(o,r,n+1)).filter(Boolean)}:null}var ho=3,Qn=32,ts=200,es=8;function mo(t,e){let n=t.label,s=+t.min,o=+t.max,r=+t.step;if(Number.isFinite(s)||(s=0),Number.isFinite(o)||(o=s+100),o<s){let L=s;s=o,o=L}(!(r>0)||r>o-s)&&(r=Ot(s,o));let i=(o-s)/r<=6,a=Number.isFinite(+t.value)?+t.value:s,u=t.soft&&!i?a:N(a,s,o),d=0,c=Ht(r),p=g("div","tw-slider-wrap"),l=g("div","tw-slider"),b=g("div","tw-slider-hashmarks"),m=g("div","tw-slider-fill"),f=g("div","tw-slider-handle"),x=lt("span","tw-slider-label",n),y=g("span","tw-slider-value");l.append(b,m,f,x,y),p.append(l),l.tabIndex=0,l.setAttribute("role","slider"),l.setAttribute("aria-label",n),l.setAttribute("aria-valuemin",String(s)),l.setAttribute("aria-valuemax",String(o));let S=L=>oe(L,s,r),E=i?Array.from({length:Math.max(0,Math.round((o-s)/r)-1)},(L,G)=>(G+1)*r/(o-s)*100):[];for(let L of E){let G=g("div","tw-slider-hashmark");G.style.left=L+"%",b.append(G)}let A=()=>{let L=N((u-s)/(o-s||1)*100,0,100),G=d?` + ${d.toFixed(1)}px`:"",Q=`${L}%${G}`;m.style.width=d?`calc(${Q})`:L+"%",f.style.left=`max(5px, calc(${Q} - 9px))`;let gt=S(u),ft=gt.toFixed(c);y.textContent=ft,l.setAttribute("aria-valuenow",String(gt)),l.setAttribute("aria-valuetext",ft);let At=p.offsetWidth;if(At){let _=Math.max(5,L/100*At+d-9),et=0,V=x.offsetLeft,tt=V+x.offsetWidth,$=y.offsetLeft,M=$+y.offsetWidth,R=_<tt&&_+3>V,F=_<M+et&&_+3>$-et;l.classList.toggle("is-dodge",R||F)}};A();let I=null,P=1,z=null,j=!0,k,O=null,Y=null,J="width 0.34s cubic-bezier(0.34,1.2,0.64,1)",K="left 0.34s cubic-bezier(0.34,1.2,0.64,1), opacity 0.15s, transform 0.2s cubic-bezier(0.22,1,0.36,1)",T=.2,D=L=>{if(!I)return u;let G=p.offsetWidth||I.width,Q=N((L-I.left)/P/G,0,1);return N(s+Q*(o-s),s,o)},v=L=>{let G=0;L<I.left?G=-es*Math.sqrt(Math.min(Math.max(0,I.left-L-Qn)/ts,1)):L>I.right&&(G=es*Math.sqrt(Math.min(Math.max(0,L-I.right-Qn)/ts,1))),l.style.width=`calc(100% + ${Math.abs(G)}px)`,l.style.transform=G<0?`translateX(${G}px)`:""},h=(L,G=!0)=>{L=+L,Number.isFinite(L)&&(u=i?N(S(L),s,o):t.soft?L:N(L,s,o),A(),G&&e(S(u)))},w=Math.max(1,Math.round((o-s)/r)),B=.2,H=.3,q=520,Z=27,ot=L=>(L-s)/r,U=0,it=0,wt=0,mt=!1,Dt=null,zt=u,bt=0,yt=()=>{wt&&cancelAnimationFrame(wt),wt=0,bt=0},X=L=>{if(!l.isConnected){yt();return}let G=bt?Math.min((L-bt)/1e3,.05):1/60;bt=L;let Q=p.offsetWidth||I&&I.width||1,gt=ot(N(zt,s,o)),ft=N(Math.round(gt+B),0,w),At=mt?ft+H*N(gt-ft,-.5,.5):ft,xt=G,Yt=1/240;for(;xt>1e-4;){let _=Math.min(Yt,xt);xt-=_;let et=q*(At-U)-Z*it;it+=et*_,U+=it*_,U<0&&(U=0,it=0),U>w&&(U=w,it=0)}d=(U-ft)*r/(o-s||1)*Q,u=N(s+ft*r,s,o),A(),ft!==Dt&&(Dt=ft,e(S(u))),!mt&&Math.abs(it)<.004&&Math.abs(U-ft)<.004?(U=ft,it=0,d=0,A(),yt(),l.classList.remove("is-active")):wt=requestAnimationFrame(X)},W=L=>{U=ot(u),it=0,mt=!0,Dt=Math.round(ot(u)),zt=D(L),wt||(wt=requestAnimationFrame(X))};l.addEventListener("pointerdown",L=>{if(!y.classList.contains("is-editing")&&!(L.button!==0||z)){L.preventDefault(),l.focus({focusVisible:!1}),Y=L.pointerId;try{L.target.setPointerCapture(L.pointerId)}catch{}clearTimeout(k),l.style.transition="",z={x:L.clientX,y:L.clientY},j=!0,l.classList.add("is-active"),I=p.getBoundingClientRect(),P=I.width/(p.offsetWidth||I.width),i?(m.style.transition="",f.style.transition="",W(L.clientX)):(m.style.transition=J,f.style.transition=K,h(D(L.clientX)))}}),l.addEventListener("pointermove",L=>{if(!(!z||L.pointerId!==Y)){if(L.buttons===0){st();return}if(j&&Math.hypot(L.clientX-z.x,L.clientY-z.y)>ho&&(j=!1,l.classList.add("is-dragging"),i||(m.style.transition="",f.style.transition="")),!j)if(v(L.clientX),i)zt=D(L.clientX);else{let G;if(L.altKey){O||(O={x:L.clientX,v:u});let Q=p.offsetWidth||I.width;G=N(O.v+(L.clientX-O.x)/Q*(o-s)*T,s,o)}else O=null,G=D(L.clientX);h(G)}L.clientX>=I.left&&L.clientX<=I.right&&(l.style.width="",l.style.transform="")}});let st=L=>{!z||L&&L.pointerId!==Y||(i?(mt=!1,l.classList.remove("is-dragging"),wt||(wt=requestAnimationFrame(X))):(k=setTimeout(()=>{m.style.transition="",f.style.transition=""},360),l.classList.remove("is-active","is-dragging")),l.style.transition="width 0.35s cubic-bezier(0.22,1,0.36,1), transform 0.35s cubic-bezier(0.22,1,0.36,1)",l.style.width="",l.style.transform="",setTimeout(()=>{l.style.transition=""},360),z=null,O=null,Y=null)};l.addEventListener("pointerup",st),l.addEventListener("pointercancel",st),l.addEventListener("lostpointercapture",st),me(l,A),St(A),Tt(l,[[window,"resize"]],A),l.addEventListener("keydown",L=>{i&&(yt(),d=0);let G=L.shiftKey?10:1,Q=(o-s)/10||r*10,gt=u;switch(L.key){case"ArrowRight":case"ArrowUp":gt=u+r*G;break;case"ArrowLeft":case"ArrowDown":gt=u-r*G;break;case"PageUp":gt=u+Q;break;case"PageDown":gt=u-Q;break;case"Home":gt=s;break;case"End":gt=o;break;default:return}L.preventDefault(),h(N(gt,s,o))});let pt;return y.addEventListener("mouseenter",()=>{pt=setTimeout(()=>y.classList.add("is-editable"),800)}),y.addEventListener("mouseleave",()=>{clearTimeout(pt),y.classList.contains("is-editing")||y.classList.remove("is-editable")}),y.addEventListener("pointerdown",L=>{L.pointerType&&L.pointerType!=="mouse"?(y.classList.add("is-editable"),L.stopPropagation()):y.classList.contains("is-editable")&&L.stopPropagation()}),y.addEventListener("click",()=>{if(!y.classList.contains("is-editable"))return;let L=g("input","tw-slider-input");L.type="text",L.inputMode="decimal",L.value=S(u).toFixed(c),y.classList.add("is-editing"),y.replaceWith(L),L.focus(),L.select();let G=()=>{let Q=parseFloat(L.value);isNaN(Q)||h(t.soft?Q:N(Q,s,o)),L.replaceWith(y),y.classList.remove("is-editing","is-editable")};L.addEventListener("pointerdown",Q=>Q.stopPropagation()),L.addEventListener("blur",G),L.addEventListener("keydown",Q=>{Q.key==="Enter"?G():Q.key==="Escape"&&(L.replaceWith(y),y.classList.remove("is-editing","is-editable"))})}),{el:p,set:L=>h(L,!1),get:()=>S(u)}}function go(t,e,n,s){let o=g("div","tw-seg");o.setAttribute("role","radiogroup"),s&&o.setAttribute("aria-label",s);let r=g("div","tw-seg-pill");o.append(r);let i=t.map(c=>{let p=Ge("tw-seg-btn",c,l=>d(l));return o.append(p),p}),a=c=>we(o,r,c),u=()=>{qe(i,e),a(!0)},d=(c,p=!0)=>{e=c,u(),p&&n(c)};return o.addEventListener("keydown",c=>{let p=i.findIndex(b=>b.dataset.value===String(e));if(p<0)return;let l=ie(c.key,p,i.length);l<0||(c.preventDefault(),d(i[l]._twVal),i[l].focus())}),u(),St(()=>{a(),o.classList.add("is-ready")}),{el:o,set:c=>d(c,!1),get:()=>e}}function bo(t,e){let n=g("div","tw-row"),s=go([{value:"off",label:"Off"},{value:"on",label:"On"}],t.value?"on":"off",o=>e(o==="on"),t.label);return n.append(lt("span","tw-row-label",t.label),s.el),{el:n,set:o=>s.set(o?"on":"off"),get:()=>s.get()==="on"}}function wo(t,e){let n=t.options||[],s=Math.min(3,Math.max(2,t.cols||(n.length<=3?n.length:n.length===4?2:3))),o=g("div","tw-radiogrid"),r=g("div","tw-radiogrid-grid");r.style.setProperty("--tw-rg-cols",s),r.setAttribute("role","radiogroup"),r.setAttribute("aria-label",t.label);let i=t.value??Pt(n[0]),a=n.map(c=>{let p=Ge("tw-radiogrid-btn",c,l=>d(l));return r.append(p),p}),u=()=>qe(a,i),d=(c,p=!0)=>{i=c,u(),p&&e(c)};return r.addEventListener("keydown",c=>{let p=a.findIndex(b=>b.dataset.value===String(i));if(p<0)return;let l=ie(c.key,p,a.length,s);l<0||(c.preventDefault(),l!==p&&(d(a[l]._twVal),a[l].focus()))}),u(),o.append(lt("span","tw-radiogrid-label",t.label),r),{el:o,set:c=>d(c,!1),get:()=>i}}var vo='<svg class="tw-select-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>';function yo(t,e){let n=t.value,s=t.options.map(m=>({value:Pt(m),label:Be(m)})),o=g("div","tw-select"),r=vt("tw-select-trigger");r.setAttribute("aria-haspopup","listbox"),r.setAttribute("aria-expanded","false");let i=g("span","tw-select-right"),a=g("span","tw-select-value");i.append(a),i.insertAdjacentHTML("beforeend",vo),r.append(lt("span","tw-select-label",t.label),i);let u=g("div","tw-select-dropdown");u.setAttribute("role","listbox");let d=s.map(m=>{let f=vt("tw-select-option");return f.setAttribute("role","option"),f.textContent=m.label,f.dataset.value=m.value,f.addEventListener("click",()=>{p(m.value),l.close()}),u.append(f),f});o.append(r,u);let c=()=>{a.textContent=(s.find(m=>m.value===n)||{}).label??n,d.forEach(m=>{let f=m.dataset.value===String(n);m.dataset.selected=String(f),m.setAttribute("aria-selected",String(f))})},p=(m,f=!0)=>{n=m,c(),f&&e(m)},l=Rt(o,r,u,{width:"match",fallbackH:200,gap:4,onOpen:()=>(d.find(m=>m.dataset.value===String(n))||d[0])?.focus()});r.addEventListener("keydown",m=>{!l.isOpen()&&(m.key==="ArrowDown"||m.key==="ArrowUp")&&(m.preventDefault(),l.open())}),u.addEventListener("keydown",m=>{let f=d.indexOf(document.activeElement),x=f;if(m.key==="ArrowDown")x=f<0?0:Math.min(d.length-1,f+1);else if(m.key==="ArrowUp")x=f<0?d.length-1:Math.max(0,f-1);else if(m.key==="Home")x=0;else if(m.key==="End")x=d.length-1;else return;m.preventDefault(),d[x]?.focus()});let b=m=>{l.isOpen()&&!o.contains(m.relatedTarget)&&!u.contains(m.relatedTarget)&&l.close()};return r.addEventListener("focusout",b),u.addEventListener("focusout",b),c(),{el:o,set:m=>p(m,!1),get:()=>n}}function xo(t){let e=lt("button","tw-button",t.label);return e.type="button",e.addEventListener("click",()=>t.action&&t.action()),It(e)}function ko(t){let e=g("div","tw-row tw-buttongroup");t.label&&e.append(lt("span","tw-row-label",t.label));let n=g("div","tw-buttongroup-btns"),s=Array.isArray(t.buttons)?t.buttons.map(o=>[o.label,o.action]):Object.entries(t.buttons||{});for(let[o,r]of s){let i=lt("button","tw-buttongroup-btn",o);i.type="button",i.addEventListener("click",()=>typeof r=="function"&&r()),n.append(i)}return e.append(n),It(e)}var Lo=()=>It(g("div","tw-separator"));function Eo(t,e){let n=t.value??"",s=t.rows>0,o=g("div",s?"tw-row tw-row-multiline":"tw-row"),r=g(s?"textarea":"input",s?"tw-text tw-textarea":"tw-text");return s?r.rows=t.rows:r.type="text",r.value=n,Wt(r),t.placeholder&&(r.placeholder=t.placeholder),r.addEventListener("input",()=>{n=r.value,e(n)}),o.append(lt("span","tw-row-label",t.label),r),{el:o,set:i=>{n=i==null?"":String(i),r.value=n},get:()=>n}}var Mo=(t,e)=>_t({...t,row:!0},e);function pn(t){let e=g("div","tw-folder"),n=vt("tw-folder-header");n.setAttribute("aria-expanded","true"),n.append(lt("span","tw-folder-title",t.label)),n.insertAdjacentHTML("beforeend",_o);let s=g("div","tw-folder-body"),o=g("div","tw-controls");return s.append(o),e.append(n,s),n.addEventListener("click",()=>{let r=e.classList.toggle("is-collapsed");n.setAttribute("aria-expanded",r?"false":"true")}),{el:e,body:o}}var Ao=new Set(["button","fpsgraph","monitor","buttongroup","separator"]);function dn(t,e){let n=ve(t.type);if(!n)return null;try{return n(t,e)}catch(s){return console.error("[tweaks] control failed to build:",t&&t.type,s),null}}var So='<svg class="tw-toolbar-btn__copy" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>',Co='<svg class="tw-toolbar-btn__check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>',To='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8M3 3v5h5"/></svg>',$o='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/></svg>',_o='<svg class="tw-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>',No='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 2 9 5-9 5-9-5 9-5Z"/><path d="m3 12 9 5 9-5"/><path d="m3 17 9 5 9-5"/></svg>',Fo='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12"/></svg>',ns='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg>',Ne=(t,e,n)=>{let s=vt("tw-toolbar-btn"+(t?" "+t:""),e);return s.title=n,s.setAttribute("aria-label",n),s},cs=()=>Ne("tw-toolbar-btn--swap",`<span class="tw-toolbar-btn__icons">${So}${Co}</span>`,"Copy values"),ds=()=>Ne("tw-toolbar-btn--reset",To,"Reset"),us=t=>{t.classList.add("is-copied"),clearTimeout(t._t),t._t=setTimeout(()=>t.classList.remove("is-copied"),1400)},ps=t=>{let e=t.querySelector("svg");t._spinSettle||(t._spinSettle=()=>{clearTimeout(t._t),t.classList.remove("is-spinning"),e.style.transition="none",e.style.setProperty("--tw-spin","0deg"),e.getBoundingClientRect(),e.style.transition=""},e.addEventListener("transitionend",s=>{s.propertyName==="transform"&&t.classList.contains("is-spinning")&&performance.now()-t._spinT>250&&t._spinSettle()})),t._spinT=performance.now(),e.style.setProperty("--tw-spin",`${(parseFloat(e.style.getPropertyValue("--tw-spin"))||0)-360}deg`),t.classList.add("is-spinning"),clearTimeout(t._t);let n=()=>{e.getAnimations&&e.getAnimations().length?t._t=setTimeout(n,250):t._spinSettle()};t._t=setTimeout(n,600)},Xt=null,ss=0;function jt(t,e){Xt||(Xt=g("div","tw-toast tw-portal"),Xt.setAttribute("role","status"),document.body.appendChild(Xt)),Xt.textContent=t,se(Xt,e),Xt.classList.add("is-open"),clearTimeout(ss),ss=setTimeout(()=>Xt.classList.remove("is-open"),1600)}var Mt=null,fn=0,os=null,hn=t=>{t.key==="Escape"&&mn()},mn=()=>{clearTimeout(fn),document.removeEventListener("keydown",hn),Mt&&Mt.classList.remove("is-open")};function Po(t,e){Mt||(Mt=g("div","tw-tip tw-portal"),Mt.setAttribute("role","tooltip"),document.body.appendChild(Mt)),clearTimeout(fn),Mt.textContent=e,se(Mt,t);let n=Mt.classList.contains("is-open");Mt.style.visibility="hidden",Mt.classList.add("is-open"),je(t,Mt,{align:"center",prefer:"above",gap:8}),Mt.style.visibility="",document.addEventListener("keydown",hn),os=t,n||requestAnimationFrame(function s(){if(Mt.classList.contains("is-open")){if(!os.isConnected)return mn();requestAnimationFrame(s)}})}function rs(){Mt&&(fn=setTimeout(()=>{Mt.classList.remove("is-open"),document.removeEventListener("keydown",hn)},80))}function fs(t,e){let n=t.querySelector(".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")||t,s=n.closest("button"),o=s?g("span","tw-hint",ns):vt("tw-hint",ns),r=()=>Po(o,e);if(s){o.setAttribute("aria-hidden","true");let i=s.getAttribute("aria-description");s.setAttribute("aria-description",i?`${i}. ${e}`:e)}else o.setAttribute("aria-label",e),o.addEventListener("focus",r),o.addEventListener("blur",rs),o.addEventListener("keydown",i=>{(i.key==="Enter"||i.key===" ")&&i.stopPropagation()});o.addEventListener("pointerenter",r),o.addEventListener("pointerleave",rs),o.addEventListener("pointerdown",i=>i.stopPropagation()),o.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation()}),n.appendChild(o)}async function hs(t){try{return await navigator.clipboard.writeText(t),!0}catch{}let e=document.createElement("textarea");e.value=t,e.style.position="fixed",e.style.top="-9999px",document.body.appendChild(e),e.focus(),e.select();let n=!1;try{n=document.execCommand("copy")}catch{}return document.body.removeChild(e),n}rt("slider",mo);rt("checkbox",bo);rt("radiogrid",wo);rt("list",yo);rt("button",xo);rt("buttongroup",ko);rt("separator",Lo);rt("text",Eo);rt("number",Mo);rt("folder",pn);function Oo(t,e,n={}){let s=Object.entries(e).filter(([_])=>_!=="_last"||(console.warn('[tweaks] "_last" is reserved (the changed-key channel) \u2014 schema entry skipped'),!1)).map(([_,et])=>Fe(_,et)).filter(Boolean),o={},r=[],i=new Set,a=new Set,u=[],d=!1,c=!1,p=[],l=null,b=()=>{},m=()=>({}),f=()=>!1,x=()=>!1,y=()=>{},S=()=>{},E=()=>{},A=()=>{a.forEach(_=>{try{_(o,o._last)}catch(et){console.error("[tweaks] listener threw:",et)}}),b()},I=n.persist?`tw:${n.persist===!0?t:n.persist}`:null,P=I?`${I}:presets`:null,z=_=>{try{return JSON.parse(localStorage.getItem(_)||"null")}catch{return null}},j=(_,et)=>{try{localStorage.setItem(_,JSON.stringify(et))}catch{}},k=g("div","tw-panel");k.dataset.mode="inline",He(k);let O=g("div","tw-header"),Y=vt("tw-header-toggle");Y.setAttribute("aria-expanded","true"),Y.append(lt("span","tw-title",t));let J=g("div","tw-toolbar"),K=cs(),T=ds(),D=null;I&&(D=Ne("",No,"Presets"),D.setAttribute("aria-haspopup","menu"),D.setAttribute("aria-expanded","false"),J.append(D));let v=!!n.filter,h=v?Ne("",$o,"Filter controls"):null,w=v?g("input","tw-search"):null;v&&(w.type="text",w.placeholder="Filter\u2026",w.spellcheck=!1,w.setAttribute("aria-label","Filter controls"),Wt(w),J.append(h)),J.append(K,T),O.append(Y),v&&O.append(w),n.toolbar!==!1&&O.append(J);for(let _ of[K,T,D,h])_&&(_.disabled=!0);let B=!1;Y.addEventListener("click",()=>{if(B){B=!1;return}let _=k.classList.toggle("is-collapsed");Y.setAttribute("aria-expanded",_?"false":"true"),k.dataset.mode==="floating"&&setTimeout(()=>{k.dataset.mode==="floating"&&k.isConnected&&(W(),X())},270)});let H=g("div","tw-body"),q=g("div","tw-controls");H.append(q),k.append(O,H);let Z=ze(n.theme);ge(k,Z),k._twTheme=Z;let ot=n.draggable!==!1,U=8,it=28,wt=()=>({maxX:Math.max(U,window.innerWidth-k.offsetWidth-U),maxY:Math.max(U,window.innerHeight-k.offsetHeight-U)}),mt=I?`${I}:pos`:null,Dt=(ot||n.floating)&&mt?z(mt):null,zt=Dt||(typeof n.floating=="object"?n.floating:null)||{x:16,y:16},bt=+zt.x||16,yt=+zt.y||16,X=()=>{k.style.left=bt+"px",k.style.top=yt+"px"},W=()=>{let{maxX:_,maxY:et}=wt();bt=N(bt,U,_),yt=N(yt,U,et)};(ot||n.floating)&&(n.floating||Dt)&&(k.dataset.mode="floating",W(),X(),requestAnimationFrame(()=>{!d&&k.dataset.mode==="floating"&&k.isConnected&&(W(),X())}));let st=_=>{_.set(_.def),_.target[_.key]=_.get(),o._last=_.key,A()},pt=(_,et)=>{let V=_.querySelector(".tw-slider-value")||_.querySelector(".tw-row-label, .tw-select-label, .tw-trigger-label, .tw-radiogrid-label, .tw-field-label")||_;V.classList.add("tw-resettable"),V.title="Double-click or hold to reset";let tt=0,$=0,M=0,R=!1,F=()=>{tt&&(clearTimeout(tt),tt=0,V.classList.remove("tw-reset-holding"))};V.addEventListener("pointerdown",C=>{C.stopPropagation(),R=!1,!(C.pointerType!=="touch"&&C.pointerType!=="pen")&&($=C.clientX,M=C.clientY,V.classList.add("tw-reset-holding"),tt=setTimeout(()=>{tt=0,V.classList.remove("tw-reset-holding","is-editable"),R=!0,st(et)},500))}),V.addEventListener("pointermove",C=>{tt&&Math.abs(C.clientX-$)+Math.abs(C.clientY-M)>8&&F()}),V.addEventListener("pointerup",F),V.addEventListener("pointercancel",F),V.addEventListener("pointerleave",F),V.addEventListener("contextmenu",C=>{R&&C.preventDefault()}),V.addEventListener("click",C=>{R&&(C.preventDefault(),C.stopImmediatePropagation(),R=!1)},!0),V.addEventListener("dblclick",C=>{C.preventDefault(),C.stopPropagation(),st(et)})},L=[],G=(_,et)=>{et.hint&&fs(_,et.hint),(et.render||et.disabled!=null)&&L.push({node:_,m:et})},Q=[],gt=[],ft=(_,et,V,tt=[],$=null)=>{for(let M of et){if(M.type==="tabs"){let C={};i.add(C),V[M.key]=C;let ct=ve("tabs"),at=ct&&ct(M);if(!at)continue;M.pages.forEach((nt,ht)=>{let dt={};i.add(dt),C[nt.key]=dt,ft(at.bodies[ht],nt.children,dt,[...tt,M.key,nt.key])}),G(at.el,M),_.append(at.el);continue}if(M.type==="folder"){let C={};i.add(C),V[M.key]=C;let ct=pn(M),at=v?{el:ct.el,label:M.label,body:ct.body}:null;at&>.push(at),ft(ct.body,M.children,C,[...tt,M.key],at),G(ct.el,M),_.append(ct.el);continue}if(Ao.has(M.type)){let C=dn(M,()=>{});C&&(v&&M.type!=="separator"&&Q.push({el:C.el,label:M.label,folder:$}),G(C.el,M),_.append(C.el));continue}let R=dn(M,C=>{Un(V[M.key],C)&&(V[M.key]=C,o._last=M.key,A())});if(!R)continue;un(V,M.key)&&R.set(V[M.key]),V[M.key]=R.get();let F={target:V,key:M.key,set:R.set,get:R.get,def:M.value,path:[...tt,M.key]};r.push(F),pt(R.el,F),G(R.el,M),v&&Q.push({el:R.el,label:M.label,folder:$}),_.append(R.el)}},At=()=>{if(d)return;if(ft(q,s,o),L.length){let $=new Map;for(let F of r)$.has(F.key)||$.set(F.key,F);let M=F=>{let C=$.get(F);return C?C.target[C.key]:o[F]},R=()=>{for(let{node:F,m:C}of L)try{if(C.render&&F.classList.toggle("tw-cond-hidden",!C.render(M)),C.disabled!=null){let ct=typeof C.disabled=="function"?C.disabled(M):C.disabled;F.classList.toggle("is-disabled",!!ct),F.inert=!!ct}}catch{}};a.add(R),R()}if(v){let $=R=>{let F=R.trim().toLowerCase();if(!F){Q.forEach(C=>C.el.classList.remove("tw-filter-hidden")),gt.forEach(C=>C.el.classList.remove("tw-filter-hidden"));return}for(let C of Q){let ct=C.folder&&be(C.folder.label,F);C.el.classList.toggle("tw-filter-hidden",!(be(C.label,F)||ct))}for(let C of gt.slice().reverse()){let ct=[...C.body.children].some(at=>!at.classList.contains("tw-filter-hidden"));C.el.classList.toggle("tw-filter-hidden",!(be(C.label,F)||ct))}},M=()=>{k.classList.remove("is-searching"),w.value="",$("")};h.addEventListener("click",()=>{k.classList.toggle("is-searching")?(w.focus(),w.select()):M()}),w.addEventListener("input",()=>$(w.value)),w.addEventListener("keydown",R=>{R.key==="Escape"&&(M(),h.focus())})}let _=($,M)=>M.reduce((R,F)=>R?.[F],$),et=function($,M){return $==="_last"&&this===o?void 0:M},V=()=>JSON.parse(JSON.stringify(o,et)),tt=($,M=!0)=>{if(!(!$||typeof $!="object")){for(let R of r){let F=_($,R.path);F!==void 0&&(R.set(F),R.target[R.key]=R.get())}o._last=void 0,M&&A()}};if(I){let $;b=()=>{clearTimeout($),$=setTimeout(()=>j(I,V()),150)},u.push(()=>clearTimeout($)),tt(z(I))}if(m=()=>{let $=P?z(P):null;return Object.assign(Object.create(null),$&&typeof $=="object"?$:{})},f=$=>{if(!P||!$)return!1;let M=m();return M[$]=V(),j(P,M),!0},x=$=>{let M=m();return M[$]?(tt(M[$]),!0):!1},y=$=>{if(!P)return;let M=m();delete M[$],j(P,M)},ot||n.floating){if(ot){k.dataset.draggable="true";let nt=g("span","tw-grabber");nt.setAttribute("aria-hidden","true"),O.prepend(nt)}let $=()=>{if(k.dataset.mode==="floating")return;let nt=k.getBoundingClientRect();bt=nt.left,yt=nt.top,k.parentNode&&(l=g("span","tw-lift-slot"),l.style.width=nt.width+"px",l.style.height=nt.height+"px",l.setAttribute("aria-hidden","true"),k.before(l)),Ye(k,k),document.body.appendChild(k),k.dataset.mode="floating",X()},M=null,R=0,F=0,C=0,ct=0;O.addEventListener("pointerdown",nt=>{if(!(nt.button!==0||M!==null||nt.target.closest(".tw-toolbar, input, textarea, select")))if(M=nt.pointerId,R=nt.clientX,F=nt.clientY,B=!1,k.classList.add("is-grabbing"),k.style.transition){let ht=getComputedStyle(k);bt=parseFloat(ht.left)||bt,yt=parseFloat(ht.top)||yt,k.style.transition="",X()}else k.style.transition=""}),O.addEventListener("pointermove",nt=>{if(nt.pointerId!==M)return;let ht=nt.clientX-R,dt=nt.clientY-F;if(!B){if(Math.abs(ht)+Math.abs(dt)<4)return;B=!0,$(),C=bt,ct=yt;try{O.setPointerCapture(M)}catch{}k.classList.add("is-dragging")}let{maxX:$t,maxY:fe}=wt();bt=N(C+ht,U,$t),yt=N(ct+dt,U,fe),X()});let at=nt=>{if(nt.pointerId===M){try{O.releasePointerCapture(M)}catch{}if(M=null,B){let{maxX:ht,maxY:dt}=wt();bt<=U+it?bt=U:bt>=ht-it&&(bt=ht),yt<=U+it?yt=U:yt>=dt-it&&(yt=dt),We.matches||(k.style.transition="left 0.32s var(--tw-ease-spring), top 0.32s var(--tw-ease-spring)",setTimeout(()=>{k.style.transition=""},340)),X(),mt&&j(mt,{x:bt,y:yt})}k.classList.remove("is-dragging","is-grabbing")}};O.addEventListener("pointerup",at),O.addEventListener("pointercancel",at),O.addEventListener("lostpointercapture",at),u.push(Tt(k,[[window,"resize"]],()=>{k.dataset.mode==="floating"&&(W(),X())}))}if(D){let $=g("div","tw-presets-menu"),M=g("div","tw-presets-save"),R=g("input","tw-presets-input");R.type="text",R.placeholder="Preset name\u2026",R.spellcheck=!1,R.setAttribute("aria-label","New preset name"),Wt(R);let F=lt("button","tw-presets-savebtn","Save");F.type="button",M.append(R,F);let C=g("div","tw-presets-list");$.append(M,C);let ct=()=>{let ht=m(),dt=Object.keys(ht);if(C.replaceChildren(),!dt.length)return C.append(lt("div","tw-presets-empty","No presets yet"));for(let $t of dt){let fe=g("div","tw-presets-row"),Pe=lt("button","tw-presets-load",$t);Pe.type="button",Pe.addEventListener("click",()=>{x($t),nt.close(),jt(`Loaded \u201C${$t}\u201D`,k)});let Oe=vt("tw-presets-del",Fo);Oe.setAttribute("aria-label",`Delete preset ${$t}`),Oe.addEventListener("click",gs=>{gs.stopPropagation(),y($t),ct()}),fe.append(Pe,Oe),C.append(fe)}},at=()=>{let ht=R.value.trim();if(!ht){R.focus();return}f(ht),R.value="",ct(),jt(`Saved \u201C${ht}\u201D`,k)},nt=Rt(D,D,$,{width:208,fallbackH:160,gap:6,align:"end",onOpen:()=>{ct(),R.focus()}});F.addEventListener("click",at),R.addEventListener("keydown",ht=>{ht.key==="Enter"&&at()})}if(K.addEventListener("click",async()=>{await hs(JSON.stringify(o,et,2))?(us(K),jt(`${t} values copied`,k)):jt("Copy failed",k)}),T.addEventListener("click",()=>{if(ps(T),typeof n.onReset=="function")return n.onReset();r.forEach($=>{$.set($.def),$.target[$.key]=$.get()}),o._last=void 0,A()}),n.onEditStart||n.onEditEnd){let $=".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",M=!1,R=()=>{document.removeEventListener("pointerup",R,!0),document.removeEventListener("pointercancel",R,!0),M&&(M=!1,n.onEditEnd&&n.onEditEnd())},F=C=>{M||!C.target.closest($)||(M=!0,n.onEditStart&&n.onEditStart(),document.addEventListener("pointerup",R,!0),document.addEventListener("pointercancel",R,!0))};k.addEventListener("pointerdown",F),k._twEditPointer=F,u.push(R)}if(n.undo){let $=[V()],M=0,R=!1,F=0,C=()=>{F=0;let dt=V();JSON.stringify(dt)!==JSON.stringify($[M])&&($=$.slice(0,M+1),$.push(dt),M=$.length-1)},ct=()=>{R||(clearTimeout(F),F=setTimeout(C,350))},at=()=>{F&&(clearTimeout(F),C())};a.add(ct);let nt=dt=>{R=!0,tt($[dt]),R=!1,M=dt};S=()=>{at(),M>0&&nt(M-1)},E=()=>{at(),M<$.length-1&&nt(M+1)};let ht=()=>k.matches(":hover")||k.contains(document.activeElement);u.push(Tt(k,[[document,"keydown"]],dt=>{if(!ht()||!(dt.metaKey||dt.ctrlKey))return;let $t=dt.key.toLowerCase();$t==="z"?(dt.preventDefault(),dt.shiftKey?E():S()):$t==="y"&&(dt.preventDefault(),E())}))}c=!0;for(let[$,M]of p.splice(0))xt.set($,M);for(let $ of[K,T,D,h])$&&($.disabled=!1)},xt={el:k,params:o,on(_){return d?()=>{}:(a.add(_),()=>a.delete(_))},set(_,et){if(d)return;let V=String(_).split(".");if(V.some(F=>F==="__proto__"||F==="constructor"||F==="prototype"))return console.warn(`[tweaks] set("${_}") ignored \u2014 reserved key`);if(!c)return void p.push([String(_),et]);let tt;if(V.length>1){let F=o;for(let C=0;C<V.length-1&&F;C++)F=F[V[C]],i.has(F)||(F=null);if(tt=F&&r.find(C=>C.target===F&&C.key===V[V.length-1]),!tt)return console.warn(`[tweaks] set("${_}") \u2014 no control at that path`)}else{let F=r.filter(C=>C.key===_);if(F.length>1)return console.warn(`[tweaks] set("${_}") is ambiguous \u2014 ${F.length} controls share that key; use a dotted path (e.g. "${F[0].path.join(".")}")`);tt=F[0]}let $=tt?tt.target:o,M=tt?tt.key:_,R=$[M];if(tt)tt.set(et),$[M]=tt.get();else{if(i.has(o[_]))return console.warn(`[tweaks] set("${_}") ignored \u2014 it's a folder/tabs group; set its children instead`);o[_]=et}Un(R,$[M])&&(o._last=M,A())},reset(){d||T.click()},setTheme(_){if(!d){if(Z)for(let et in Z)k.style.removeProperty(et);Z=ze(_),k._twTheme=Z,ge(k,Z),window.dispatchEvent(new Event("tw-retheme"))}},savePreset:_=>!d&&f(_),loadPreset:_=>!d&&x(_),deletePreset:_=>{d||y(_)},presets:()=>d?[]:Object.keys(m()),undo:()=>{d||S()},redo:()=>{d||E()},destroy(){if(!d){d=!0,wn(),mn();for(let _ of u.splice(0))try{_()}catch{}a.clear(),l&&(l.remove(),l=null),k.remove()}}},Yt=ls(s);return Yt?(xt.ready=k.ready=Yt.then(At).then(()=>xt),xt.ready.catch(()=>{})):(At(),xt.ready=k.ready=Promise.resolve(xt)),xt}var is={slider:t=>({value:ut(t.value),min:ut(t.min)??0,max:ut(t.max)??100,step:ut(t.step),soft:as(t.soft)}),checkbox:t=>t.options?{type:"radiogrid",options:pe(t.options),value:t.value,cols:ut(t.cols)}:{value:t.checked==="true"},radiogrid:t=>({options:pe(t.options),value:t.value,cols:ut(t.cols)}),list:t=>({options:pe(t.options),value:t.value}),color:t=>({value:t.value||"#7c5cff"}),button:(t,e,n)=>({action:()=>jt(`${n} pressed`,e)}),buttongroup:(t,e)=>({buttons:pe(t.buttons).map(n=>({label:n,action:()=>jt(`${n} pressed`,e)}))}),separator:()=>({}),number:t=>({value:ut(t.value),min:ut(t.min),max:ut(t.max),step:ut(t.step)}),text:t=>({value:t.value??"",placeholder:t.placeholder,rows:ut(t.rows)}),image:t=>({value:t.value}),fpsgraph:t=>({label:t.label||"FPS"}),interval:t=>({value:t.value?t.value.split(",").map(Number):void 0,min:ut(t.min),max:ut(t.max),step:ut(t.step)}),spring:t=>({stiffness:ut(t.stiffness),damping:ut(t.damping),mass:ut(t.mass)}),cubicbezier:t=>({value:t.value?t.value.split(",").map(Number):void 0}),point:t=>{let e=(t.value||"").split(",").map(n=>parseFloat(n));return{components:pe(t.components||"X,Y").map((n,s)=>({key:n.toLowerCase(),label:n,value:isNaN(e[s])?0:e[s],step:ut(t.step)??1,min:ut(t.min),max:ut(t.max)})),pad:as(t.pad),invertY:t.invertY==="true"}},plot:t=>({expr:t.expr,xMin:ut(t.xmin),xMax:ut(t.xmax),yMin:ut(t.ymin),yMax:ut(t.ymax),samples:ut(t.samples),editable:t.editable!=="false"})},ut=t=>t==null?void 0:+t,as=t=>t==="true"||t==="",pe=t=>(t||"").split(",").map(e=>e.trim()).filter(Boolean),Ro=t=>{let e=t.dataset,n=e.tw;if(!un(is,n))return null;let s=e.label||he(e.key||n),o=is[n](e,t,s),r=Fe("v",{type:n,...o});return r&&(r.label=o.label||s),r};async function ms(t=document){t.querySelectorAll('.tw-panel[data-mode="inline"]:not([data-tw-panel-bound])').forEach(s=>{let o=s.querySelector(":scope > .tw-header"),r=s.querySelector(":scope > .tw-controls");if(!o||!r)return;s.setAttribute("data-tw-panel-bound","");let i=g("div","tw-body");s.insertBefore(i,r),i.append(r);let a=o.querySelector(".tw-header-toggle"),u=o.querySelector(".tw-title");if(!a&&u&&(a=vt("tw-header-toggle"),u.replaceWith(a),a.append(u)),!!a&&(a.setAttribute("aria-expanded","true"),a.addEventListener("click",()=>{let d=s.classList.toggle("is-collapsed");a.setAttribute("aria-expanded",d?"false":"true")}),!o.querySelector(".tw-toolbar"))){let d=u&&u.textContent||"Panel",c=g("div","tw-toolbar"),p=cs(),l=ds();c.append(p,l),o.append(c);let b=()=>[...s.querySelectorAll("[data-tw]")].map(m=>m._tw).filter(m=>m&&m.ctrl.get()!==void 0);p.addEventListener("click",async()=>{let m={};for(let x of b())m[x.key]=x.ctrl.get();await hs(JSON.stringify(m,null,2))?(us(p),jt(`${d} values copied`,s)):jt("Copy failed",s)}),l.addEventListener("click",()=>{ps(l);for(let m of b())m.ctrl.set(m.def),m.host.dataset.value=m.ctrl.get()})}}),t.querySelectorAll('[data-tw="folder"]:not([data-tw-bound])').forEach(s=>{s.setAttribute("data-tw-bound","");let o=pn({label:s.dataset.label||"Folder"});[...s.children].forEach(r=>o.body.append(r)),s.append(o.el)});let e=[...t.querySelectorAll("[data-tw]:not([data-tw-bound])")].map(s=>({host:s,meta:Ro(s)})).filter(s=>s.meta);e.forEach(({host:s})=>s.setAttribute("data-tw-bound",""));let n=ls(e.map(s=>s.meta));n&&await n.catch(()=>{});for(let{host:s,meta:o}of e){let r=dn(o,i=>s.dataset.value=i);r&&(s.append(r.el),s.dataset.hint&&fs(r.el,s.dataset.hint),s._tw={ctrl:r,def:o.value,key:o.label,host:s})}}if(typeof document<"u"){let t=()=>ms(document);document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t()}export{ms as enhance,Oo as tweaks};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const CHECKER = "repeating-conic-gradient(#6b6b6b 0% 25%, #9a9a9a 0% 50%) 0 0 / 8px 8px";
|
|
2
|
+
declare function parseColor(str: any): any[];
|
|
3
|
+
declare function createPickerBody(meta: any, onChange: any): {
|
|
4
|
+
el: any;
|
|
5
|
+
set: (v: any) => void;
|
|
6
|
+
get: () => any;
|
|
7
|
+
mode: () => any;
|
|
8
|
+
setMode: (m: any) => void;
|
|
9
|
+
reflow: () => void;
|
|
10
|
+
swatchCss: () => string;
|
|
11
|
+
valueText: () => string;
|
|
12
|
+
};
|
|
13
|
+
declare const oklchStr: (L: any, C: any, H: any, A: any) => string;
|
|
14
|
+
export { createPickerBody, parseColor, oklchStr, CHECKER };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function compileExpr(src: any): any;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Schema, TweaksOptions, Panel } from "./types.js";
|
|
2
|
+
export type { Schema, SchemaValue, SchemaObject, ControlOptions, Option, GradientStop, Get, TweaksOptions, Theme, Params, Panel, Control } from "./types.js";
|
|
3
|
+
export declare function tweaks(name: string, schema: Schema, opts?: TweaksOptions): Panel;
|
|
4
|
+
export declare function enhance(root?: Document | Element): Promise<void>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
declare const titleCase: (s: any) => any;
|
|
2
|
+
declare const clamp: (v: any, lo: any, hi: any) => number;
|
|
3
|
+
declare const isColorStr: (v: any) => boolean;
|
|
4
|
+
declare const stepPrecision: (step: any) => number;
|
|
5
|
+
declare const roundToStep: (v: any, min: any, step: any) => any;
|
|
6
|
+
declare const inferStep: (min: any, max: any) => 1 | 0.1 | 0.01 | 10;
|
|
7
|
+
declare const defaultRange: (v: any) => number[];
|
|
8
|
+
declare const optValue: (o: any) => any;
|
|
9
|
+
declare const optLabel: (o: any) => any;
|
|
10
|
+
declare const el: (tag: string, cls?: string, html?: string) => any;
|
|
11
|
+
declare const svgEl: (tag: string, cls?: string) => any;
|
|
12
|
+
declare const btn: (cls: string, html?: string) => any;
|
|
13
|
+
declare const txt: (tag: string, cls: string, text: any) => any;
|
|
14
|
+
declare const cssVar: (node: any, name: any) => string;
|
|
15
|
+
declare const accentColor: (node: any) => string;
|
|
16
|
+
declare const stopPointerLeak: (node: any) => void;
|
|
17
|
+
declare const onReady: (fn: any) => void;
|
|
18
|
+
declare const onLive: (owner: any, targets: Array<[any, string]>, fn: (e?: any) => void) => () => void;
|
|
19
|
+
declare const wireHoverClass: (el: any, onEnter: any) => void;
|
|
20
|
+
declare const quietFocus: (input: any) => void;
|
|
21
|
+
declare function dragGesture(node: any, { onDown, onMove, onEnd }?: {
|
|
22
|
+
onDown?: (e: any) => void;
|
|
23
|
+
onMove?: (e: any) => void;
|
|
24
|
+
onEnd?: (e: any) => void;
|
|
25
|
+
}): void;
|
|
26
|
+
declare const grabSurface: (surface: any, set: any) => void;
|
|
27
|
+
declare const boxFrac: (e: any, box: any) => number[];
|
|
28
|
+
declare const fitCanvas: (canvas: any, ctx: any, maxDpr?: number) => any[];
|
|
29
|
+
export declare const placeBelow: (trigger: any, pop: any, { width, fallbackH, gap, align, prefer }?: {
|
|
30
|
+
width?: number | "match";
|
|
31
|
+
fallbackH?: number;
|
|
32
|
+
gap?: number;
|
|
33
|
+
align?: "start" | "end" | "center";
|
|
34
|
+
prefer?: "above" | "below";
|
|
35
|
+
}) => void;
|
|
36
|
+
declare const resolveTheme: (theme: any) => {};
|
|
37
|
+
declare const applyThemeVars: (node: any, vars: any) => void;
|
|
38
|
+
declare const carryScheme: (portal: any, anchor: any) => void;
|
|
39
|
+
declare const carrySkin: (portal: any, anchor: any) => void;
|
|
40
|
+
declare const closeActivePopover: () => void;
|
|
41
|
+
declare function popover(root: any, trigger: any, pop: any, opts?: {
|
|
42
|
+
width?: number | "match";
|
|
43
|
+
fallbackH?: number;
|
|
44
|
+
gap?: number;
|
|
45
|
+
align?: "start" | "end";
|
|
46
|
+
onOpen?: () => void;
|
|
47
|
+
onReflow?: () => void;
|
|
48
|
+
}): {
|
|
49
|
+
open: () => void;
|
|
50
|
+
close: () => void;
|
|
51
|
+
isOpen: () => boolean;
|
|
52
|
+
reflow: () => void;
|
|
53
|
+
};
|
|
54
|
+
declare const fuzzyMatch: (text: any, q: any) => boolean;
|
|
55
|
+
declare const REDUCE_MOTION: any;
|
|
56
|
+
declare const measurePill: (container: any, pill: any, animate?: any) => void;
|
|
57
|
+
declare const setRadioActive: (btns: any, value: any) => any;
|
|
58
|
+
declare const radioButton: (cls: any, o: any, onPick: any) => any;
|
|
59
|
+
declare const navIndex: (key: any, i: any, n: any, cols?: number) => any;
|
|
60
|
+
declare const triggerRow: (cls: string, label: string) => {
|
|
61
|
+
root: any;
|
|
62
|
+
trigger: any;
|
|
63
|
+
right: any;
|
|
64
|
+
};
|
|
65
|
+
declare function numField(spec: any, onChange: any): {
|
|
66
|
+
el: any;
|
|
67
|
+
set: (val: any) => void;
|
|
68
|
+
get: () => any;
|
|
69
|
+
};
|
|
70
|
+
declare const blade: (el: any) => {
|
|
71
|
+
el: any;
|
|
72
|
+
set: () => void;
|
|
73
|
+
get: () => any;
|
|
74
|
+
};
|
|
75
|
+
export declare const registerControl: (type: any, ctor: any) => void;
|
|
76
|
+
export declare const getControl: (type: any) => any;
|
|
77
|
+
export { titleCase, clamp, isColorStr, stepPrecision, roundToStep, inferStep, defaultRange, optValue, optLabel, el, btn, txt, svgEl, cssVar, accentColor, stopPointerLeak, onReady, onLive, wireHoverClass, dragGesture, boxFrac, fitCanvas, popover, closeActivePopover, resolveTheme, applyThemeVars, carryScheme, carrySkin, fuzzyMatch, setRadioActive, radioButton, navIndex, triggerRow, numField, blade, quietFocus, measurePill, grabSurface, REDUCE_MOTION, };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "./controls/colour.js";
|
|
2
|
+
import "./controls/gradient.js";
|
|
3
|
+
import "./controls/interval.js";
|
|
4
|
+
import "./controls/tabs.js";
|
|
5
|
+
import "./controls/image.js";
|
|
6
|
+
import "./controls/monitor.js";
|
|
7
|
+
import "./controls/spring.js";
|
|
8
|
+
import "./controls/bezier.js";
|
|
9
|
+
import "./controls/point.js";
|
|
10
|
+
import "./controls/plot.js";
|
|
11
|
+
export { tweaks, enhance } from "./core.js";
|
|
12
|
+
export type { Schema, SchemaValue, SchemaObject, ControlOptions, Option, GradientStop, Get, TweaksOptions, Theme, Params, Panel, Control } from "./types.js";
|