asciify-engine 4.20.0 → 4.22.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/README.md +14 -0
- package/dist/{animation-presets-ZujFF3i8.d.ts → animation-presets-CEdD0FMM.d.cts} +42 -28
- package/dist/{animation-presets-DhswE0D_.d.cts → animation-presets-KnEWoJ_q.d.ts} +42 -28
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +4 -4
- package/dist/core.d.ts +4 -4
- package/dist/core.js +1 -1
- package/dist/field.cjs +1 -1
- package/dist/field.d.cts +3 -1
- package/dist/field.d.ts +3 -1
- package/dist/field.js +1 -1
- package/dist/hover-guide-CAfsLjFZ.d.cts +190 -0
- package/dist/hover-guide-CAfsLjFZ.d.ts +190 -0
- package/dist/hover.cjs +1 -1
- package/dist/hover.d.cts +14 -7
- package/dist/hover.d.ts +14 -7
- package/dist/hover.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/{model-9SbRVqqI.d.cts → model-BHIQYYk-.d.ts} +11 -2
- package/dist/{model-DXHhQhxP.d.ts → model-BzgEEqzP.d.cts} +11 -2
- package/dist/studio.cjs +1 -1
- package/dist/studio.d.cts +4 -5
- package/dist/studio.d.ts +4 -5
- package/dist/studio.js +1 -1
- package/dist/{types-CM4452nD.d.ts → types-C9lka3yC.d.ts} +2 -2
- package/dist/{types-FkqhgDYx.d.cts → types-DOl5f2x3.d.cts} +2 -2
- package/package.json +1 -1
- package/skills/asciify-engine/SKILL.md +3 -3
- package/skills/asciify-engine/references/design-matching.md +2 -1
- package/skills/asciify-engine/references/glyph-field.md +1 -1
- package/skills/asciify-engine/references/hero-finish.md +3 -0
- package/skills/asciify-engine/references/looks.md +55 -55
- package/skills/asciify-engine/references/studio-effects.md +73 -24
- package/skills/asciify-engine/references/studio-workspace.md +6 -7
- package/skills/asciify-engine/references/upgrading.md +6 -0
- package/dist/hover-catalog-D85jh6dR.d.cts +0 -173
- package/dist/hover-catalog-D85jh6dR.d.ts +0 -173
package/dist/core.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as AsciiOptions, A as AsciiFrame, b as ArtStyle, H as HoverEffect } from './types-
|
|
2
|
-
export { c as AnimationStyle, d as AsciiCell, e as AsciiResult, C as ColorMode, D as DEFAULT_OPTIONS, f as HOVER_PRESETS, g as HoverPreset, h as HoverShape, P as PALETTE_THEMES, i as PaletteTheme, R as RenderMode, S as SourceType } from './types-
|
|
1
|
+
import { a as AsciiOptions, A as AsciiFrame, b as ArtStyle, H as HoverEffect } from './types-DOl5f2x3.cjs';
|
|
2
|
+
export { c as AnimationStyle, d as AsciiCell, e as AsciiResult, C as ColorMode, D as DEFAULT_OPTIONS, f as HOVER_PRESETS, g as HoverPreset, h as HoverShape, P as PALETTE_THEMES, i as PaletteTheme, R as RenderMode, S as SourceType } from './types-DOl5f2x3.cjs';
|
|
3
3
|
export { C as CHARACTER_SETS } from './characters-BgECi5Lf.cjs';
|
|
4
|
-
export { i as STUDIO_STYLES, r as StudioStyle } from './model-
|
|
5
|
-
import './hover-
|
|
4
|
+
export { i as STUDIO_STYLES, r as StudioStyle } from './model-BzgEEqzP.cjs';
|
|
5
|
+
import './hover-guide-CAfsLjFZ.cjs';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Core frame-to-canvas renderer and source-to-frame converters.
|
package/dist/core.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as AsciiOptions, A as AsciiFrame, b as ArtStyle, H as HoverEffect } from './types-
|
|
2
|
-
export { c as AnimationStyle, d as AsciiCell, e as AsciiResult, C as ColorMode, D as DEFAULT_OPTIONS, f as HOVER_PRESETS, g as HoverPreset, h as HoverShape, P as PALETTE_THEMES, i as PaletteTheme, R as RenderMode, S as SourceType } from './types-
|
|
1
|
+
import { a as AsciiOptions, A as AsciiFrame, b as ArtStyle, H as HoverEffect } from './types-C9lka3yC.js';
|
|
2
|
+
export { c as AnimationStyle, d as AsciiCell, e as AsciiResult, C as ColorMode, D as DEFAULT_OPTIONS, f as HOVER_PRESETS, g as HoverPreset, h as HoverShape, P as PALETTE_THEMES, i as PaletteTheme, R as RenderMode, S as SourceType } from './types-C9lka3yC.js';
|
|
3
3
|
export { C as CHARACTER_SETS } from './characters-BgECi5Lf.js';
|
|
4
|
-
export { i as STUDIO_STYLES, r as StudioStyle } from './model-
|
|
5
|
-
import './hover-
|
|
4
|
+
export { i as STUDIO_STYLES, r as StudioStyle } from './model-BHIQYYk-.js';
|
|
5
|
+
import './hover-guide-CAfsLjFZ.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Core frame-to-canvas renderer and source-to-frame converters.
|
package/dist/core.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var t={standard:{label:"Classic ASCII",chars:" .:-=+*#%@"},asciify:{label:"Asciify",chars:" .:-=+YCIFSA#@"},minimal:{label:"Minimal",chars:" .:+"},detailed:{label:"Detailed",chars:" .,:;-~=+*xX#%@"},letters:{label:"Letters",chars:" .liLTYCFSAWM"},technical:{label:"Technical",chars:" ._:;+/>=][{}*$#@"},blocks:{label:"Tonal blocks",chars:" ░▒▓█"},braille:{label:"Braille",chars:" ⠁⠃⠇⡇⣇⣧⣷⣿"}},e={dracula:{name:"Dracula",accent:"#bd93f9",bg:"#282a36",fg:"#f8f8f2"},monokai:{name:"Monokai",accent:"#a6e22e",bg:"#272822",fg:"#f8f8f2"},nord:{name:"Nord",accent:"#88c0d0",bg:"#2e3440",fg:"#eceff4"},catppuccin:{name:"Catppuccin",accent:"#cba6f7",bg:"#1e1e2e",fg:"#cdd6f4"},solarized:{name:"Solarized",accent:"#268bd2",bg:"#002b36",fg:"#839496"},gruvbox:{name:"Gruvbox",accent:"#b8bb26",bg:"#282828",fg:"#ebdbb2"}},n={fontSize:7,charSpacing:1,brightness:0,contrast:0,charset:t.standard.chars,colorMode:"grayscale",accentColor:"#d4ff00",invert:!1,renderMode:"ascii",animationStyle:"none",animationSpeed:1,dotSizeRatio:.8,ditherStrength:0,charAspect:.55,normalize:!1,hoverStrength:0,hoverRadius:.2,hoverEffect:"spotlight",hoverColor:"#ffffff",hoverShape:"circle",hoverText:"ASCIIFY",artStyle:"classic",fineDither:!1,customText:"",chromaKey:null,chromaKeyTolerance:60,chromaKeyTrimPadding:.002,chromaKeyTrimLuminanceThreshold:0,chromaKeyTrimMode:"range"},o={none:{label:"Off",options:{hoverStrength:0,hoverEffect:"spotlight",hoverRadius:.2,hoverColor:"#ffffff"}},subtle:{label:"Subtle",options:{hoverStrength:.25,hoverEffect:"glow",hoverRadius:.12,hoverColor:"#ffffff"}},flashlight:{label:"Flashlight",options:{hoverStrength:.6,hoverEffect:"spotlight",hoverRadius:.15,hoverColor:"#fffbe6"}},magnifier:{label:"Magnifier",options:{hoverStrength:.7,hoverEffect:"magnify",hoverRadius:.12,hoverColor:"#ffffff"}},forceField:{label:"Force Field",options:{hoverStrength:.7,hoverEffect:"repel",hoverRadius:.15,hoverColor:"#a0e8ff"}},neon:{label:"Neon",options:{hoverStrength:.6,hoverEffect:"colorShift",hoverRadius:.15,hoverColor:"#d946ef"}},fire:{label:"Fire",options:{hoverStrength:.7,hoverEffect:"spotlight",hoverRadius:.15,hoverColor:"#ff6b2b"}},ice:{label:"Ice",options:{hoverStrength:.5,hoverEffect:"glow",hoverRadius:.15,hoverColor:"#60d5f7"}},gravity:{label:"Gravity",options:{hoverStrength:.7,hoverEffect:"attract",hoverRadius:.18,hoverColor:"#a5d6ff"}},shatter:{label:"Shatter",options:{hoverStrength:.8,hoverEffect:"shatter",hoverRadius:.14,hoverColor:"#ff6090"}},ghost:{label:"Fluid trail",options:{hoverStrength:.55,hoverEffect:"trail",hoverRadius:.2,hoverColor:"#b39ddb"}},glitchReveal:{label:"Glitch Reveal",options:{hoverStrength:.8,hoverEffect:"glitchText",hoverRadius:.18,hoverColor:"#a3e635"}}},r=[{value:"none",mode:"none",group:"Still",label:"Off",description:"Keep the image still. Hover stays available."},{value:"caustics",mode:"caustics",group:"Light and texture",label:"Caustics",description:"Soft ribbons of light travel across a stationary character grid."},{value:"current",mode:"current",group:"Flow and depth",label:"Slow Current",description:"A gentle flow through the image, with steady edges."},{value:"reform",mode:"reform",group:"Rebuild",label:"Reveal & Reform",description:"Disperse, gather, then hold the complete image."},{value:"sheen",mode:"sheen",group:"Light and texture",label:"Sheen",description:"A broad diagonal light sweep; characters stay anchored."},{value:"tidal",mode:"tidal",group:"Flow and depth",label:"Tidal Rings",description:"Concentric currents travel outward, with protected edges."},{value:"grain",mode:"grain",group:"Light and texture",label:"Living Grain",description:"Slow, individually phased tonal changes on a stationary grid."},{value:"parallax",mode:"parallax",group:"Flow and depth",label:"Parallax",description:"A shallow, continuous drift through the image, with the edges held in place."},{value:"weave",mode:"weave",group:"Flow and depth",label:"Woven Flow",description:"Interlaced bands move in opposing directions, like a flexible printed fabric."},{value:"print",mode:"print",group:"Rebuild",label:"Print Shift",description:"Staggered rows lift, soften and register back into the image."},{value:"trace",mode:"trace",group:"Light and texture",label:"Contour Light",description:"Light follows the source image’s tonal contours; every character stays anchored."},{value:"relight",mode:"relight",group:"Light and texture",label:"Relight",description:"A slow orbit of light models the image’s midtones, while the character grid stays fixed."},{value:"shimmer",mode:"shimmer",group:"Light and texture",label:"Shimmer",description:"Small highlights glint at different moments. Shadows stay quiet and the image stays in place."},{value:"breeze",mode:"breeze",group:"Flow and depth",label:"Breeze",description:"A traveling bend gently sways the image, like a print suspended in moving air."},{value:"unfold",mode:"unfold",group:"Rebuild",label:"Unfold",description:"Narrow panels turn, soften and return to a complete image, with a readable hold between cycles."}];var a=t=>Math.max(0,Math.min(1,t)),i=(t,e,n)=>{const o=a((n-t)/(e-t));return o*o*(3-2*o)},s=(t,e)=>{const n=(.06711056*t+.00583715*e)%1*52.9829189;return n-Math.floor(n)};function c(t,e,n,o,r,c=.5){if(r[0]=r[1]=r[2]=0,r[3]=1,"none"===t)return r;const l=o*Math.PI/6,h=i(0,.12,Math.min(e,1-e,n,1-n));if("caustics"===t){const t=Math.sin(9*e+5*n+l)+Math.sin(8*n-3*e-l),o=Math.pow(Math.max(0,1-.72*Math.abs(t)),3);r[2]=(.22*o-.045)*h}else if("current"===t)r[0]=Math.sin(9*n+l)*Math.cos(7*e-l)*10*h,r[1]=Math.cos(8*e+l)*Math.sin(6*n-l)*7*h;else if("sheen"===t)r[2]=.2*Math.pow(.5+.5*Math.cos(5*e+3*n-l),8)-.025;else if("tidal"===t){const t=e-.5,o=n-.5,a=Math.hypot(t,o),i=Math.sin(22*a-l)*h;r[0]=t*i*9,r[1]=o*i*9,r[2]=.035*i}else if("grain"===t){const t=s(Math.floor(160*e),Math.floor(100*n))*Math.PI*2;r[2]=.07*Math.sin(l+t)}else if("parallax"===t){const t=.45+.55*Math.max(0,1-1.4*Math.hypot(e-.5,n-.5));r[0]=12*Math.sin(l)*t*h,r[1]=6*(Math.cos(l)-1)*t*h}else if("weave"===t)r[0]=Math.sin(n*Math.PI*6+l)*Math.sin(l)*8*h,r[1]=Math.sin(e*Math.PI*6-l)*Math.sin(l)*6*h;else if("print"===t){const t=Math.floor(24*n),e=((o+3*s(t,3))%12+12)%12,a=i(1,2.5,e)*(1-i(3.5,5,e));r[0]=Math.sin(2.4*t)*a*9*h,r[1]=5*-a*h,r[2]=.22*-a,r[3]=1-.45*a}else if("trace"===t){const t=.5+.5*Math.cos(l);r[2]=.22*Math.pow(Math.max(0,1-Math.abs(a(c)-t)/.16),3)-.015}else if("relight"===t){const t=n-.5,o=1.3*((e-.5)*Math.cos(l)+t*Math.sin(l));r[2]=.3*o*(.25+3*a(c)*(1-a(c)))*h}else if("shimmer"===t){const t=s(Math.floor(160*e),Math.floor(100*n))*Math.PI*2,o=Math.pow(.5+.5*Math.cos(l+t),10);r[2]=.28*(o-.1762)*i(.35,.9,c)}else if("breeze"===t){const t=Math.sin(l-4*n),o=.35+.65*(1-n);r[0]=10*t*o*h,r[1]=2.5*Math.sin(2*l-4*n+3*e)*o*h,r[2]=.035*Math.cos(l-4*n)*h}else if("unfold"===t){const t=Math.floor(12*e),n=12*e-t-.5,a=((o-.11*t)%12+12)%12,s=i(1,3,a)*(1-i(5,7,a));r[0]=-n*s*24*h,r[1]=Math.sin(1.7*t)*s*3*h,r[2]=.12*-s,r[3]=1-.65*s}else if("reform"===t){const t=(o%12+12)%12,a=s(Math.floor(160*e),Math.floor(100*n)),c=.65*e+.2*n+.15*a+.08*Math.sin(8*e-5*n),d=i(1.8+1.2*c,3.8+1.2*c,t)*(1-i(5+1.7*c,7.2+1.7*c,t));r[0]=Math.sin(9*n+l)*d*(1-d)*24*h,r[1]=-d*(1-d)*(8+12*a)*h,r[2]=.45*-d,r[3]=1-.9*d}return r}function l(t,e){const n=document.createElement("canvas");n.width=t,n.height=e;const o=n.getContext("2d",{willReadFrequently:!0});return{canvas:n,ctx:o}}function h(t,e,n){let o=t+255*e;return o=259*(255*n+255)/(255*(259-255*n))*(o-128)+128,Math.max(0,Math.min(255,o))}function d(t,e,n,o,r,a){if((a?1-t/255:t/255)<.12)return" ";const i=[...e];return i[(o*r+n)%i.length]}var f=[[0,8,2,10],[12,4,14,6],[3,11,1,9],[15,7,13,5]];function m(t,e,n,o){if(o<=0)return t;const r=(f[n%4][e%4]/16-.5)*o*128;return Math.max(0,Math.min(255,t+r))}var u=new Array(256),g=new Array(256);for(let t=0;t<256;t++)u[t]=`rgb(${t},${t},${t})`,g[t]=`rgb(0,${t},0)`;function p(t,e,n,o,r,a=!1){switch(e){case"fullcolor":return`rgb(${t.r},${t.g},${t.b})`;case"matrix":return g[.299*t.r+.587*t.g+.114*t.b|0];case"accent":return`rgb(${n},${o},${r})`;default:{const e=.299*t.r+.587*t.g+.114*t.b|0;return u[e]}}}var M=[0,0,0];function v(t,e,n,o,r,a=!1){switch(e){case"fullcolor":M[0]=t.r,M[1]=t.g,M[2]=t.b;break;case"matrix":{const e=.299*t.r+.587*t.g+.114*t.b|0;M[0]=0,M[1]=e,M[2]=0;break}case"accent":M[0]=n,M[1]=o,M[2]=r;break;default:{const e=.299*t.r+.587*t.g+.114*t.b|0;M[0]=e,M[1]=e,M[2]=e;break}}return M}function w(t){const e=t.match(/rgba?\(\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*(\d+)(?:\s*[,/]\s*([\d.]+))?\s*\)/);return e?{r:+e[1],g:+e[2],b:+e[3],a:void 0!==e[4]?+e[4]:1}:null}function y(t){let e=t;for(;e&&e!==document.documentElement.parentElement;){const t=getComputedStyle(e).backgroundColor;if(t&&"transparent"!==t&&"rgba(0, 0, 0, 0)"!==t){const e=w(t);if(e&&e.a>.1)return e}e=e.parentElement}return null}function x(t){if(t){const e=y(t);if(e){return(.299*e.r+.587*e.g+.114*e.b)/255<.4}}if("undefined"!=typeof document){const t=document.documentElement,e=(t.getAttribute("data-theme")||"").toLowerCase();if("dark"===e)return!0;if("light"===e)return!1;if(t.classList.contains("dark"))return!0;if(document.body){const t=y(document.body);if(t){return(.299*t.r+.587*t.g+.114*t.b)/255<.4}}}return"undefined"!=typeof window&&window.matchMedia("(prefers-color-scheme: dark)").matches}function b(t){if("string"!=typeof t)return t;const e=document.createElement("canvas");e.width=1,e.height=1;const n=e.getContext("2d");n.fillStyle=t,n.fillRect(0,0,1,1);const o=n.getImageData(0,0,1,1).data;return{r:o[0],g:o[1],b:o[2]}}function S(t){return t*t*(3-2*t)}var E={scale:1,offsetX:0,offsetY:0,glow:0,colorBlend:0,proximity:0};function C(t,e,n,o,r,a,i,s,c="spotlight",l=.5,h="circle",d=[],f=1){const m=(t-n)*Math.max(1,f),u=(e-o)*Math.max(1,1/f),g=.08+.35*l+.04*a;let p,M;if("box"===h){const t=Math.abs(m),e=Math.abs(u);p=Math.max(t,e),M=g}else p=Math.sqrt(m*m+u*u),M=g;if(p>=M&&("trail"!==c||0===d.length))return E.scale=1,E.offsetX=0,E.offsetY=0,E.glow=0,E.colorBlend=0,E.proximity=0,E;const v=S(Math.max(0,1-p/M))*r;let w=1,y=0,x=0,b=0,C=0;switch(c){case"spotlight":{w=1+v*a*1.8;const t=Math.atan2(u,m),e=v*v*a*.6;y=Math.cos(t)*e*i,x=Math.sin(t)*e*s,b=v*a*.4,C=v*v*a*.25;break}case"magnify":w=1+v*a*.85,b=v*a*.15;break;case"repel":{w=1;const t=Math.atan2(u,m),e=v*v*a*1.8;y=Math.cos(t)*e*i,x=Math.sin(t)*e*s;break}case"glow":b=v*a*.8,C=v*a*.4;break;case"colorShift":w=1,b=v*a*.12,C=v*a;break;case"attract":{const t=Math.atan2(u,m),e=v*v*a*1;y=(.45*-Math.cos(t)-1.6*Math.sin(t))*e*i,x=(.45*-Math.sin(t)+1.6*Math.cos(t))*e*s,b=v*a*.3;break}case"shatter":{const t=Math.atan2(u,m),e=.5*Math.sin(43.7*m+29.3*u),n=v*a*1.4*(.7+.3*e);y=Math.cos(t+e)*n*i,x=Math.sin(t+e)*n*s,w=Math.max(.1,1-v*a*.6),b=v*a*.25;break}case"trail":{let n=v,o=-u*v,r=m*v;for(const a of d){const i=(t-a.x)*Math.max(1,f),s=(e-a.y)*Math.max(1,1/f),c=Math.hypot(i,s)/g;if(c>=1)continue;const l=S(1-c)*a.intensity;n=Math.max(n,l),o+=(.35*a.vx-2*s)*l*.35,r+=(.35*a.vy+2*i)*l*.35}y=Math.tanh(2*o)*a*i*3,x=Math.tanh(2*r)*a*s*3,C=n*a*.65,b=n*a*.35,w=1+n*a*.08,E.proximity=n;break}case"glitchText":w=1,b=v*a*.5,C=v*a*.6}return E.scale=w,E.offsetX=y,E.offsetY=x,E.glow=b,E.colorBlend=C,"trail"!==c&&(E.proximity=v),E}function T(t,e,{continuous:n=!1,interactive:o=!1}={}){const r=t.parentElement??t;let a=null,i=0,s=!1,c=!0,l=!0,h=-1/0;const d=window.matchMedia("(prefers-reduced-motion: reduce)"),f=()=>{l=!0,s||!c||document.hidden||i||(i=requestAnimationFrame(m))},m=t=>{if(i=0,s||!c||document.hidden)return;const o=!d.matches&&(n||t-h<1500);(l||o)&&(e(t,d.matches?null:a),l=!1),o&&(i=requestAnimationFrame(m))},u=e=>{if("touch"===e.pointerType)return;const n=t.getBoundingClientRect();if(!n.width||!n.height)return;const o=(e.clientX-n.left)/n.width,r=(e.clientY-n.top)/n.height;a=o>=0&&o<=1&&r>=0&&r<=1?{x:o,y:r}:null,h=performance.now(),f()},g=()=>{a=null,h=performance.now(),f()},p=()=>{document.hidden&&i?(cancelAnimationFrame(i),i=0):f()},M="undefined"==typeof IntersectionObserver?null:new IntersectionObserver(([t])=>{c=t.isIntersecting,c?f():i&&(cancelAnimationFrame(i),i=0)});return M?.observe(t),o&&(r.addEventListener("pointermove",u),r.addEventListener("pointerleave",g)),document.addEventListener("visibilitychange",p),d.addEventListener("change",f),f(),{wake:f,stop:()=>{s=!0,cancelAnimationFrame(i),M?.disconnect(),r.removeEventListener("pointermove",u),r.removeEventListener("pointerleave",g),document.removeEventListener("visibilitychange",p),d.removeEventListener("change",f)}}}var A=null,F=null;function L(t,e){if(!A||!F){const n=l(t,e);A=n.canvas,F=n.ctx}return A.width!==t&&(A.width=t),A.height!==e&&(A.height=e),F}var I=new Map,R=new Map,k=new WeakMap;function H(t){const e=Intl.Segmenter;return e?Array.from(new e(void 0,{granularity:"grapheme"}).segment(t),({segment:t})=>t):[...t]}function W(t){let e=I.get(t);return e||(e=H(t),I.set(t,e)),e}function $(t){return H(t)}function P(t,e,n){const o=n?1-t/255:t/255,r=Math.floor(o*(e.length-1));return e[Math.max(0,Math.min(e.length-1,r))]??" "}function j(t,e,n,o){const r=`${t}\0${e?1:0}\0${n}\0${o}`;let a=R.get(r);if(!a){const i=W(t);a=new Array(256);for(let t=0;t<256;t++)a[t]=P(h(t,n,o),i,e);R.set(r,a)}return a}function z(){I.clear(),R.clear(),J=new WeakMap,Z=new WeakMap,Q=new WeakMap,A=null,F=null}function O(t,e){return"auto"!==t?t:!x(e)}function q(t){const e=t.match(/^#([0-9a-fA-F]{3,6})$/);if(e){let t=e[1];if(3===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),6===t.length)return t}const n=t.match(/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/);return n?[n[1],n[2],n[3]].map(t=>parseInt(t).toString(16).padStart(2,"0")).join(""):null}function B(t){const e=t||"auto";if("auto"!==e)return q(e)??"ffffff";if("undefined"!=typeof document){const t=getComputedStyle(document.documentElement);for(const e of["--accent-color","--color-accent","--accent","--color-primary","--primary","--brand-color"]){const n=q(t.getPropertyValue(e).trim());if(n)return n}const e=q(getComputedStyle(document.body).accentColor??"");if(e)return e}return x("undefined"!=typeof document?document.body:null)?"faf9f7":"0d0d0d"}function V(t,e,n){return Math.max(e,Math.min(n,t))}function D(t,e,n){if(!t)return{x:0,y:0,width:e,height:n};const o=t.unit??"percent",r=!1!==t.preserveAspect,a=t=>void 0===t?void 0:"percent"===o?t*e:t,i=t=>void 0===t?void 0:"percent"===o?t*n:t,s=V(a(t.left)??0,0,e-1),c=V(a(t.right)??0,0,e-s-1),l=V(i(t.top)??0,0,n-1),h=V(i(t.bottom)??0,0,n-l-1),d=void 0!==t.left||void 0!==t.right||void 0!==t.top||void 0!==t.bottom,f=Math.max(1,e-s-c),m=Math.max(1,n-l-h),u=d?f:a(t.width),g=d?m:i(t.height);let p=u??e,M=g??n;if(r&&!d){const t=p/e,o=M/n,r=Math.min(t,o),a=void 0===u?o:void 0===g?t:r;p=e*a,M=n*a}p=V(p,1,d?f:e),M=V(M,1,d?m:n);const v=t.anchor??"center",w=a(t.x),y=i(t.y),x=d?s:0,b=d?l:0,S=d?f:e,E=d?m:n,C=v.endsWith("left")||"left"===v?0:v.endsWith("right")||"right"===v?S-p:(S-p)/2,T=v.startsWith("top")||"top"===v?0:v.startsWith("bottom")||"bottom"===v?E-M:(E-M)/2;return{x:V(w??x+C,0,Math.max(0,e-p)),y:V(y??b+T,0,Math.max(0,n-M)),width:p,height:M}}function N(t,e,n,o){const r=t instanceof HTMLVideoElement?t.videoWidth:t.width,a=t instanceof HTMLVideoElement?t.videoHeight:t.height;if(0===r||0===a)return{frame:[],cols:0,rows:0};const i=e.charAspect,s=e.fontSize*e.charSpacing,c=e.fontSize/i*e.charSpacing,l=n||r,f=o||a,u=Math.floor(l/s),g=Math.floor(f/c);if(u<=0||g<=0)return{frame:[],cols:0,rows:0};const p=D(e.sourceCrop,r,a),M=Math.max(1,Math.min(Math.floor(2048/u),Math.floor(p.width/u))),v=Math.max(1,Math.min(Math.floor(2048/g),Math.floor(p.height/g))),w=u*M,y=g*v,x=L(w,y),S=x.globalCompositeOperation;x.globalCompositeOperation="copy";try{x.drawImage(t,p.x,p.y,p.width,p.height,0,0,w,y)}finally{x.globalCompositeOperation=S}const E=x.getImageData(0,0,w,y).data,C=e.chromaKey,T=null!=C&&!1!==C,A=!0===C,F="blue-screen"===C;let I=null,R=0;!T||A||F||(I=b(C),R=(e.chromaKeyTolerance??60)**2);let k=0,H=255;if(e.normalize){let t=255,e=0;for(let n=0;n<E.length;n+=4){if(T){const t=E[n],e=E[n+1],o=E[n+2];let r=!1;if(A)r=e>1.4*t&&e>1.4*o&&e>80;else if(F)r=o>1.4*t&&o>1.4*e&&o>80;else if(null!==I){const n=t-I.r,a=e-I.g,i=o-I.b;r=n*n+a*a+i*i<=R}if(r)continue}const o=.299*E[n]+.587*E[n+1]+.114*E[n+2];o<t&&(t=o),o>e&&(e=o)}k=t,H=e>t?e-t:255}const $=[],z=O(e.invert),q=T&&e.charset.replace(/ /g,"")||e.charset,B=W(q),V=e.customText?null:j(q,z,e.brightness,e.contrast),N=M*v;for(let t=0;t<g;t++){const n=[];for(let o=0;o<u;o++){let r=0,a=0,i=0,s=0,c=0;for(let e=0;e<v;e++){const n=(t*v+e)*w;for(let t=0;t<M;t++){const e=4*(n+o*M+t),l=E[e],h=E[e+1],d=E[e+2],f=E[e+3];if(T){let t=!1;if(A)t=h>1.4*l&&h>1.4*d&&h>80;else if(F)t=d>1.4*l&&d>1.4*h&&d>80;else if(null!==I){const e=l-I.r,n=h-I.g,o=d-I.b;t=e*e+n*n+o*o<=R}if(t){c++;continue}}r+=l,a+=h,i+=d,s+=f}}if(T&&c>N/2){n.push({char:" ",r:0,g:0,b:0,a:0});continue}const l=N-c,f=l>0?r/l:0,g=l>0?a/l:0,p=l>0?i/l:0,y=l>0?s/l:0,x=.299*f+.587*g+.114*p,b=e.normalize?(x-k)/H*255:x,S=h(b,e.brightness,e.contrast),C=e.ditherStrength>0?m(S,o,t,e.ditherStrength):S,L=e.customText?d(C,e.customText,o,t,u,z):e.ditherStrength>0?P(C,B,z):V[Math.max(0,Math.min(255,0|b))];n.push({char:L,r:f,g:g,b:p,a:y,lum:C})}$.push(n)}return{frame:$,cols:u,rows:g}}function U(t,e,n,o){const r=t instanceof HTMLVideoElement?t.videoWidth:t.width,a=t instanceof HTMLVideoElement?t.videoHeight:t.height;if(0===r||0===a)return{rows:[],cols:0,rowCount:0};const i=e.charAspect,s=e.fontSize*e.charSpacing,c=e.fontSize/i*e.charSpacing,l=n||r,d=o||a,f=Math.floor(l/s),u=Math.floor(d/c);if(f<=0||u<=0)return{rows:[],cols:0,rowCount:0};const g=f,p=u,M=L(g,p),v=D(e.sourceCrop,r,a),w=M.globalCompositeOperation;M.globalCompositeOperation="copy";try{M.drawImage(t,v.x,v.y,v.width,v.height,0,0,g,p)}finally{M.globalCompositeOperation=w}const y=M.getImageData(0,0,g,p).data,x=e.chromaKey,S=null!=x&&!1!==x,E=!0===x,C="blue-screen"===x;let T=null,A=0;!S||E||C||(T=b(x),A=(e.chromaKeyTolerance??60)**2);let F=0,I=255;if(e.normalize){let t=255,e=0;for(let n=0;n<y.length;n+=4){if(S){const t=y[n],e=y[n+1],o=y[n+2];let r=!1;if(E)r=e>1.4*t&&e>1.4*o&&e>80;else if(C)r=o>1.4*t&&o>1.4*e&&o>80;else if(null!==T){const n=t-T.r,a=e-T.g,i=o-T.b;r=n*n+a*a+i*i<=A}if(r)continue}const o=.299*y[n]+.587*y[n+1]+.114*y[n+2];o<t&&(t=o),o>e&&(e=o)}F=t,I=e>t?e-t:255}const R=O(e.invert),k=S&&e.charset.replace(/ /g,"")||e.charset,H=W(k),$=e.customText?null:j(k,R,e.brightness,e.contrast),z=e.customText?W(e.customText):null,q="fullcolor"===e.colorMode?new Uint8ClampedArray(f*u*4):void 0,B=[];for(let t=0;t<u;t++){let n="";for(let o=0;o<f;o++){const r=4*(t*g+o),a=r,i=y[r],s=y[r+1],c=y[r+2],l=y[r+3];if(S){let t=!1;if(E)t=s>1.4*i&&s>1.4*c&&s>80;else if(C)t=c>1.4*i&&c>1.4*s&&c>80;else if(null!==T){const e=i-T.r,n=s-T.g,o=c-T.b;t=e*e+n*n+o*o<=A}if(t){n+=" ",q&&(q[a]=0,q[a+1]=0,q[a+2]=0,q[a+3]=0);continue}}q&&(q[a]=i,q[a+1]=s,q[a+2]=c,q[a+3]=l);const d=.299*i+.587*s+.114*c,u=e.normalize?(d-F)/I*255:d,p=e.ditherStrength>0||z?h(u,e.brightness,e.contrast):u,M=e.ditherStrength>0?m(p,o,t,e.ditherStrength):p;if(z){n+=(R?1-M/255:M/255)<.12?" ":z[(t*f+o)%z.length]}else e.ditherStrength<=0?n+=$[Math.max(0,Math.min(255,0|u))]:n+=P(M,H,R)}B.push(n)}return{rows:B,cols:f,rowCount:u,colors:q}}function K(t,e,n,o,r){if(0===e.rows.length)return;const a=t.canvas,i=Boolean(n.chromaKey)||e.rows.some(t=>t.includes(" "));i||(k.delete(t),t.clearRect(0,0,o,r),t.fillStyle=x(a)?"#0a0a0a":"#faf9f7",t.fillRect(0,0,o,r));const s=B(n.accentColor),c=parseInt(s.substring(0,2),16),l=parseInt(s.substring(2,4),16),h=parseInt(s.substring(4,6),16),d=o/e.cols,f=r/e.rowCount,m=.9*Math.min(d/.55,f),u=e.colors;if("fullcolor"===n.colorMode&&u){k.delete(t),t.clearRect(0,0,o,r),t.font=`${m}px "JetBrains Mono", monospace`,t.textAlign="left",t.textBaseline="middle",t.globalAlpha=1;let n="";for(let o=0;o<e.rows.length;o++){const r=$(e.rows[o]);let a=0;for(;a<e.cols;){for(;a<e.cols&&" "===r[a];)a++;if(a>=e.cols)break;const i=a,s=4*(o*e.cols+a),c=240&u[s],l=240&u[s+1],h=240&u[s+2];for(a++;a<e.cols&&" "!==r[a];){const t=4*(o*e.cols+a);if((240&u[t])!==c||(240&u[t+1])!==l||(240&u[t+2])!==h)break;a++}const m=`rgb(${c},${l},${h})`;m!==n&&(t.fillStyle=m,n=m),t.fillText(r.slice(i,a).join(""),i*d+.5*d,o*f+.5*f)}}return void(t.globalAlpha=1)}t.font=`${m}px "JetBrains Mono", monospace`,t.textAlign="left",t.textBaseline="middle";const g="matrix"===n.colorMode?"rgb(0,255,0)":"grayscale"===n.colorMode?x(a)?"rgb(230,230,230)":"rgb(24,24,24)":`rgb(${c},${l},${h})`;t.fillStyle=g,t.globalAlpha=1;const p=k.get(t),M=i&&p&&p.cols===e.cols&&p.rowCount===e.rowCount&&p.canvasWidth===o&&p.canvasHeight===r&&p.fillStyle===g;M||t.clearRect(0,0,o,r);for(let n=0;n<e.rows.length;n++){const r=e.rows[n];M&&p.rows[n]===r||(M&&t.clearRect(0,n*f,o,f+1),0!==r.trim().length&&t.fillText(r,.5*d,n*f+.5*f))}k.set(t,{rows:e.rows.slice(),cols:e.cols,rowCount:e.rowCount,canvasWidth:o,canvasHeight:r,fillStyle:g}),t.globalAlpha=1}async function Y(t,e,n,o,r=12,a=10,i,s=0){const c=Math.min(t.duration-s,a),l=Math.ceil(c*r),h=[];let d=0,f=0;for(let a=0;a<l;a++){const m=s+a/r;if(m>s+c)break;t.currentTime=m,await new Promise(e=>{const n=()=>{t.removeEventListener("seeked",n),e()};t.addEventListener("seeked",n)});const u=N(t,e,n,o);h.push(u.frame),d=u.cols,f=u.rows,i?.((a+1)/l)}return{frames:h,cols:d,rows:f,fps:r}}async function X(t,e,n,o,r=12,a=10,i,s=0){const c=Math.min(t.duration-s,a),l=Math.ceil(c*r),h=[];let d=0,f=0;for(let a=0;a<l;a++){const m=s+a/r;if(m>s+c)break;t.currentTime=m,await new Promise(e=>{const n=()=>{t.removeEventListener("seeked",n),e()};t.addEventListener("seeked",n)});const u=U(t,e,n,o);h.push(u),d=u.cols,f=u.rowCount,i?.((a+1)/l)}return{frames:h,cols:d,rows:f,fps:r}}async function G(t,e,n,o,r){const{parseGIF:a,decompressFrames:i}=await import("gifuct-js"),s=a(t),c=i(s,!0);if(0===c.length)return{frames:[],cols:0,rows:0,fps:10};const l=c[0].dims.width,h=c[0].dims.height,d=s.lsd?.width||l,f=s.lsd?.height||h,m=document.createElement("canvas");m.width=d,m.height=f;const u=m.getContext("2d"),g=document.createElement("canvas");g.width=d,g.height=f;const p=g.getContext("2d"),M=document.createElement("canvas"),v=M.getContext("2d"),w=[];let y=0,x=0,b=0;for(const t of c)b+=t.delay||100;const S=b/c.length,E=Math.round(Math.min(30,Math.max(5,1e3/S))),C=Math.min(c.length,300);for(let t=0;t<C;t++){const a=c[t],{dims:i,patch:s,disposalType:l}=a;3===l&&(p.clearRect(0,0,d,f),p.drawImage(m,0,0)),M.width!==i.width&&(M.width=i.width),M.height!==i.height&&(M.height=i.height);const h=new ImageData(new Uint8ClampedArray(s.buffer),i.width,i.height);v.putImageData(h,0,0),u.drawImage(M,i.left||0,i.top||0);const b=N(m,e,n,o);w.push(b.frame),y=b.cols,x=b.rows,2===l?u.clearRect(i.left||0,i.top||0,i.width,i.height):3===l&&(u.clearRect(0,0,d,f),u.drawImage(g,0,0)),r?.((t+1)/C)}return{frames:w,cols:y,rows:x,fps:E}}async function _(t,e,n,o,r){const{parseGIF:a,decompressFrames:i}=await import("gifuct-js"),s=a(t),c=i(s,!0);if(0===c.length)return{frames:[],cols:0,rows:0,fps:10};const l=c[0].dims.width,h=c[0].dims.height,d=s.lsd?.width||l,f=s.lsd?.height||h,m=document.createElement("canvas");m.width=d,m.height=f;const u=m.getContext("2d"),g=document.createElement("canvas");g.width=d,g.height=f;const p=g.getContext("2d"),M=document.createElement("canvas"),v=M.getContext("2d"),w=[];let y=0,x=0,b=0;for(const t of c)b+=t.delay||100;const S=b/c.length,E=Math.round(Math.min(30,Math.max(5,1e3/S))),C=Math.min(c.length,300);for(let t=0;t<C;t++){const a=c[t],{dims:i,patch:s,disposalType:l}=a;3===l&&(p.clearRect(0,0,d,f),p.drawImage(m,0,0)),M.width!==i.width&&(M.width=i.width),M.height!==i.height&&(M.height=i.height);const h=new ImageData(new Uint8ClampedArray(s.buffer),i.width,i.height);v.putImageData(h,0,0),u.drawImage(M,i.left||0,i.top||0);const b=U(m,e,n,o);w.push(b),y=b.cols,x=b.rowCount,2===l?u.clearRect(i.left||0,i.top||0,i.width,i.height):3===l&&(u.clearRect(0,0,d,f),u.drawImage(g,0,0)),r?.((t+1)/C)}return{frames:w,cols:y,rows:x,fps:E}}var J=new WeakMap,Q=new WeakMap,Z=new WeakMap;function tt(t,e,n,o,r,a=0,i){if(!e.length||!e[0].length||o<=0||r<=0)return;let s=null;if(n.hoverStrength>0){let e=J.get(t);e||(e={x:.5,y:.5,intensity:0,time:-1,emittedAt:-1,points:[]},J.set(t,e)),s=function(t,e,n){const o=t.time<0?1/60:Math.max(0,Math.min(.1,(n-t.time)/1e3));t.time=n;const r=t.intensity<.003,a=t.x,i=t.y;if(e){r&&(t.x=e.x,t.y=e.y);const n=1-Math.exp(-o/.055);t.x+=(e.x-t.x)*n,t.y+=(e.y-t.y)*n}t.intensity+=((e?.intensity??(e?1:0))-t.intensity)*(1-Math.exp(-o/(e?.09:.18)));const s=Math.exp(-o/.22);for(const e of t.points)e.intensity*=s;for(;t.points.length&&t.points[0].intensity<.01;)t.points.shift();return e&&!r&&n-t.emittedAt>=24&&Math.hypot(t.x-a,t.y-i)>5e-4&&(t.points.push({x:t.x,y:t.y,intensity:t.intensity,vx:Math.max(-1,Math.min(1,(t.x-a)/Math.max(o,.001))),vy:Math.max(-1,Math.min(1,(t.y-i)/Math.max(o,.001)))}),t.points.length>12&&t.points.shift(),t.emittedAt=n),!e&&t.intensity<.003&&!t.points.length?(t.intensity=0,null):{x:t.x,y:t.y,intensity:t.intensity,trail:t.points}}(e,i??null,performance.now())}else J.delete(t);if("none"!==n.animationStyle||n.charsetFrames?.length||n.hoverStrength<=0)return Z.delete(t),void et(t,e,n,o,r,a,s);const c=Q.get(t);if(c?.frame!==e)return Q.set(t,{frame:e,since:performance.now()}),Z.delete(t),void et(t,e,n,o,r,a,s);if(performance.now()-c.since<100)return void et(t,e,n,o,r,a,s);const l=t.getTransform();if(l.b||l.c||l.a<=0||l.d<=0)return void et(t,e,n,o,r,a,s);if(!s||(s.intensity??0)<.003)return void et(t,e,n,o,r,a,null);const h=x(t.canvas),d={...n,accentColor:"#"+B(n.accentColor)},f=JSON.stringify([d,o,r,l.a,l.d,h,void 0!==document.fonts?document.fonts.status:"loaded"]);let m=Z.get(t);if(!m||m.frame!==e||m.key!==f){const n=m?.canvas??document.createElement("canvas");n.width=Math.ceil(o*l.a),n.height=Math.ceil(r*l.d);const a=n.getContext("2d");a.setTransform(l.a,0,0,l.d,0,0),et(a,e,d,o,r,0,null,void 0,h),m={frame:e,key:f,canvas:n},Z.set(t,m)}if(t.clearRect(0,0,o,r),t.drawImage(m.canvas,0,0,o,r),!s||(s.intensity??0)<.003)return;const u=e.length,g=e[0].length,p=.08+.35*n.hoverRadius+.04*n.hoverStrength,M="trail"===n.hoverEffect?[s,...s.trail??[]]:[s];let v=1,w=1,y=0,b=0;for(const t of M)v=Math.min(v,t.x-p),y=Math.max(y,t.x+p),w=Math.min(w,t.y-p),b=Math.max(b,t.y+p);if("glitchText"===n.hoverEffect){const t=n.hoverText,e=Math.max(1,...(Array.isArray(t)?t:[t]).map(t=>t.length));v=Math.min(v,s.x-e/g),y=Math.max(y,s.x+e/g)}const S=Math.ceil(5+4*n.hoverStrength),E={x:Math.max(0,Math.floor(v*g)-S),y:Math.max(0,Math.floor(w*u)-S),right:Math.min(g,Math.ceil(y*g)+S),bottom:Math.min(u,Math.ceil(b*u)+S)};t.save(),t.beginPath(),t.rect(E.x*o/g,E.y*r/u,(E.right-E.x)*o/g,(E.bottom-E.y)*r/u),t.clip(),et(t,e,d,o,r,a,s,E,h),t.restore()}function et(t,e,n,o,a,i=0,s,l,h){const d=e.length;if(0===d)return;const f=e[0].length;t.clearRect(0,0,o,a);let m=!1;const u=Math.max(1,d>>2),g=Math.max(1,f>>2);t:for(let t=0;t<d;t+=u){const n=e[t];for(let t=0;t<f;t+=g)if(n[t].a<200){m=!0;break t}}const M=t.canvas,w=h??x(M);m||(t.fillStyle=w?"#0a0a0a":"#faf9f7",t.fillRect(0,0,o,a));const y=o/f,b=a/d,S=s?.intensity??1,E=!!(s&&n.hoverStrength>0&&S>.005),T="#"+(q(n.hoverColor||"#ffffff")??"ffffff"),A=parseInt(T.slice(1,3),16),F=parseInt(T.slice(3,5),16),L=parseInt(T.slice(5,7),16),I=B(n.accentColor),R=parseInt(I.substring(0,2),16),k=parseInt(I.substring(2,4),16),H=parseInt(I.substring(4,6),16),$=n.hoverRadius;let j=0,z=f,V=0,D=d,N=0,U=0;if(E&&s){N=s.x,U=s.y;const t=.08+.35*$+.04*n.hoverStrength;j=Math.max(0,Math.floor((N-t)*f)-1),z=Math.min(f,Math.ceil((N+t)*f)+1),V=Math.max(0,Math.floor((U-t)*d)-1),D=Math.min(d,Math.ceil((U+t)*d)+1)}if(E&&"trail"===n.hoverEffect)for(const t of s?.trail??[]){const e=.08+.35*$+.04*n.hoverStrength;j=Math.min(j,Math.max(0,Math.floor((t.x-e)*f)-1)),z=Math.max(z,Math.min(f,Math.ceil((t.x+e)*f)+1)),V=Math.min(V,Math.max(0,Math.floor((t.y-e)*d)-1)),D=Math.max(D,Math.min(d,Math.ceil((t.y+e)*d)+1))}const K=n.animationStyle,Y=n.animationSpeed,X=(G=K,r.find(t=>t.value===G||t.mode===G)?.mode??"none");var G;const _="none"===X,J=[0,0,0,1],Q=n.hoverStrength,Z=n.hoverEffect,tt=$,et=n.hoverShape||"circle",nt=O(n.invert,M),ot=n.colorMode,rt=2*Math.PI,at=1/f,it=1/d;let st="",ct=-1;if("dots"===n.renderMode){const r=.5*Math.min(y,b)*n.dotSizeRatio;for(let n=l?.y??0;n<(l?.bottom??d);n++){const h=e[n];for(let e=l?.x??0;e<(l?.right??f);e++){const l=h[e];if(l.a<10)continue;const m=.00392156863*(.299*l.r+.587*l.g+.114*l.b),u=nt?1-m:m;if(u<.02)continue;_||c(X,e/f,n/d,i*Y,J,(.299*l.r+.587*l.g+.114*l.b)/255);const g=Math.max(0,Math.min(1,(1+J[2])*J[3]));let M=1,w=0,x=0,T=0,I=0;if(E&&e>=j&&e<=z&&n>=V&&n<=D){const t=C(e*at,n*it,N,U,S,Q,y,b,Z,tt,et,s?.trail,o/a);M=t.scale,w=t.offsetX,x=t.offsetY,T=t.glow,I=t.colorBlend}const W=r*u*g*M;if(W<.3)continue;const $=e*y+.5*y+w+J[0],P=n*b+.5*b+x+J[1];let O;if(I>0){const t=v(l,ot,R,k,H,nt);O=`rgb(${Math.min(255,t[0]+(A-t[0])*I|0)},${Math.min(255,t[1]+(F-t[1])*I|0)},${Math.min(255,t[2]+(L-t[2])*I|0)})`}else O=p(l,ot,R,k,H,nt);const q=Math.min(1,.00392156863*l.a*g*(1+T));if(q!==ct&&(t.globalAlpha=q,ct=q),O!==st&&(t.fillStyle=O,st=O),W<=3){const e=2*W;t.fillRect($-W,P-W,e,e)}else t.beginPath(),t.arc($,P,W,0,rt),t.fill()}}}else{const r=.55,h=.9*Math.min(y/r,b);{const e=/\p{Extended_Pictographic}/u.test(n.customText||n.charset);t.font=e?`${h}px "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Twemoji Mozilla", sans-serif`:`${h}px "JetBrains Mono", monospace`,t.textAlign="center",t.textBaseline="middle"}const m=n.charsetFrames,u=!!m?.length,g=u?m[Math.floor(Math.max(0,i)*(n.charsetFps??2))%m.length]:n.charset,M=t.getTransform();if(!E&&_&&!u&&"accent"===ot&&!l&&n.hoverStrength<=0&&!/\p{Extended_Pictographic}/u.test(n.customText||n.charset)&&"letterSpacing"in t&&/^[\x20-\x7e]*$/.test(n.customText||n.charset)&&e.every(t=>t.every(t=>t.a<10||255===t.a&&1===t.char.length&&/^[\x20-\x7e]$/.test(t.char)))){const n=t.letterSpacing;t.letterSpacing="0px";const o=t.measureText("M").width;t.letterSpacing=y-o+"px",t.fillStyle=`rgb(${R},${k},${H})`,t.globalAlpha=1,t.textAlign="left";for(let n=0;n<d;n++){const r=e[n];let a="";for(let t=0;t<f;t++){const e=r[t];a+=e.a<10?" ":e.char}0!==a.trim().length&&t.fillText(a,.5*(y-o),n*b+.5*b)}return t.letterSpacing=n,t.textAlign="center",void(t.globalAlpha=1)}const w="glitchText"===Z&&E,x="!@#$%^&*<>{}[]|/\\~`0123456789",T=x.length;let I="",O=0,q=0,B=0,K=0,G=0,rt=0;if(w){const t=n.hoverText??"ASCIIFY";if(q=Math.round(N*f),B=Math.round(U*d),Array.isArray(t)){const e=t.filter(t=>t.length>0);0===e.length&&e.push("ASCIIFY");I=e[((7*Math.floor(q/Math.max(1,Math.ceil(f/5)))+13*Math.floor(B/Math.max(1,Math.ceil(d/3))))%e.length+e.length)%e.length]}else I=t||"ASCIIFY";O=I.length,K=Math.max(3,Math.min(12,Math.round(d*$*.6)));const e=Math.floor(K/2);G=Math.max(0,B-e),G+K>d&&(G=Math.max(0,d-K)),rt=q-Math.floor(O/2)}for(let n=l?.y??0;n<(l?.bottom??d);n++){const r=e[n];for(let h=l?.x??0;h<(l?.right??f);h++){const l=r[h];if(l.a<10)continue;let m=u&&null!=l.lum?P(l.lum,W(g),nt):l.char;if(" "===m)continue;_||c(X,h/f,n/d,i*Y,J,(.299*l.r+.587*l.g+.114*l.b)/255);const $=Math.max(0,Math.min(1,(1+J[2])*J[3]));if($<.05)continue;let lt=1,ht=0,dt=0,ft=0,mt=0;if(E&&!w&&h>=j&&h<=z&&n>=V&&n<=D){const t=C(h*at,n*it,N,U,S,Q,y,b,Z,tt,et,s?.trail,o/a);if(lt=t.scale,ht=t.offsetX,dt=t.offsetY,ft=t.glow,mt=t.colorBlend,"trail"===Z&&t.proximity>0){const o=Math.max(0,Math.min(f-1,Math.round(h-t.offsetX/y))),r=e[Math.max(0,Math.min(d-1,Math.round(n-t.offsetY/b)))][o],a=r.lum??.299*r.r+.587*r.g+.114*r.b;m=P(Math.min(255,a+t.proximity*Q*65),W(g),nt)}}if(w&&n>=G&&n<G+K){const t=h-rt;if(t>=0&&t<O){const e=I[t],o=Math.abs(n-B)/Math.max(1,.5*K),r=Math.abs(h-q)/Math.max(1,O),a=Math.max(o,r),s=Math.max(0,Math.min(1,1-.9*a)),c=43758.5453*Math.sin(127.1*h+311.7*n+43758.5453*Math.floor(12*i));m=Math.abs(c-Math.floor(c))<s?e:x[Math.abs(Math.floor(97*c))%T],ft=.3+.7*s,mt=.3+.65*s}}const ut=h*y+.5*y+ht+J[0],gt=n*b+.5*b+dt+J[1];let pt;if(mt>0){const t=v(l,ot,R,k,H,nt);pt=`rgb(${Math.min(255,t[0]+(A-t[0])*mt|0)},${Math.min(255,t[1]+(F-t[1])*mt|0)},${Math.min(255,t[2]+(L-t[2])*mt|0)})`}else pt=p(l,ot,R,k,H,nt);const Mt=Math.min(1,.00392156863*l.a*$*(1+ft));Mt!==ct&&(t.globalAlpha=Mt,ct=Mt),pt!==st&&(t.fillStyle=pt,st=pt),1!==lt?(t.translate(ut,gt),t.scale(lt,lt),t.fillText(m,0,0),t.setTransform(M)):t.fillText(m,ut,gt)}}}t.globalAlpha=1}function nt(t="classic"){if("classic"!==t)throw new RangeError(`Art preset "${String(t)}" was removed in 4.1. Use a StudioStyle with asciify-engine/studio, or supply options.charset directly.`);return{artStyle:"classic"}}function ot(t){return Math.max(0,Math.min(1,t))}function rt(t){return"string"==typeof t?document.querySelector(t):t instanceof HTMLElement?t:null}function at(t){return"ascii"===t.renderMode&&"none"===t.animationStyle&&t.hoverStrength<=0&&!t.charsetFrames?.length}function it(t,e={}){const n=ot(t),o=ot(n*(void 0===e.speed?1:Math.max(.001,e.speed)));return ot(e.ease?e.ease(o):o)}function st(t,e,n={}){if(!Number.isFinite(t.duration)||t.duration<=0)return;const o=n.from??0,r=n.to??t.duration,a=Math.max(o,Math.min(r,t.duration)),i=it(e,n),s=o+(a-o)*i;t.currentTime=Math.min(Math.max(o,s),Math.max(o,a-.04)),n.onUpdate?.(i,t)}function ct(t,e){return Math.abs(t.currentTime-e)<1/240?lt(t):new Promise(n=>{const o=()=>{t.removeEventListener("seeked",o),n()};t.addEventListener("seeked",o,{once:!0});const r=t.fastSeek;r?r.call(t,e):t.currentTime=e})}function lt(t){const e=t.requestVideoFrameCallback;return new Promise(e?n=>{let o=!1;const r=()=>{o||(o=!0,n())};e.call(t,r),window.setTimeout(r,32)}:t=>requestAnimationFrame(()=>t()))}function ht(t,e={}){const n=rt(e.trigger)??t;t.pause();const o=e.gsap,r=e.ScrollTrigger??o?.ScrollTrigger;if(o&&r?.create){o.registerPlugin?.(r);const a=r.create({trigger:n,start:e.start??"top bottom",end:e.end??"bottom top",scrub:e.scrub??!0,onUpdate:n=>st(t,n.progress,e)});return()=>a.kill?.()}return function(t,e,n){let o=0;const r=()=>{o=0;const r=e.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight,i=r.height+a,s=i>0?ot((a-r.top)/i):0;st(t,s,n)},a=()=>{o||(o=requestAnimationFrame(r))};return window.addEventListener("scroll",a,{passive:!0}),window.addEventListener("resize",a),a(),()=>{window.removeEventListener("scroll",a),window.removeEventListener("resize",a),o&&cancelAnimationFrame(o)}}(t,n,e)}function dt(t,e,n){const o=e.gsap,r=e.ScrollTrigger??o?.ScrollTrigger;if(o&&r?.create){o.registerPlugin?.(r);const a=r.create({trigger:t,start:e.start??"top bottom",end:e.end??"bottom top",scrub:e.scrub??!0,onUpdate:t=>n(t.progress)});return()=>a.kill?.()}return function(t,e){let n=0;const o=()=>{n=0;const o=t.getBoundingClientRect(),r=window.innerHeight||document.documentElement.clientHeight,a=o.height+r,i=a>0?ot((r-o.top)/a):0;e(i)},r=()=>{n||(n=requestAnimationFrame(o))};return window.addEventListener("scroll",r,{passive:!0}),window.addEventListener("resize",r),r(),()=>{window.removeEventListener("scroll",r),window.removeEventListener("resize",r),n&&cancelAnimationFrame(n)}}(t,n)}function ft(t,e,n){if(!t||!e||!n.sourceCrop)return{w:t,h:e};const o=D(n.sourceCrop,t,e);return{w:Math.max(1,Math.round(o.width)),h:Math.max(1,Math.round(o.height))}}function mt(t,e,n,o){const r=o.chromaKey;if(null==r||!1===r)return!1;if(!0===r)return e>1.4*t&&e>1.4*n&&e>80;if("blue-screen"===r)return n>1.4*t&&n>1.4*e&&n>80;const a=b(r),i=(o.chromaKeyTolerance??60)**2,s=t-a.r,c=e-a.g,l=n-a.b;return s*s+c*c+l*l<=i}function ut(t,e,n){if(!e.chromaKey||!e.sourceCrop||"off"===e.chromaKeyTrimMode)return e;const o=t instanceof HTMLVideoElement?t.videoWidth:t.width,r=t instanceof HTMLVideoElement?t.videoHeight:t.height;if(!o||!r)return e;const a=D(e.sourceCrop,o,r),i=Math.min(360,Math.max(1,Math.round(a.width))),s=Math.max(1,Math.round(i*(a.height/a.width))),{ctx:c}=l(i,s);c.drawImage(t,a.x,a.y,a.width,a.height,0,0,i,s);const h=c.getImageData(0,0,i,s).data,d=Math.max(0,Math.min(255,e.chromaKeyTrimLuminanceThreshold??0));let f=i,m=s,u=-1,g=-1;for(let t=0;t<s;t++)for(let n=0;n<i;n++){const o=4*(t*i+n),r=h[o+3],a=h[o],s=h[o+1],c=h[o+2];r<=8||.2126*a+.7152*s+.0722*c<=d||mt(a,s,c,e)||(n<f&&(f=n),t<m&&(m=t),n>u&&(u=n),t>g&&(g=t))}if(u<f||g<m)return e;const p=Math.max(0,Math.min(.25,e.chromaKeyTrimPadding??.002)),M=Math.round(i*p),v=Math.round(s*p);f=Math.max(0,f-M),m=Math.max(0,m-v),u=Math.min(i-1,u+M),g=Math.min(s-1,g+v);const w=function(t,e,n,o,r){const a=r&&Number.isFinite(r)&&r>0?r:null;if(!a)return t;const i=e.x,s=e.y,c=e.x+e.width,l=e.y+e.height,h=Math.max(i,t.left),d=Math.max(s,t.top),f=Math.min(c,n-t.right),m=Math.min(l,o-t.bottom),u=Math.max(1,f-h),g=Math.max(1,m-d),p=h+u/2,M=d+g/2;let v=u,w=g;v/w<a?v=w*a:w=v/a;v>e.width&&(v=e.width,w=Math.max(g,Math.min(e.height,v/a)));w>e.height&&(w=e.height,v=Math.max(u,Math.min(e.width,w*a)));let y=p-v/2,x=M-w/2;return y=Math.max(i,Math.min(c-v,y)),x=Math.max(s,Math.min(l-w,x)),{left:y,top:x,right:n-(y+v),bottom:o-(x+w)}}({left:a.x+f/i*a.width,top:a.y+m/s*a.height,right:o-(a.x+(u+1)/i*a.width),bottom:r-(a.y+(g+1)/s*a.height)},{x:a.x,y:a.y,width:a.width,height:a.height},o,r,n);return{...e,sourceCrop:{unit:"pixel",...w,preserveAspect:!1}}}function gt(t){const e=t.sourceCrop;return e&&"pixel"===e.unit?void 0===e.left||void 0===e.top||void 0===e.right||void 0===e.bottom?null:{left:e.left,top:e.top,right:e.right,bottom:e.bottom}:null}async function pt(t,e,n,o,r){if(!e.chromaKey||!e.sourceCrop||"range"!==e.chromaKeyTrimMode)return e;const a=t.currentTime,i=function(t,e,n,o){const r=!0===o?{}:o||{},a=Math.max(0,r.from??e),i=r.to??n??(Number.isFinite(t.duration)?t.duration:a),s=Math.max(a,i-.04),c=Math.max(0,s-a),l=c>.1?[a,a+.25*c,a+.5*c,a+.75*c,s]:[a];return Array.from(new Set(l.map(t=>Math.max(0,Number(t.toFixed(3))))))}(t,n,o,r);let s=null;for(const n of i){await ct(t,n),await lt(t);const o=gt(ut(t,e));o&&(s=s?{left:Math.min(s.left,o.left),top:Math.min(s.top,o.top),right:Math.min(s.right,o.right),bottom:Math.min(s.bottom,o.bottom)}:o)}return await ct(t,a),await lt(t),s?{...e,sourceCrop:{unit:"pixel",...s,preserveAspect:!0}}:e}function Mt(t,e,n=2048){return vt({sourceWidth:t,sourceHeight:e,maxRenderDimension:n})}function vt({sourceWidth:t,sourceHeight:e,cssWidth:n=0,cssHeight:o=0,maxRenderDimension:r=2048}){const a=Math.max(1,t),i=Math.max(1,e),s=a/i,c=Math.max(1,r),l=Math.min(1,c/Math.max(a,i)),h=Math.max(a,i)*l,d=Math.max(0,n,o),f=Math.min(c,Math.max(h,d));return s>=1?{renderW:Math.round(f),renderH:Math.round(f/s)}:{renderW:Math.round(f*s),renderH:Math.round(f)}}function wt(t,e,n,o){if(void 0===t)return;if("number"==typeof t)return t;const r=t.trim();if(r.endsWith("%")){const t=Number.parseFloat(r)/100;return Number.isFinite(t)?e*t:void 0}if(r.endsWith("px")){const t=Number.parseFloat(r);return Number.isFinite(t)?t:void 0}if(r.endsWith("vw")){const t=Number.parseFloat(r)/100;return Number.isFinite(t)?n*t:void 0}if(r.endsWith("vh")){const t=Number.parseFloat(r)/100;return Number.isFinite(t)?o*t:void 0}}function yt(t,e,n,o,r,a=2048,i={}){const{width:s,height:c}=e.getBoundingClientRect();if(!s||!c)return{renderW:0,renderH:0,dpr:1};const l="undefined"!=typeof window?window.innerWidth:s,h="undefined"!=typeof window?window.innerHeight:c,d=wt(i.width,s,l,h)??s,f=wt(i.height,c,l,h)??c,m=function(t,e,n,o,r){const a=t=>{const n=wt(t,e,o,r);return n&&n>0?n:0},i=t=>{const e=wt(t,n,o,r);return e&&e>0?e:0};return void 0===t?{x:0,y:0}:"number"==typeof t||"string"==typeof t?{x:a(t),y:i(t)}:{x:a(t.x),y:i(t.y)}}(i.bleed,s,c,l,h),u=d+2*m.x,g=f+2*m.y,{cssW:p,cssH:M}=function(t,e,n,o="contain"){if("fill"===o)return{cssW:t,cssH:e};let r=t,a=r/n;const i="cover"===o,s=a>e;return(i&&!s||!i&&s)&&(a=e,r=a*n),"scale-down"===o&&(r=Math.min(r,t),a=Math.min(a,e)),{cssW:Math.round(r),cssH:Math.round(a)}}(u,g,n,i.objectFit??"contain"),v="undefined"!=typeof window&&window.devicePixelRatio||1;let w,y;o&&r?({renderW:w,renderH:y}=vt({sourceWidth:o,sourceHeight:r,cssWidth:p,cssHeight:M,maxRenderDimension:a})):(w=p,y=M);const x=8e6,b=w*v*y*v>x?Math.sqrt(x/(w*y)):v;return t.width=Math.round(w*b),t.height=Math.round(y*b),t.style.width=`${p}px`,t.style.height=`${M}px`,{renderW:w,renderH:y,dpr:b}}async function xt(t,e,{fontSize:o,artStyle:r="classic",options:a={}}={}){let i;if("string"==typeof t){const e=new Image;e.crossOrigin="anonymous",await new Promise((n,o)=>{e.onload=()=>n(),e.onerror=()=>o(new Error(`Failed to load image: ${t}`)),e.src=t}),i=e}else t instanceof HTMLImageElement&&!t.complete?(await new Promise((e,n)=>{t.onload=()=>e(),t.onerror=()=>n(new Error("Image failed to load"))}),i=t):i=t;const s=nt(r),c=o??a.fontSize??10,l={...n,...s,artStyle:r,...a,fontSize:c},h=e.getContext("2d");if(!h)throw new Error("Could not get 2d context from canvas");const{w:d,h:f}=function(t){return t instanceof HTMLVideoElement?{w:t.videoWidth,h:t.videoHeight}:t instanceof HTMLImageElement?{w:t.naturalWidth||t.width,h:t.naturalHeight||t.height}:{w:t.width,h:t.height}}(i),{renderW:m,renderH:u}=Mt(d,f),g="undefined"!=typeof window&&window.devicePixelRatio||1,p=8e6,M=m*g*u*g>p?Math.sqrt(p/(m*u)):g;e.width===Math.round(m*M)&&e.height===Math.round(u*M)||(e.width=Math.round(m*M),e.height=Math.round(u*M));const{frame:v}=N(i,l,m,u),w=(t,e)=>{h.save(),h.setTransform(M,0,0,M,0,0),tt(h,v,l,m,u,t/1e3,e),h.restore()};w(0,null);return T(e,w,{continuous:"none"!==l.animationStyle||!!l.charsetFrames?.length,interactive:l.hoverStrength>0}).stop}async function bt(t,e,{fontSize:o,artStyle:r="classic",options:a={}}={}){const i="string"==typeof t?await fetch(t).then(t=>t.arrayBuffer()):t,s=o??a.fontSize??10;let c={...n,...nt(r),artStyle:r,...a,fontSize:s};const l=e.getContext("2d");if(!l)throw new Error("Could not get 2d context from canvas");const{frames:h,fps:d}=await G(i,c,e.width,e.height);if(!h.length)throw new Error("asciifyGif: the GIF contains no renderable frames.");const f=performance.now();let m=-1;return T(e,(t,n)=>{const o=Math.floor((t-f)*d/1e3)%h.length;o===m&&!n&&c.hoverStrength<=0&&"none"===c.animationStyle&&!c.charsetFrames?.length||(tt(l,h[o],c,e.width,e.height,(t-f)/1e3,n),m=o)},{continuous:!0,interactive:c.hoverStrength>0}).stop}async function St(t,e,{fontSize:o,artStyle:r="classic",options:a={},fitTo:i,objectFit:s,objectPosition:c,scale:l,width:h,height:d,bleed:f,preExtract:m=!1,fps:u,maxRenderDimension:g=2048,trim:p,scroll:M,maxCachedFrames:v=90,onReady:w,onFrame:y}={}){const x=p?.start??0,b=p?.end,S=o??a.fontSize??10;let E={...n,...nt(r),artStyle:r,...a,fontSize:S};const C=e.getContext("2d");if(!C)throw new Error("asciifyVideo: could not get 2d context from canvas.");const A="string"==typeof i?document.querySelector(i):i instanceof HTMLElement?i:null,F={objectFit:s,objectPosition:c,scale:l,width:h,height:d,bleed:f},L=function(t,e){var n;if(!function(t){return void 0!==t.objectFit||void 0!==t.objectPosition||void 0!==t.scale||void 0!==t.width||void 0!==t.height||void 0!==t.bleed}(e))return()=>{};const o={width:t.style.width,height:t.style.height,objectFit:t.style.objectFit,objectPosition:t.style.objectPosition,maxWidth:t.style.maxWidth,maxHeight:t.style.maxHeight,transformOrigin:t.style.transformOrigin,scale:t.style.getPropertyValue("scale")};if(e.objectFit&&(t.style.objectFit=e.objectFit),e.objectPosition&&(t.style.objectPosition=e.objectPosition,t.style.transformOrigin=e.objectPosition),void 0===e.scale&&void 0===e.bleed||(t.style.maxWidth="none",t.style.maxHeight="none"),void 0!==e.scale){const o=Number.isFinite(e.scale)&&e.scale>0?e.scale:1;t.style.setProperty("scale",String(o)),(n=t.style).transformOrigin||(n.transformOrigin=e.objectPosition??"center center")}return()=>{t.style.width=o.width,t.style.height=o.height,t.style.objectFit=o.objectFit,t.style.objectPosition=o.objectPosition,t.style.maxWidth=o.maxWidth,t.style.maxHeight=o.maxHeight,t.style.transformOrigin=o.transformOrigin,o.scale?t.style.setProperty("scale",o.scale):t.style.removeProperty("scale")}}(e,F),I=t=>()=>{t(),L()};if(m){let n;"string"==typeof t?(n=document.createElement("video"),n.crossOrigin="anonymous",n.src=t,n.readyState<2&&await new Promise((e,o)=>{n.onloadeddata=()=>e(),n.onerror=()=>o(new Error(`asciifyVideo: failed to load "${t}"`))})):n=t,E=await pt(n,E,x,b,M);const o=ft(n.videoWidth,n.videoHeight,E);A&&yt(e,A,o.w/o.h,o.w,o.h,g,F);const{renderW:r,renderH:a}=Mt(o.w,o.h,g),i="undefined"!=typeof window&&window.devicePixelRatio||1,s=8e6,c=r*i*a*i>s?Math.sqrt(s/(r*a)):i;e.width===Math.round(r*c)&&e.height===Math.round(a*c)||(e.width=Math.round(r*c),e.height=Math.round(a*c));const l=void 0!==b?b-x:10,h=u??(M?18:void 0);if(at(E)){const{frames:t,fps:o}=await X(n,E,r,a,h,l,void 0,x),i=e=>{const n=t[e];n&&(C.save(),C.setTransform(c,0,0,c,0,0),K(C,n,E,r,a),C.restore(),y?.())};if(M){let o=!1,r=-1;const a=!0===M?{}:M,s=dt(rt(a.trigger)??A??e,a,e=>{const s=it(e,a),c=Math.max(0,Math.min(t.length-1,Math.round(s*(t.length-1))));c!==r&&(r=c,i(c),o||(o=!0,w?.(n)),a.onUpdate?.(s,n))});return i(0),o=!0,w?.(n),I(s)}let s,d=!1,f=0,m=performance.now(),u=!0;const g=1e3/o,p=e=>{d||(e-m>=g&&(i(f),f=(f+1)%t.length,m=e,u&&(u=!1,w?.(n))),s=requestAnimationFrame(p))};return s=requestAnimationFrame(p),I(()=>{d=!0,cancelAnimationFrame(s)})}const{frames:d,fps:f}=await Y(n,E,r,a,h,l,void 0,x);if(!d.length)throw new Error("asciifyVideo: no frames were decoded.");let m=0;const p=performance.now(),v=T(e,(t,e)=>{M||(m=Math.floor((t-p)*f/1e3)%d.length),C.save(),C.setTransform(c,0,0,c,0,0),tt(C,d[m],E,r,a,(t-p)/1e3,e),C.restore(),y?.()},{continuous:!M||"none"!==E.animationStyle||!!E.charsetFrames?.length,interactive:E.hoverStrength>0});let S;if(M){const t=!0===M?{}:M;S=dt(rt(t.trigger)??A??e,t,e=>{m=Math.max(0,Math.min(d.length-1,Math.round(it(e,t)*(d.length-1)))),v.wake(),t.onUpdate?.(e,n)})}return w?.(n),I(()=>{v.stop(),S?.()})}let R,k=!1;"string"==typeof t?(R=document.createElement("video"),R.crossOrigin="anonymous",R.src=t,R.muted=!0,R.loop=!0,R.playsInline=!0,R.setAttribute("playsinline",""),Object.assign(R.style,{position:"fixed",top:"0",left:"0",width:"1px",height:"1px",opacity:"0",pointerEvents:"none",zIndex:"-1"}),document.body.appendChild(R),k=!0,await new Promise((e,n)=>{R.onloadedmetadata=()=>e(),R.onerror=()=>n(new Error(`asciifyVideo: failed to load "${t}"`))}),await R.play().catch(()=>{})):(R=t,R.readyState<HTMLMediaElement.HAVE_METADATA&&await new Promise((t,e)=>{const n=()=>{R.removeEventListener("loadedmetadata",o),R.removeEventListener("error",r)},o=()=>{n(),t()},r=()=>{n(),e(new Error("asciifyVideo: provided video element failed to load metadata."))};R.addEventListener("loadedmetadata",o),R.addEventListener("error",r),R.load()}),R.paused&&await R.play().catch(()=>{})),x>0&&(R.currentTime=x,await new Promise(t=>{const e=()=>{R.removeEventListener("seeked",e),t()};R.addEventListener("seeked",e)}),await lt(R));let H=null;(x>0||void 0!==b)&&(H=()=>{(void 0!==b&&R.currentTime>=b||x>0&&R.currentTime<x)&&(R.currentTime=x)},R.addEventListener("timeupdate",H)),E=await pt(R,E,x,b,M);let W=null;const $=ft(R.videoWidth,R.videoHeight,E);let{renderW:P,renderH:j}=Mt($.w,$.h,g);const z=t=>"frame"===E.chromaKeyTrimMode?ut(t,E,P/j):E;if(A){const t=$.w/$.h,n=$.w,o=$.h,r=yt(e,A,t,n,o,g,F);P=r.renderW,j=r.renderH;const a=e.getContext("2d");a&&a.setTransform(r.dpr,0,0,r.dpr,0,0),W=new ResizeObserver(()=>{const r=yt(e,A,t,n,o,g,F);P=r.renderW,j=r.renderH;const a=e.getContext("2d");a&&a.setTransform(r.dpr,0,0,r.dpr,0,0)}),W.observe(A)}else{const t="undefined"!=typeof window&&window.devicePixelRatio||1,n=8e6,o=P*t*j*t>n?Math.sqrt(n/(P*j)):t;e.width===Math.round(P*o)&&e.height===Math.round(j*o)||(e.width=Math.round(P*o),e.height=Math.round(j*o)),C.setTransform(o,0,0,o,0,0)}let O=!0,q=null;const B=M&&!m,V=u&&u>0?1e3/u:0;let D=0;const G=!B&&at(E);if(B&&"ascii"===E.renderMode&&"none"===E.animationStyle&&E.hoverStrength<=0&&!E.charsetFrames?.length){const t=!0===M?{}:M,n=rt(t.trigger)??A??e,o=t.from??x,r=t.to??b??R.duration,a=Math.max(o,Math.min(r,R.duration)),i=Math.max(.001,a-o),s=Math.min(60,Math.max(12,u??30)),c=Math.max(2,Math.ceil(i*s)+1),l=new Array(c),h=[],d=Math.max(2,Math.min(c,Math.floor(v))),f=()=>{for(;h.length>d;){const t=h.findIndex(t=>t!==g&&Math.abs(t-g)>2),e=t>=0?t:0,n=h.splice(e,1)[0];void 0!==n&&(l[n]=void 0)}},m=t=>{const e=h.indexOf(t);e>=0&&h.splice(e,1),h.push(t),f()};let g=0,p=0,S=-1,T=0,F=!1,L=!1,$=!1;const O=new Set,B=document.createElement("video");B.muted=!0,B.playsInline=!0,B.preload="auto",B.crossOrigin=R.crossOrigin||"anonymous",B.src=R.currentSrc||R.src,Object.assign(B.style,{position:"fixed",top:"0",left:"0",width:"1px",height:"1px",opacity:"0",pointerEvents:"none",zIndex:"-1"}),document.body.appendChild(B),B.readyState<HTMLMediaElement.HAVE_METADATA&&await new Promise((t,e)=>{const n=()=>{B.removeEventListener("loadedmetadata",o),B.removeEventListener("error",r)},o=()=>{n(),t()},r=()=>{n(),e(new Error("asciifyVideo: cache video failed to load metadata."))};B.addEventListener("loadedmetadata",o),B.addEventListener("error",r),B.load()}),B.pause(),R.paused&&await R.play().catch(()=>{});const N=t=>o+i*t/Math.max(1,c-1),Y=t=>Math.max(0,Math.min(c-1,Math.round(t*(c-1)))),X=z(R),G=U(R,X,P,j);G.rows.length>0&&(l[0]=G,m(0),K(C,G,X,P,j),$=!0,w?.(R),y?.());const _=t=>{if(l[t])return t;for(let e=1;e<c;e++){const n=t-e,o=t+e;if(n>=0&&l[n])return n;if(o<c&&l[o])return o}return-1},J=()=>{if(!l[g])return g;for(const t of O)if(!l[t])return t;for(let t=1;t<c;t++){const e=g-t,n=g+t;if(e>=0&&!l[e])return e;if(n<c&&!l[n])return n}return-1},Q=t=>{t<0||t>=c||l[t]||(O.add(t),Z())},Z=async()=>{if(F||L)return;const t=J();if(!(t<0)){O.delete(t),L=!0;try{if(await ct(B,N(t)),!F){const e=z(B),n=U(B,e,P,j);n.rows.length>0&&(l[t]=n,m(t))}}finally{L=!1,F||requestAnimationFrame(()=>{Z()})}}},tt=()=>{if(F)return;const t=_(g);if(t>=0&&t!==S){const e=l[t];e&&(K(C,e,E,P,j),S=t,$||($=!0,w?.(R)),y?.())}else if(t<0||S<0){const t=performance.now();if(V<=0||t-D>=V){const e=z(R),n=U(R,e,P,j);n.rows.length>0&&(K(C,n,e,P,j),D=t,$||($=!0,w?.(R)),y?.())}}Q(g),T=requestAnimationFrame(tt)};return q=dt(n,t,e=>{const n=function(t,e,n={}){if(!Number.isFinite(t.duration)||t.duration<=0)return null;const o=n.from??0,r=n.to??t.duration,a=Math.max(o,Math.min(r,t.duration)),i=it(e,n),s=o+(a-o)*i;return{progress:i,time:Math.min(Math.max(o,s),Math.max(o,a-.04))}}(R,e,{...t,from:o,to:a});p=n?.progress??ot(e),g=Y(p),Q(g),Q(g-1),Q(g+1),Q(g-2),Q(g+2),Q(g-3),Q(g+3),t.onUpdate?.(p,R)}),Q(0),Q(1),T=requestAnimationFrame(tt),I(()=>{F=!0,cancelAnimationFrame(T),q?.(),W?.disconnect(),O.clear(),h.length=0,l.fill(void 0),B.pause(),B.src="",B.removeAttribute("src"),B.load(),B.isConnected&&B.remove(),H&&R.removeEventListener("timeupdate",H),k&&(R.pause(),R.src="",R.removeAttribute("src"),R.load(),R.isConnected&&R.remove())})}if(B){const t=!0===M?{}:M;q=ht(R,{...t,trigger:t.trigger??A??e,from:t.from??x,to:t.to??b})}let _=-1,J=0,Q=-1,Z=0;const et="function"==typeof R.requestVideoFrameCallback,st=()=>{Z=R.requestVideoFrameCallback(()=>{J++,st()})};et&&st();let mt=0,gt=0,vt=null;const wt=T(e,(t,n)=>{if(R.readyState<2||0===e.width||0===e.height)return;if(V>0&&t-D<V&&!n)return;if(x>0&&R.currentTime<x)return;if(void 0!==b&&R.currentTime>=b)return;const o=(et?J!==Q:R.currentTime!==_)||mt!==P||gt!==j;if(o||!(E.hoverStrength<=0)||"none"!==E.animationStyle||E.charsetFrames?.length){if(G){const t=z(R),e=U(R,t,P,j);K(C,e,t,P,j)}else!o&&vt||(vt=N(R,z(R),P,j).frame),tt(C,vt,E,P,j,t/1e3,n);_=R.currentTime,Q=J,mt=P,gt=j,D=t,O&&(O=!1,w?.(R)),y?.()}},{continuous:!0,interactive:E.hoverStrength>0});return I(()=>{wt.stop(),Z&&R.cancelVideoFrameCallback(Z),q?.(),W?.disconnect(),H&&R.removeEventListener("timeupdate",H),k&&(R.pause(),R.src="",R.removeAttribute("src"),R.load(),R.isConnected&&R.remove())})}function Et(t,e,n){return St(t,e,n)}function Ct(t,e={},o,r){const a={...n,...e},{frame:i,cols:s}=N(t,a,o,r);if(!i.length||0===s)return"";const c=[];for(const t of i)c.push(t.map(t=>t.char).join(""));return c.join("\n")}function Tt(t,e={},o,r){const a={...n,...e},{frame:i,cols:s}=N(t,a,o,r);if(!i.length||0===s)return"";const c=[];for(const t of i){let e="";for(const n of t)" "===n.char||n.a<10?e+=" ":e+=`[38;2;${n.r};${n.g};${n.b}m${n.char}[0m`;c.push(e)}return c.join("\n")}function At(t,e,n,o="#505050",r=100){if(!t||e<=0||n<=0)return[];const a=function(t){const e=t.match(/^#([0-9a-f]{3,8})$/i)?.[1];if(e){const t=e.length<=4?e.split("").map(t=>parseInt(t+t,16)):[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)];return{r:t[0],g:t[1],b:t[2]}}const n=t.match(/rgba?\(\s*(\d+)[,\s]+(\d+)[,\s]+(\d+)/i);return n?{r:+n[1],g:+n[2],b:+n[3]}:null}(o)??{r:80,g:80,b:80},i=t,s=i.length;return Array.from({length:n},(t,n)=>Array.from({length:e},(t,o)=>({char:i[(n*e+o)%s],r:a.r,g:a.g,b:a.b,a:r})))}var Ft=new WeakMap;function Lt(t,e,o,r,a={},i){const{fontSize:s=10,lineHeight:c=1.6,color:l="#505050",opacity:h=100,hoverEffect:d="spotlight",hoverStrength:f=.85,hoverRadius:m=.18,hoverColor:u="#d4ff00"}=a,g=Math.max(1,Math.floor(e/s)),p=Math.max(1,Math.floor(o/(s*c))),M=JSON.stringify([r,g,p,l,h]);let v=Ft.get(t);v&&v.key===M||(v={key:M,frame:At(r,g,p,l,h)},Ft.set(t,v));tt(t,v.frame,{...n,fontSize:s,hoverEffect:d,hoverStrength:f,hoverRadius:m,hoverColor:u},e,o,0,i??null)}function It(t,{format:e="png",quality:n=.92,scale:o=1}={}){return new Promise((r,a)=>{let i=t;if(1!==o){const e=document.createElement("canvas");e.width=Math.round(t.width*o),e.height=Math.round(t.height*o);const n=e.getContext("2d");if(!n)return void a(new Error("captureSnapshot: could not get 2d context"));n.drawImage(t,0,0,e.width,e.height),i=e}i.toBlob(t=>t?r(t):a(new Error("captureSnapshot: toBlob returned null")),`image/${e}`,n)})}async function Rt(t,e={}){const{filename:n="asciify-snapshot",format:o="png",...r}=e,a=await It(t,{format:o,...r}),i="jpeg"===o?"jpg":o,s=document.createElement("a");s.href=URL.createObjectURL(a),s.download=`${n}.${i}`,s.click(),setTimeout(()=>URL.revokeObjectURL(s.href),1e4)}async function kt(t,{fontSize:e=10,style:o="classic",options:r={},liveOptions:a,mirror:i=!0,constraints:s={facingMode:"user"},dpr:c}={}){if(!navigator.mediaDevices?.getUserMedia)throw new Error("asciifyWebcam: getUserMedia is not supported in this browser.");const l=nt(o),h=await navigator.mediaDevices.getUserMedia({video:s}),d=document.createElement("video");d.srcObject=h,d.muted=!0,d.playsInline=!0,await new Promise((t,e)=>{d.onloadedmetadata=()=>t(),d.onerror=()=>e(new Error("asciifyWebcam: video stream failed to load.")),d.play().catch(e)});const f={...n,...l,...r,fontSize:e},m=t.getContext("2d");if(!m)throw new Error("asciifyWebcam: could not get 2d context from canvas.");const u=c??("undefined"!=typeof window?window.devicePixelRatio:1)??1;1!==u&&m.scale(u,u);let g=null;const p=e=>{const n=t.getBoundingClientRect();g={x:(e.clientX-n.left)/n.width,y:(e.clientY-n.top)/n.height}},M=()=>{g=null};f.hoverStrength>0&&(t.addEventListener("mousemove",p),t.addEventListener("mouseleave",M));let v,w=!1;const y=performance.now(),x=e=>{if(!w){if(d.readyState>=d.HAVE_CURRENT_DATA){const n=t.width/u,o=t.height/u,r=(e-y)/1e3,s=a?{...f,...a()}:f;s.hoverStrength>0?(t.addEventListener("mousemove",p),t.addEventListener("mouseleave",M)):(t.removeEventListener("mousemove",p),t.removeEventListener("mouseleave",M));const{frame:c}=N(d,s,n,o),l=g&&i?{x:1-g.x,y:g.y}:g;i?(m.save(),m.scale(-1,1),m.translate(-n,0),tt(m,c,s,n,o,r,l),m.restore()):tt(m,c,s,n,o,r,l)}v=requestAnimationFrame(x)}};return v=requestAnimationFrame(x),()=>{w=!0,cancelAnimationFrame(v),t.removeEventListener("mousemove",p),t.removeEventListener("mouseleave",M),h.getTracks().forEach(t=>t.stop()),d.srcObject=null}}var Ht={A:[28,54,99,127,99,99,99],B:[126,99,99,126,99,99,126],C:[62,99,96,96,96,99,62],D:[124,102,99,99,99,102,124],E:[127,96,96,124,96,96,127],F:[127,96,96,124,96,96,96],G:[62,99,96,111,99,99,62],H:[99,99,99,127,99,99,99],I:[127,8,8,8,8,8,127],J:[63,6,6,6,102,102,60],K:[99,102,108,120,108,102,99],L:[96,96,96,96,96,96,127],M:[99,119,107,107,99,99,99],N:[99,115,107,103,99,99,99],O:[62,99,99,99,99,99,62],P:[126,99,99,126,96,96,96],Q:[62,99,99,99,107,102,61],R:[126,99,99,126,108,102,99],S:[62,99,96,62,3,99,62],T:[127,8,8,8,8,8,8],U:[99,99,99,99,99,99,62],V:[99,99,99,99,54,28,8],W:[99,99,99,107,107,54,20],X:[99,54,28,8,28,54,99],Y:[99,99,54,28,8,8,8],Z:[127,3,6,12,24,48,127],a:[0,0,60,3,62,99,61],b:[96,96,124,99,99,99,124],c:[0,0,62,96,96,96,62],d:[3,3,31,99,99,99,31],e:[0,0,62,99,127,96,62],f:[30,48,48,126,48,48,48],g:[0,0,63,99,63,3,62],h:[96,96,124,99,99,99,99],i:[8,0,24,8,8,8,28],j:[4,0,12,4,4,36,24],k:[96,96,102,108,120,108,102],l:[24,8,8,8,8,8,28],m:[0,0,92,107,107,99,99],n:[0,0,94,99,99,99,99],o:[0,0,62,99,99,99,62],p:[0,0,126,99,126,96,96],q:[0,0,63,99,63,3,3],r:[0,0,94,99,96,96,96],s:[0,0,62,96,62,3,124],t:[48,48,126,48,48,48,30],u:[0,0,99,99,99,103,59],v:[0,0,99,99,54,28,8],w:[0,0,99,99,107,54,20],x:[0,0,99,54,28,54,99],y:[0,0,99,99,63,3,62],z:[0,0,127,6,12,24,127],0:[62,99,103,107,115,99,62],1:[8,24,56,8,8,8,62],2:[62,99,3,6,24,48,127],3:[62,99,3,30,3,99,62],4:[6,14,22,38,127,6,6],5:[127,96,126,3,3,99,62],6:[62,99,96,126,99,99,62],7:[127,3,6,12,24,24,24],8:[62,99,99,62,99,99,62],9:[62,99,99,63,3,99,62]," ":[0,0,0,0,0,0,0],"!":[24,24,24,24,24,0,24],"?":[62,99,3,14,8,0,8],".":[0,0,0,0,0,24,24],",":[0,0,0,0,0,24,48],";":[0,24,24,0,24,24,48],":":[0,24,24,0,24,24,0],"-":[0,0,0,62,0,0,0],_:[0,0,0,0,0,0,127],"'":[24,24,32,0,0,0,0],'"':[54,54,36,0,0,0,0],"`":[24,8,0,0,0,0,0],")":[24,12,6,6,6,12,24],"(":[12,24,48,48,48,24,12],"[":[60,48,48,48,48,48,60],"]":[30,6,6,6,6,6,30],"{":[14,24,24,48,24,24,14],"}":[56,12,12,6,12,12,56],"/":[3,6,12,24,48,96,0],"\\":[96,48,24,12,6,3,0],"|":[8,8,8,8,8,8,8],"+":[0,8,8,62,8,8,0],"=":[0,0,62,0,62,0,0],"*":[0,42,28,127,28,42,0],"#":[36,36,127,36,127,36,36],"@":[62,99,111,107,111,96,62],"&":[24,36,24,60,74,68,58],"%":[99,38,4,8,16,50,99],$:[8,62,72,62,9,62,8],"^":[8,20,34,0,0,0,0],"~":[0,0,50,76,0,0,0],"<":[6,12,24,48,24,12,6],">":[48,24,12,6,12,24,48]},Wt=[127,65,65,65,65,65,127];function $t(t){return Ht[t]??Ht[t.toUpperCase()]??Wt}function Pt(t,e={}){if(!t)return"";const{char:n="█",scale:o=1}=e,r=[...n][0]??"█",a=Math.max(1,Math.floor(o)),i=7*a,s=a,c=Array.from({length:i},()=>"");for(let e=0;e<t.length;e++){const n=$t(t[e]);for(let t=0;t<7;t++){const e=n[t];let o="";for(let t=6;t>=0;t--)o+=(e>>t&1?r:" ").repeat(a);for(let e=0;e<a;e++)c[t*a+e]+=o}if(e<t.length-1)for(let t=0;t<i;t++)c[t]+=" ".repeat(s)}return c.join("\n")}function jt(t,e,n={}){const{color:o="#d4ff00",bgColor:r,fontSize:a=10}=n,i=Pt(e,n);if(!i)return;const s=i.split("\n"),c=Math.max(...s.map(t=>[...t].length));t.width=Math.ceil(c*a*.6),t.height=Math.ceil(s.length*a);const l=t.getContext("2d");r&&"transparent"!==r?(l.fillStyle=r,l.fillRect(0,0,t.width,t.height)):l.clearRect(0,0,t.width,t.height),l.fillStyle=o,l.font=`${a}px monospace`,l.textBaseline="top",s.forEach((t,e)=>l.fillText(t,0,e*a))}var zt=["ascii","blocks","braille","dots","lines","cross","diagonal","diamond","mixed","pixel","mosaic","lego","voxel","disco","dither","hex","led","cmyk","stipple","engraving","crosshatch","woodblock","risograph","pointillism"];export{t as CHARACTER_SETS,n as DEFAULT_OPTIONS,o as HOVER_PRESETS,e as PALETTE_THEMES,zt as STUDIO_STYLES,Ct as asciiText,Tt as asciiTextAnsi,xt as asciify,bt as asciifyGif,Et as asciifyLiveVideo,Pt as asciifyText,St as asciifyVideo,kt as asciifyWebcam,At as buildTextFrame,It as captureSnapshot,z as clearAsciifyCaches,vt as computeCanvasRenderSize,ht as createVideoScrollScrub,G as gifToAsciiFrames,_ as gifToAsciiTextFrames,N as imageToAsciiFrame,U as imageToAsciiTextFrame,tt as renderFrameToCanvas,Lt as renderTextBackground,K as renderTextFrameToCanvas,jt as renderTextToCanvas,Rt as snapshotAndDownload,Y as videoToAsciiFrames,X as videoToAsciiTextFrames};//# sourceMappingURL=core.js.map
|
|
1
|
+
var t={standard:{label:"Classic ASCII",chars:" .:-=+*#%@"},asciify:{label:"Asciify",chars:" .:-=+YCIFSA#@"},minimal:{label:"Minimal",chars:" .:+"},detailed:{label:"Detailed",chars:" .,:;-~=+*xX#%@"},letters:{label:"Letters",chars:" .liLTYCFSAWM"},technical:{label:"Technical",chars:" ._:;+/>=][{}*$#@"},blocks:{label:"Tonal blocks",chars:" ░▒▓█"},braille:{label:"Braille",chars:" ⠁⠃⠇⡇⣇⣧⣷⣿"}},e={dracula:{name:"Dracula",accent:"#bd93f9",bg:"#282a36",fg:"#f8f8f2"},monokai:{name:"Monokai",accent:"#a6e22e",bg:"#272822",fg:"#f8f8f2"},nord:{name:"Nord",accent:"#88c0d0",bg:"#2e3440",fg:"#eceff4"},catppuccin:{name:"Catppuccin",accent:"#cba6f7",bg:"#1e1e2e",fg:"#cdd6f4"},solarized:{name:"Solarized",accent:"#268bd2",bg:"#002b36",fg:"#839496"},gruvbox:{name:"Gruvbox",accent:"#b8bb26",bg:"#282828",fg:"#ebdbb2"}},n={fontSize:7,charSpacing:1,brightness:0,contrast:0,charset:t.standard.chars,colorMode:"grayscale",accentColor:"#d4ff00",invert:!1,renderMode:"ascii",animationStyle:"none",animationSpeed:1,dotSizeRatio:.8,ditherStrength:0,charAspect:.55,normalize:!1,hoverStrength:0,hoverRadius:.2,hoverEffect:"spotlight",hoverColor:"#ffffff",hoverShape:"circle",hoverText:"ASCIIFY",artStyle:"classic",fineDither:!1,customText:"",chromaKey:null,chromaKeyTolerance:60,chromaKeyTrimPadding:.002,chromaKeyTrimLuminanceThreshold:0,chromaKeyTrimMode:"range"},o={none:{label:"Off",options:{hoverStrength:0,hoverEffect:"spotlight",hoverRadius:.2,hoverColor:"#ffffff"}},subtle:{label:"Subtle",options:{hoverStrength:.25,hoverEffect:"glow",hoverRadius:.12,hoverColor:"#ffffff"}},flashlight:{label:"Flashlight",options:{hoverStrength:.6,hoverEffect:"spotlight",hoverRadius:.15,hoverColor:"#fffbe6"}},magnifier:{label:"Magnifier",options:{hoverStrength:.7,hoverEffect:"magnify",hoverRadius:.12,hoverColor:"#ffffff"}},forceField:{label:"Force Field",options:{hoverStrength:.7,hoverEffect:"repel",hoverRadius:.15,hoverColor:"#a0e8ff"}},neon:{label:"Neon",options:{hoverStrength:.6,hoverEffect:"colorShift",hoverRadius:.15,hoverColor:"#d946ef"}},fire:{label:"Fire",options:{hoverStrength:.7,hoverEffect:"spotlight",hoverRadius:.15,hoverColor:"#ff6b2b"}},ice:{label:"Ice",options:{hoverStrength:.5,hoverEffect:"glow",hoverRadius:.15,hoverColor:"#60d5f7"}},gravity:{label:"Gravity",options:{hoverStrength:.7,hoverEffect:"attract",hoverRadius:.18,hoverColor:"#a5d6ff"}},shatter:{label:"Shatter",options:{hoverStrength:.8,hoverEffect:"shatter",hoverRadius:.14,hoverColor:"#ff6090"}},ghost:{label:"Fluid trail",options:{hoverStrength:.55,hoverEffect:"trail",hoverRadius:.2,hoverColor:"#b39ddb"}},glitchReveal:{label:"Glitch Reveal",options:{hoverStrength:.8,hoverEffect:"glitchText",hoverRadius:.18,hoverColor:"#a3e635"}}},r={caustics:"sheen",grain:"shimmer",trace:"relight",tidal:"current",weave:"current",breeze:"current",reform:"develop",print:"develop",unfold:"develop"},a=[{value:"none",mode:"none",group:"Still",label:"Off",description:"Keep the image still. Hover stays available."},{value:"relight",mode:"relight",group:"Light",label:"Relight",description:"A key light circles the subject and models its own relief, like moving a lamp around a sculpture."},{value:"sheen",mode:"sheen",group:"Light",label:"Specular sweep",description:"One slow pass of light glances across the highlights and follows their form, then rests."},{value:"glow",mode:"glow",group:"Light",label:"Highlight bloom",description:"The brightest areas breathe a soft halo into their surroundings. Shadows stay deep."},{value:"shimmer",mode:"shimmer",group:"Light",label:"Glints",description:"Sparse glints on bright fine detail, like light on water, metal or an eye. Everything else holds still."},{value:"parallax",mode:"parallax",group:"Depth",label:"Parallax",description:"A slow camera drift: the subject moves against its background, read from the photo’s own depth cues."},{value:"push",mode:"push",group:"Depth",label:"Slow push",description:"A gentle push toward the subject and back, with nearer areas moving slightly more."},{value:"focus",mode:"focus",group:"Depth",label:"Focus pull",description:"Focus racks from the subject to the background and back; the characters soften out of focus."},{value:"mist",mode:"mist",group:"Atmosphere",label:"Mist",description:"Soft mist drifts through the distance and plain areas, leaving the subject clear."},{value:"current",mode:"current",group:"Atmosphere",label:"Drift",description:"Sky, water and smooth grounds flow slowly, like a cinemagraph; detailed areas hold still."},{value:"develop",mode:"develop",group:"Reveal",label:"Develop",description:"The image holds, fades, then develops back in from its highlights to its shadows, like a print in the tray."}];var i=t=>Math.max(0,Math.min(1,t)),s=(t,e,n)=>{const o=i((n-t)/(e-t));return o*o*(3-2*o)},c=(t,e)=>{const n=(.06711056*t+.00583715*e)%1*52.9829189;return n-Math.floor(n)};function l(t,e,n,o,r,a=.5,l,h=0){if(r[0]=r[1]=r[2]=0,r[3]=1,"none"===t)return r;a=i(a);const d=l?l[h]:a,f=l?l[h+1]:.5+.5*i(1-2*Math.hypot(e-.5,n-.55)),m=l?l[h+2]:s(.55,1,a)**2,u=l?l[h+3]:.5,g=l?l[h+4]:0,p=l?l[h+5]:0,M=o*Math.PI/6,v=(o%12+12)%12,w=s(0,.12,Math.min(e,1-e,n,1-n));if("relight"===t){const t=M+.6,o=Math.cos(t),i=Math.sin(t),c=Math.max(-1,Math.min(1,g*o+p*i))+.35*(o*(e-.5)+i*(n-.5));r[2]=.2*c*(.3+.7*s(.04,.3,d)*(1-.6*s(.82,1,a)))}else if("sheen"===t){const t=1.9*s(0,8,v)-.35,o=(.75*e+.45*n)/1.2+.05*(.75*g+.45*p),i=Math.exp(-(((o-t)/.12)**2));r[2]=i*s(.3,.8,d)*(1-.5*s(.9,1,a))*.45}else if("glow"===t){const t=.5-.5*Math.cos(M),e=1-.8*t;r[2]=.2*s(e-.3,e+.02,m)*Math.sqrt(m)*(1-.65*a)+.05*t*s(.6,.95,a)}else if("shimmer"===t){const t=c(Math.floor(160*e),Math.floor(100*n))*Math.PI*2,o=Math.pow(.5+.5*Math.cos(2*M+t),28);r[2]=o*s(.5,.88,a)*(.35+.65*s(.1,.55,u))*.42}else if("parallax"===t){const t=f-.45;r[0]=16*t*Math.sin(M)*w,r[1]=7*t*Math.sin(2*M)*w}else if("push"===t){const t=.045*(.5-.5*Math.cos(M))*(.7+.6*f)*960,o=l?l[h+6]:.5,a=l?l[h+7]:.5;r[0]=(e-o)*t,r[1]=(n-a)*t}else if("focus"===t){const t=Math.sin(M),e=t*t*s(.15,.6,t>=0?1-f:f);r[2]=(d-a)*e*.9}else if("mist"===t){const t=Math.pow(1-f,1.5)*(1-.6*u),o=.5*Math.sin(4.1*e-M+.9*Math.sin(3.3*n+M))+.3*Math.sin(7.3*e+2.1*n-2*M+1.1*Math.sin(2.7*e-5.1*n+M))+.2*Math.sin(5.7*n-1.9*e+M);r[2]=s(-.3,.9,o)*t*.16*(1-.55*a)}else if("current"===t){const t=(1-.4*u)*(1-.8*f)*w,o=t=>14*n-t+1.5*Math.sin(3*e+t);r[0]=7*(Math.sin(o(M))-Math.sin(o(0))+.43*(Math.sin(5*e-3*n+M)-Math.sin(5*e-3*n)))*t,r[1]=2*(Math.sin(11*e+M)-Math.sin(11*e))*t,r[2]=.03*(Math.cos(o(M))-Math.cos(o(0)))*t}else if("develop"===t){const t=s(7,8.5,v),o=i((v-8.5)/3.5),l=v<8.5?1-t:s(0,1,(1.45*o-(1-a)+.06*(c(Math.floor(160*e),Math.floor(100*n))-.5))/.3);r[2]=.3*-(1-l),r[3]=1-.9*(1-l)}return r}function h(t,e,n,o,r){if(!(r<1))for(let a=0;a<2;a++){for(let a=0;a<o;a++){let o=0;const i=a*n;for(let e=-r;e<=r;e++)o+=t[i+Math.max(0,Math.min(n-1,e))];for(let a=0;a<n;a++)e[i+a]=o/(2*r+1),o+=t[i+Math.min(n-1,a+r+1)]-t[i+Math.max(0,a-r)]}for(let a=0;a<n;a++){let i=0;for(let t=-r;t<=r;t++)i+=e[Math.max(0,Math.min(o-1,t))*n+a];for(let s=0;s<o;s++)t[s*n+a]=i/(2*r+1),i+=e[Math.min(o-1,s+r+1)*n+a]-e[Math.max(0,s-r)*n+a]}}}var d=(t,e,n)=>{const o=Math.max(0,Math.min(1,(n-t)/(e-t)));return o*o*(3-2*o)};function f(t,e,n=256){let o=0;for(let e=0;e<t.length;e++)t[e]>o&&(o=t[e]);if(o<=0)return 0;const r=new Uint32Array(n);for(let e=0;e<t.length;e++)r[Math.min(n-1,Math.floor(t[e]/o*n))]++;let a=0;const i=t.length*e;for(let t=0;t<n;t++)if(a+=r[t],a>=i)return(t+1)/n*o;return o}function m(t,e,n,o){const r=e*n,a=o?.length===8*r?o:new Float32Array(8*r);if(!r)return a;const i=Math.min(e,n),s=new Float32Array(r),c=new Float32Array(r),l=new Float32Array(r),m=new Float32Array(r),u=new Float32Array(r),g=new Float32Array(r),p=new Float32Array(r);for(let e=0;e<r;e++){const n=t[4*e+3]/255;s[e]=(.299*t[4*e]+.587*t[4*e+1]+.114*t[4*e+2])/255*n}c.set(s),h(c,p,e,n,Math.max(1,Math.round(.012*i))),l.set(s),h(l,p,e,n,Math.max(1,Math.round(.03*i)));for(let t=0;t<r;t++){m[t]=Math.abs(s[t]-c[t]);const e=Math.max(0,s[t]-.55)/.45;u[t]=e*e}h(m,p,e,n,Math.max(1,Math.round(.02*i)));const M=1/Math.max(.02,f(m,.95));h(u,p,e,n,Math.max(1,Math.round(.05*i)));const v=1/Math.max(.03,f(u,.98)),w=function(t,e,n){const o=e*n,r={width:e,height:n,subject:new Float32Array(o),depth:new Float32Array(o),key:"none"},{subject:a,depth:i}=r;let s=0;for(let e=0;e<o;e++)t[4*e+3]<250&&s++;const c=e=>(.2126*t[4*e]+.7152*t[4*e+1]+.0722*t[4*e+2])/255;let l="none",d=0;if(s>.01*o)l="alpha";else{let t=0,o=0,r=0;const a=Math.max(1,Math.round(.03*Math.min(e,n)));for(let i=0;i<n;i++)for(let s=0;s<e;s++){if(s>=a&&i>=a&&s<e-a&&i<n-a)continue;const l=c(i*e+s);t+=l,o+=l*l,r++}d=t/Math.max(1,r),Math.sqrt(Math.max(0,o/Math.max(1,r)-d*d))<.07&&(l="ground")}for(let e=0;e<o;e++){const n=t[4*e+3]/255,o=c(e);let r=1;if("alpha"===l)r=n;else if("ground"===l){const t=Math.max(0,Math.min(1,(Math.abs(o-d)-.035)/.12));r=t*t*(3-2*t)}a[e]=1*r,i[e]=o*n}r.key=l;const f=new Float32Array(o);return h(a,f,e,n,Math.max(1,Math.round(.02*Math.min(e,n)))),h(i,f,e,n,Math.max(1,Math.round(.035*Math.min(e,n)))),r}(t,e,n);let x=0,y=0,b=0;for(let t=0;t<n;t++)for(let o=0;o<e;o++){const r=t*e+o,a=(o+.5)/e,i=(t+.5)/n,c=.55*Math.min(1,m[r]*M)+.3*(1-Math.min(1,1.6*Math.hypot(1.3*(a-.5),i-.55)))+.15*d(.2,1,i);g[r]="none"===w.key?c:.75*w.subject[r]+.25*c;const l=g[r]*g[r]*(.25+s[r]);x+=a*l,y+=i*l,b+=l}h(g,p,e,n,Math.max(1,Math.round(.06*i)));const S=f(g,.05),E=f(g,.95),A=Math.max(.05,E-S);x=b>0?Math.max(.3,Math.min(.7,x/b)):.5,y=b>0?Math.max(.3,Math.min(.7,y/b)):.5;const C=1/Math.max(.004,f((()=>{const t=new Float32Array(r);for(let o=0;o<n;o++)for(let r=0;r<e;r++){t[o*e+r]=Math.hypot(l[o*e+Math.min(e-1,r+1)]-l[o*e+Math.max(0,r-1)],l[Math.min(n-1,o+1)*e+r]-l[Math.max(0,o-1)*e+r])}return t})(),.97));for(let t=0;t<n;t++)for(let o=0;o<e;o++){const r=t*e+o,i=8*r,s=(l[t*e+Math.min(e-1,o+1)]-l[t*e+Math.max(0,o-1)])*C,c=(l[Math.min(n-1,t+1)*e+o]-l[Math.max(0,t-1)*e+o])*C;a[i]=l[r],a[i+1]=Math.max(0,Math.min(1,(g[r]-S)/A)),a[i+2]=Math.min(1,u[r]*v),a[i+3]=Math.min(1,m[r]*M),a[i+4]=Math.max(-1,Math.min(1,-s)),a[i+5]=Math.max(-1,Math.min(1,-c)),a[i+6]=x,a[i+7]=y}return a}var u=new WeakMap;function g(t,e){const n=document.createElement("canvas");n.width=t,n.height=e;const o=n.getContext("2d",{willReadFrequently:!0});return{canvas:n,ctx:o}}function p(t,e,n){let o=t+255*e;return o=259*(255*n+255)/(255*(259-255*n))*(o-128)+128,Math.max(0,Math.min(255,o))}function M(t,e,n,o,r,a){if((a?1-t/255:t/255)<.12)return" ";const i=[...e];return i[(o*r+n)%i.length]}var v=[[0,8,2,10],[12,4,14,6],[3,11,1,9],[15,7,13,5]];function w(t,e,n,o){if(o<=0)return t;const r=(v[n%4][e%4]/16-.5)*o*128;return Math.max(0,Math.min(255,t+r))}var x=new Array(256),y=new Array(256);for(let t=0;t<256;t++)x[t]=`rgb(${t},${t},${t})`,y[t]=`rgb(0,${t},0)`;function b(t,e,n,o,r,a=!1){switch(e){case"fullcolor":return`rgb(${t.r},${t.g},${t.b})`;case"matrix":return y[.299*t.r+.587*t.g+.114*t.b|0];case"accent":return`rgb(${n},${o},${r})`;default:{const e=.299*t.r+.587*t.g+.114*t.b|0;return x[e]}}}var S=[0,0,0];function E(t,e,n,o,r,a=!1){switch(e){case"fullcolor":S[0]=t.r,S[1]=t.g,S[2]=t.b;break;case"matrix":{const e=.299*t.r+.587*t.g+.114*t.b|0;S[0]=0,S[1]=e,S[2]=0;break}case"accent":S[0]=n,S[1]=o,S[2]=r;break;default:{const e=.299*t.r+.587*t.g+.114*t.b|0;S[0]=e,S[1]=e,S[2]=e;break}}return S}function A(t){const e=t.match(/rgba?\(\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*(\d+)(?:\s*[,/]\s*([\d.]+))?\s*\)/);return e?{r:+e[1],g:+e[2],b:+e[3],a:void 0!==e[4]?+e[4]:1}:null}function C(t){let e=t;for(;e&&e!==document.documentElement.parentElement;){const t=getComputedStyle(e).backgroundColor;if(t&&"transparent"!==t&&"rgba(0, 0, 0, 0)"!==t){const e=A(t);if(e&&e.a>.1)return e}e=e.parentElement}return null}function T(t){if(t){const e=C(t);if(e){return(.299*e.r+.587*e.g+.114*e.b)/255<.4}}if("undefined"!=typeof document){const t=document.documentElement,e=(t.getAttribute("data-theme")||"").toLowerCase();if("dark"===e)return!0;if("light"===e)return!1;if(t.classList.contains("dark"))return!0;if(document.body){const t=C(document.body);if(t){return(.299*t.r+.587*t.g+.114*t.b)/255<.4}}}return"undefined"!=typeof window&&window.matchMedia("(prefers-color-scheme: dark)").matches}function F(t){if("string"!=typeof t)return t;const e=document.createElement("canvas");e.width=1,e.height=1;const n=e.getContext("2d");n.fillStyle=t,n.fillRect(0,0,1,1);const o=n.getImageData(0,0,1,1).data;return{r:o[0],g:o[1],b:o[2]}}function k(t){return t*t*(3-2*t)}var L={scale:1,offsetX:0,offsetY:0,glow:0,colorBlend:0,proximity:0};function I(t,e,n,o,r,a,i,s,c="spotlight",l=.5,h="circle",d=[],f=1){const m=(t-n)*Math.max(1,f),u=(e-o)*Math.max(1,1/f),g=.08+.35*l+.04*a;let p,M;if("box"===h){const t=Math.abs(m),e=Math.abs(u);p=Math.max(t,e),M=g}else p=Math.sqrt(m*m+u*u),M=g;if(p>=M&&("trail"!==c||0===d.length))return L.scale=1,L.offsetX=0,L.offsetY=0,L.glow=0,L.colorBlend=0,L.proximity=0,L;const v=k(Math.max(0,1-p/M))*r;let w=1,x=0,y=0,b=0,S=0;switch(c){case"spotlight":{w=1+v*a*1.8;const t=Math.atan2(u,m),e=v*v*a*.6;x=Math.cos(t)*e*i,y=Math.sin(t)*e*s,b=v*a*.4,S=v*v*a*.25;break}case"magnify":w=1+v*a*.85,b=v*a*.15;break;case"repel":{w=1;const t=Math.atan2(u,m),e=v*v*a*1.8;x=Math.cos(t)*e*i,y=Math.sin(t)*e*s;break}case"glow":b=v*a*.8,S=v*a*.4;break;case"colorShift":w=1,b=v*a*.12,S=v*a;break;case"attract":{const t=Math.atan2(u,m),e=v*v*a*1;x=(.45*-Math.cos(t)-1.6*Math.sin(t))*e*i,y=(.45*-Math.sin(t)+1.6*Math.cos(t))*e*s,b=v*a*.3;break}case"shatter":{const t=Math.atan2(u,m),e=.5*Math.sin(43.7*m+29.3*u),n=v*a*1.4*(.7+.3*e);x=Math.cos(t+e)*n*i,y=Math.sin(t+e)*n*s,w=Math.max(.1,1-v*a*.6),b=v*a*.25;break}case"trail":{let n=v,o=-u*v,r=m*v;for(const a of d){const i=(t-a.x)*Math.max(1,f),s=(e-a.y)*Math.max(1,1/f),c=Math.hypot(i,s)/g;if(c>=1)continue;const l=k(1-c)*a.intensity;n=Math.max(n,l),o+=(.35*a.vx-2*s)*l*.35,r+=(.35*a.vy+2*i)*l*.35}x=Math.tanh(2*o)*a*i*3,y=Math.tanh(2*r)*a*s*3,S=n*a*.65,b=n*a*.35,w=1+n*a*.08,L.proximity=n;break}case"glitchText":w=1,b=v*a*.5,S=v*a*.6}return L.scale=w,L.offsetX=x,L.offsetY=y,L.glow=b,L.colorBlend=S,"trail"!==c&&(L.proximity=v),L}function R(t,e,{continuous:n=!1,interactive:o=!1}={}){const r=t.parentElement??t;let a=null,i=0,s=!1,c=!0,l=!0,h=-1/0;const d=window.matchMedia("(prefers-reduced-motion: reduce)"),f=()=>{l=!0,s||!c||document.hidden||i||(i=requestAnimationFrame(m))},m=t=>{if(i=0,s||!c||document.hidden)return;const o=!d.matches&&(n||t-h<1500);(l||o)&&(e(t,d.matches?null:a),l=!1),o&&(i=requestAnimationFrame(m))},u=e=>{if("touch"===e.pointerType)return;const n=t.getBoundingClientRect();if(!n.width||!n.height)return;const o=(e.clientX-n.left)/n.width,r=(e.clientY-n.top)/n.height;a=o>=0&&o<=1&&r>=0&&r<=1?{x:o,y:r}:null,h=performance.now(),f()},g=()=>{a=null,h=performance.now(),f()},p=()=>{document.hidden&&i?(cancelAnimationFrame(i),i=0):f()},M="undefined"==typeof IntersectionObserver?null:new IntersectionObserver(([t])=>{c=t.isIntersecting,c?f():i&&(cancelAnimationFrame(i),i=0)});return M?.observe(t),o&&(r.addEventListener("pointermove",u),r.addEventListener("pointerleave",g)),document.addEventListener("visibilitychange",p),d.addEventListener("change",f),f(),{wake:f,stop:()=>{s=!0,cancelAnimationFrame(i),M?.disconnect(),r.removeEventListener("pointermove",u),r.removeEventListener("pointerleave",g),document.removeEventListener("visibilitychange",p),d.removeEventListener("change",f)}}}var H=null,W=null;function $(t,e){if(!H||!W){const n=g(t,e);H=n.canvas,W=n.ctx}return H.width!==t&&(H.width=t),H.height!==e&&(H.height=e),W}var j=new Map,P=new Map,z=new WeakMap;function O(t){const e=Intl.Segmenter;return e?Array.from(new e(void 0,{granularity:"grapheme"}).segment(t),({segment:t})=>t):[...t]}function q(t){let e=j.get(t);return e||(e=O(t),j.set(t,e)),e}function D(t){return O(t)}function B(t,e,n){const o=n?1-t/255:t/255,r=Math.floor(o*(e.length-1));return e[Math.max(0,Math.min(e.length-1,r))]??" "}function U(t,e,n,o){const r=`${t}\0${e?1:0}\0${n}\0${o}`;let a=P.get(r);if(!a){const i=q(t);a=new Array(256);for(let t=0;t<256;t++)a[t]=B(p(t,n,o),i,e);P.set(r,a)}return a}function V(){j.clear(),P.clear(),ot=new WeakMap,at=new WeakMap,rt=new WeakMap,H=null,W=null}function K(t,e){return"auto"!==t?t:!T(e)}function N(t){const e=t.match(/^#([0-9a-fA-F]{3,6})$/);if(e){let t=e[1];if(3===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),6===t.length)return t}const n=t.match(/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/);return n?[n[1],n[2],n[3]].map(t=>parseInt(t).toString(16).padStart(2,"0")).join(""):null}function Y(t){const e=t||"auto";if("auto"!==e)return N(e)??"ffffff";if("undefined"!=typeof document){const t=getComputedStyle(document.documentElement);for(const e of["--accent-color","--color-accent","--accent","--color-primary","--primary","--brand-color"]){const n=N(t.getPropertyValue(e).trim());if(n)return n}const e=N(getComputedStyle(document.body).accentColor??"");if(e)return e}return T("undefined"!=typeof document?document.body:null)?"faf9f7":"0d0d0d"}function X(t,e,n){return Math.max(e,Math.min(n,t))}function G(t,e,n){if(!t)return{x:0,y:0,width:e,height:n};const o=t.unit??"percent",r=!1!==t.preserveAspect,a=t=>void 0===t?void 0:"percent"===o?t*e:t,i=t=>void 0===t?void 0:"percent"===o?t*n:t,s=X(a(t.left)??0,0,e-1),c=X(a(t.right)??0,0,e-s-1),l=X(i(t.top)??0,0,n-1),h=X(i(t.bottom)??0,0,n-l-1),d=void 0!==t.left||void 0!==t.right||void 0!==t.top||void 0!==t.bottom,f=Math.max(1,e-s-c),m=Math.max(1,n-l-h),u=d?f:a(t.width),g=d?m:i(t.height);let p=u??e,M=g??n;if(r&&!d){const t=p/e,o=M/n,r=Math.min(t,o),a=void 0===u?o:void 0===g?t:r;p=e*a,M=n*a}p=X(p,1,d?f:e),M=X(M,1,d?m:n);const v=t.anchor??"center",w=a(t.x),x=i(t.y),y=d?s:0,b=d?l:0,S=d?f:e,E=d?m:n,A=v.endsWith("left")||"left"===v?0:v.endsWith("right")||"right"===v?S-p:(S-p)/2,C=v.startsWith("top")||"top"===v?0:v.startsWith("bottom")||"bottom"===v?E-M:(E-M)/2;return{x:X(w??y+A,0,Math.max(0,e-p)),y:X(x??b+C,0,Math.max(0,n-M)),width:p,height:M}}function _(t,e,n,o){const r=t instanceof HTMLVideoElement?t.videoWidth:t.width,a=t instanceof HTMLVideoElement?t.videoHeight:t.height;if(0===r||0===a)return{frame:[],cols:0,rows:0};const i=e.charAspect,s=e.fontSize*e.charSpacing,c=e.fontSize/i*e.charSpacing,l=n||r,h=o||a,d=Math.floor(l/s),f=Math.floor(h/c);if(d<=0||f<=0)return{frame:[],cols:0,rows:0};const m=G(e.sourceCrop,r,a),u=Math.max(1,Math.min(Math.floor(2048/d),Math.floor(m.width/d))),g=Math.max(1,Math.min(Math.floor(2048/f),Math.floor(m.height/f))),v=d*u,x=f*g,y=$(v,x),b=y.globalCompositeOperation;y.globalCompositeOperation="copy";try{y.drawImage(t,m.x,m.y,m.width,m.height,0,0,v,x)}finally{y.globalCompositeOperation=b}const S=y.getImageData(0,0,v,x).data,E=e.chromaKey,A=null!=E&&!1!==E,C=!0===E,T="blue-screen"===E;let k=null,L=0;!A||C||T||(k=F(E),L=(e.chromaKeyTolerance??60)**2);let I=0,R=255;if(e.normalize){let t=255,e=0;for(let n=0;n<S.length;n+=4){if(A){const t=S[n],e=S[n+1],o=S[n+2];let r=!1;if(C)r=e>1.4*t&&e>1.4*o&&e>80;else if(T)r=o>1.4*t&&o>1.4*e&&o>80;else if(null!==k){const n=t-k.r,a=e-k.g,i=o-k.b;r=n*n+a*a+i*i<=L}if(r)continue}const o=.299*S[n]+.587*S[n+1]+.114*S[n+2];o<t&&(t=o),o>e&&(e=o)}I=t,R=e>t?e-t:255}const H=[],W=K(e.invert),j=A&&e.charset.replace(/ /g,"")||e.charset,P=q(j),z=e.customText?null:U(j,W,e.brightness,e.contrast),O=u*g;for(let t=0;t<f;t++){const n=[];for(let o=0;o<d;o++){let r=0,a=0,i=0,s=0,c=0;for(let e=0;e<g;e++){const n=(t*g+e)*v;for(let t=0;t<u;t++){const e=4*(n+o*u+t),l=S[e],h=S[e+1],d=S[e+2],f=S[e+3];if(A){let t=!1;if(C)t=h>1.4*l&&h>1.4*d&&h>80;else if(T)t=d>1.4*l&&d>1.4*h&&d>80;else if(null!==k){const e=l-k.r,n=h-k.g,o=d-k.b;t=e*e+n*n+o*o<=L}if(t){c++;continue}}r+=l,a+=h,i+=d,s+=f}}if(A&&c>O/2){n.push({char:" ",r:0,g:0,b:0,a:0});continue}const l=O-c,h=l>0?r/l:0,f=l>0?a/l:0,m=l>0?i/l:0,x=l>0?s/l:0,y=.299*h+.587*f+.114*m,b=e.normalize?(y-I)/R*255:y,E=p(b,e.brightness,e.contrast),F=e.ditherStrength>0?w(E,o,t,e.ditherStrength):E,H=e.customText?M(F,e.customText,o,t,d,W):e.ditherStrength>0?B(F,P,W):z[Math.max(0,Math.min(255,0|b))];n.push({char:H,r:h,g:f,b:m,a:x,lum:F})}H.push(n)}return{frame:H,cols:d,rows:f}}function J(t,e,n,o){const r=t instanceof HTMLVideoElement?t.videoWidth:t.width,a=t instanceof HTMLVideoElement?t.videoHeight:t.height;if(0===r||0===a)return{rows:[],cols:0,rowCount:0};const i=e.charAspect,s=e.fontSize*e.charSpacing,c=e.fontSize/i*e.charSpacing,l=n||r,h=o||a,d=Math.floor(l/s),f=Math.floor(h/c);if(d<=0||f<=0)return{rows:[],cols:0,rowCount:0};const m=d,u=f,g=$(m,u),M=G(e.sourceCrop,r,a),v=g.globalCompositeOperation;g.globalCompositeOperation="copy";try{g.drawImage(t,M.x,M.y,M.width,M.height,0,0,m,u)}finally{g.globalCompositeOperation=v}const x=g.getImageData(0,0,m,u).data,y=e.chromaKey,b=null!=y&&!1!==y,S=!0===y,E="blue-screen"===y;let A=null,C=0;!b||S||E||(A=F(y),C=(e.chromaKeyTolerance??60)**2);let T=0,k=255;if(e.normalize){let t=255,e=0;for(let n=0;n<x.length;n+=4){if(b){const t=x[n],e=x[n+1],o=x[n+2];let r=!1;if(S)r=e>1.4*t&&e>1.4*o&&e>80;else if(E)r=o>1.4*t&&o>1.4*e&&o>80;else if(null!==A){const n=t-A.r,a=e-A.g,i=o-A.b;r=n*n+a*a+i*i<=C}if(r)continue}const o=.299*x[n]+.587*x[n+1]+.114*x[n+2];o<t&&(t=o),o>e&&(e=o)}T=t,k=e>t?e-t:255}const L=K(e.invert),I=b&&e.charset.replace(/ /g,"")||e.charset,R=q(I),H=e.customText?null:U(I,L,e.brightness,e.contrast),W=e.customText?q(e.customText):null,j="fullcolor"===e.colorMode?new Uint8ClampedArray(d*f*4):void 0,P=[];for(let t=0;t<f;t++){let n="";for(let o=0;o<d;o++){const r=4*(t*m+o),a=r,i=x[r],s=x[r+1],c=x[r+2],l=x[r+3];if(b){let t=!1;if(S)t=s>1.4*i&&s>1.4*c&&s>80;else if(E)t=c>1.4*i&&c>1.4*s&&c>80;else if(null!==A){const e=i-A.r,n=s-A.g,o=c-A.b;t=e*e+n*n+o*o<=C}if(t){n+=" ",j&&(j[a]=0,j[a+1]=0,j[a+2]=0,j[a+3]=0);continue}}j&&(j[a]=i,j[a+1]=s,j[a+2]=c,j[a+3]=l);const h=.299*i+.587*s+.114*c,f=e.normalize?(h-T)/k*255:h,u=e.ditherStrength>0||W?p(f,e.brightness,e.contrast):f,g=e.ditherStrength>0?w(u,o,t,e.ditherStrength):u;if(W){n+=(L?1-g/255:g/255)<.12?" ":W[(t*d+o)%W.length]}else e.ditherStrength<=0?n+=H[Math.max(0,Math.min(255,0|f))]:n+=B(g,R,L)}P.push(n)}return{rows:P,cols:d,rowCount:f,colors:j}}function Q(t,e,n,o,r){if(0===e.rows.length)return;const a=t.canvas,i=Boolean(n.chromaKey)||e.rows.some(t=>t.includes(" "));i||(z.delete(t),t.clearRect(0,0,o,r),t.fillStyle=T(a)?"#0a0a0a":"#faf9f7",t.fillRect(0,0,o,r));const s=Y(n.accentColor),c=parseInt(s.substring(0,2),16),l=parseInt(s.substring(2,4),16),h=parseInt(s.substring(4,6),16),d=o/e.cols,f=r/e.rowCount,m=.9*Math.min(d/.55,f),u=e.colors;if("fullcolor"===n.colorMode&&u){z.delete(t),t.clearRect(0,0,o,r),t.font=`${m}px "JetBrains Mono", monospace`,t.textAlign="left",t.textBaseline="middle",t.globalAlpha=1;let n="";for(let o=0;o<e.rows.length;o++){const r=D(e.rows[o]);let a=0;for(;a<e.cols;){for(;a<e.cols&&" "===r[a];)a++;if(a>=e.cols)break;const i=a,s=4*(o*e.cols+a),c=240&u[s],l=240&u[s+1],h=240&u[s+2];for(a++;a<e.cols&&" "!==r[a];){const t=4*(o*e.cols+a);if((240&u[t])!==c||(240&u[t+1])!==l||(240&u[t+2])!==h)break;a++}const m=`rgb(${c},${l},${h})`;m!==n&&(t.fillStyle=m,n=m),t.fillText(r.slice(i,a).join(""),i*d+.5*d,o*f+.5*f)}}return void(t.globalAlpha=1)}t.font=`${m}px "JetBrains Mono", monospace`,t.textAlign="left",t.textBaseline="middle";const g="matrix"===n.colorMode?"rgb(0,255,0)":"grayscale"===n.colorMode?T(a)?"rgb(230,230,230)":"rgb(24,24,24)":`rgb(${c},${l},${h})`;t.fillStyle=g,t.globalAlpha=1;const p=z.get(t),M=i&&p&&p.cols===e.cols&&p.rowCount===e.rowCount&&p.canvasWidth===o&&p.canvasHeight===r&&p.fillStyle===g;M||t.clearRect(0,0,o,r);for(let n=0;n<e.rows.length;n++){const r=e.rows[n];M&&p.rows[n]===r||(M&&t.clearRect(0,n*f,o,f+1),0!==r.trim().length&&t.fillText(r,.5*d,n*f+.5*f))}z.set(t,{rows:e.rows.slice(),cols:e.cols,rowCount:e.rowCount,canvasWidth:o,canvasHeight:r,fillStyle:g}),t.globalAlpha=1}async function Z(t,e,n,o,r=12,a=10,i,s=0){const c=Math.min(t.duration-s,a),l=Math.ceil(c*r),h=[];let d=0,f=0;for(let a=0;a<l;a++){const m=s+a/r;if(m>s+c)break;t.currentTime=m,await new Promise(e=>{const n=()=>{t.removeEventListener("seeked",n),e()};t.addEventListener("seeked",n)});const u=_(t,e,n,o);h.push(u.frame),d=u.cols,f=u.rows,i?.((a+1)/l)}return{frames:h,cols:d,rows:f,fps:r}}async function tt(t,e,n,o,r=12,a=10,i,s=0){const c=Math.min(t.duration-s,a),l=Math.ceil(c*r),h=[];let d=0,f=0;for(let a=0;a<l;a++){const m=s+a/r;if(m>s+c)break;t.currentTime=m,await new Promise(e=>{const n=()=>{t.removeEventListener("seeked",n),e()};t.addEventListener("seeked",n)});const u=J(t,e,n,o);h.push(u),d=u.cols,f=u.rowCount,i?.((a+1)/l)}return{frames:h,cols:d,rows:f,fps:r}}async function et(t,e,n,o,r){const{parseGIF:a,decompressFrames:i}=await import("gifuct-js"),s=a(t),c=i(s,!0);if(0===c.length)return{frames:[],cols:0,rows:0,fps:10};const l=c[0].dims.width,h=c[0].dims.height,d=s.lsd?.width||l,f=s.lsd?.height||h,m=document.createElement("canvas");m.width=d,m.height=f;const u=m.getContext("2d"),g=document.createElement("canvas");g.width=d,g.height=f;const p=g.getContext("2d"),M=document.createElement("canvas"),v=M.getContext("2d"),w=[];let x=0,y=0,b=0;for(const t of c)b+=t.delay||100;const S=b/c.length,E=Math.round(Math.min(30,Math.max(5,1e3/S))),A=Math.min(c.length,300);for(let t=0;t<A;t++){const a=c[t],{dims:i,patch:s,disposalType:l}=a;3===l&&(p.clearRect(0,0,d,f),p.drawImage(m,0,0)),M.width!==i.width&&(M.width=i.width),M.height!==i.height&&(M.height=i.height);const h=new ImageData(new Uint8ClampedArray(s.buffer),i.width,i.height);v.putImageData(h,0,0),u.drawImage(M,i.left||0,i.top||0);const b=_(m,e,n,o);w.push(b.frame),x=b.cols,y=b.rows,2===l?u.clearRect(i.left||0,i.top||0,i.width,i.height):3===l&&(u.clearRect(0,0,d,f),u.drawImage(g,0,0)),r?.((t+1)/A)}return{frames:w,cols:x,rows:y,fps:E}}async function nt(t,e,n,o,r){const{parseGIF:a,decompressFrames:i}=await import("gifuct-js"),s=a(t),c=i(s,!0);if(0===c.length)return{frames:[],cols:0,rows:0,fps:10};const l=c[0].dims.width,h=c[0].dims.height,d=s.lsd?.width||l,f=s.lsd?.height||h,m=document.createElement("canvas");m.width=d,m.height=f;const u=m.getContext("2d"),g=document.createElement("canvas");g.width=d,g.height=f;const p=g.getContext("2d"),M=document.createElement("canvas"),v=M.getContext("2d"),w=[];let x=0,y=0,b=0;for(const t of c)b+=t.delay||100;const S=b/c.length,E=Math.round(Math.min(30,Math.max(5,1e3/S))),A=Math.min(c.length,300);for(let t=0;t<A;t++){const a=c[t],{dims:i,patch:s,disposalType:l}=a;3===l&&(p.clearRect(0,0,d,f),p.drawImage(m,0,0)),M.width!==i.width&&(M.width=i.width),M.height!==i.height&&(M.height=i.height);const h=new ImageData(new Uint8ClampedArray(s.buffer),i.width,i.height);v.putImageData(h,0,0),u.drawImage(M,i.left||0,i.top||0);const b=J(m,e,n,o);w.push(b),x=b.cols,y=b.rowCount,2===l?u.clearRect(i.left||0,i.top||0,i.width,i.height):3===l&&(u.clearRect(0,0,d,f),u.drawImage(g,0,0)),r?.((t+1)/A)}return{frames:w,cols:x,rows:y,fps:E}}var ot=new WeakMap,rt=new WeakMap,at=new WeakMap;function it(t,e,n,o,r,a=0,i){if(!e.length||!e[0].length||o<=0||r<=0)return;let s=null;if(n.hoverStrength>0){let e=ot.get(t);e||(e={x:.5,y:.5,intensity:0,time:-1,emittedAt:-1,points:[]},ot.set(t,e)),s=function(t,e,n){const o=t.time<0?1/60:Math.max(0,Math.min(.1,(n-t.time)/1e3));t.time=n;const r=t.intensity<.003,a=t.x,i=t.y;if(e){r&&(t.x=e.x,t.y=e.y);const n=1-Math.exp(-o/.055);t.x+=(e.x-t.x)*n,t.y+=(e.y-t.y)*n}t.intensity+=((e?.intensity??(e?1:0))-t.intensity)*(1-Math.exp(-o/(e?.09:.18)));const s=Math.exp(-o/.22);for(const e of t.points)e.intensity*=s;for(;t.points.length&&t.points[0].intensity<.01;)t.points.shift();return e&&!r&&n-t.emittedAt>=24&&Math.hypot(t.x-a,t.y-i)>5e-4&&(t.points.push({x:t.x,y:t.y,intensity:t.intensity,vx:Math.max(-1,Math.min(1,(t.x-a)/Math.max(o,.001))),vy:Math.max(-1,Math.min(1,(t.y-i)/Math.max(o,.001)))}),t.points.length>12&&t.points.shift(),t.emittedAt=n),!e&&t.intensity<.003&&!t.points.length?(t.intensity=0,null):{x:t.x,y:t.y,intensity:t.intensity,trail:t.points}}(e,i??null,performance.now())}else ot.delete(t);if("none"!==n.animationStyle||n.charsetFrames?.length||n.hoverStrength<=0)return at.delete(t),void st(t,e,n,o,r,a,s);const c=rt.get(t);if(c?.frame!==e)return rt.set(t,{frame:e,since:performance.now()}),at.delete(t),void st(t,e,n,o,r,a,s);if(performance.now()-c.since<100)return void st(t,e,n,o,r,a,s);const l=t.getTransform();if(l.b||l.c||l.a<=0||l.d<=0)return void st(t,e,n,o,r,a,s);if(!s||(s.intensity??0)<.003)return void st(t,e,n,o,r,a,null);const h=T(t.canvas),d={...n,accentColor:"#"+Y(n.accentColor)},f=JSON.stringify([d,o,r,l.a,l.d,h,void 0!==document.fonts?document.fonts.status:"loaded"]);let m=at.get(t);if(!m||m.frame!==e||m.key!==f){const n=m?.canvas??document.createElement("canvas");n.width=Math.ceil(o*l.a),n.height=Math.ceil(r*l.d);const a=n.getContext("2d");a.setTransform(l.a,0,0,l.d,0,0),st(a,e,d,o,r,0,null,void 0,h),m={frame:e,key:f,canvas:n},at.set(t,m)}if(t.clearRect(0,0,o,r),t.drawImage(m.canvas,0,0,o,r),!s||(s.intensity??0)<.003)return;const u=e.length,g=e[0].length,p=.08+.35*n.hoverRadius+.04*n.hoverStrength,M="trail"===n.hoverEffect?[s,...s.trail??[]]:[s];let v=1,w=1,x=0,y=0;for(const t of M)v=Math.min(v,t.x-p),x=Math.max(x,t.x+p),w=Math.min(w,t.y-p),y=Math.max(y,t.y+p);if("glitchText"===n.hoverEffect){const t=n.hoverText,e=Math.max(1,...(Array.isArray(t)?t:[t]).map(t=>t.length));v=Math.min(v,s.x-e/g),x=Math.max(x,s.x+e/g)}const b=Math.ceil(5+4*n.hoverStrength),S={x:Math.max(0,Math.floor(v*g)-b),y:Math.max(0,Math.floor(w*u)-b),right:Math.min(g,Math.ceil(x*g)+b),bottom:Math.min(u,Math.ceil(y*u)+b)};t.save(),t.beginPath(),t.rect(S.x*o/g,S.y*r/u,(S.right-S.x)*o/g,(S.bottom-S.y)*r/u),t.clip(),st(t,e,d,o,r,a,s,S,h),t.restore()}function st(t,e,n,o,i,s=0,c,h,d){const f=e.length;if(0===f)return;const g=e[0].length;t.clearRect(0,0,o,i);let p=!1;const M=Math.max(1,f>>2),v=Math.max(1,g>>2);t:for(let t=0;t<f;t+=M){const n=e[t];for(let t=0;t<g;t+=v)if(n[t].a<200){p=!0;break t}}const w=t.canvas,x=d??T(w);p||(t.fillStyle=x?"#0a0a0a":"#faf9f7",t.fillRect(0,0,o,i));const y=o/g,S=i/f,A=c?.intensity??1,C=!!(c&&n.hoverStrength>0&&A>.005),F="#"+(N(n.hoverColor||"#ffffff")??"ffffff"),k=parseInt(F.slice(1,3),16),L=parseInt(F.slice(3,5),16),R=parseInt(F.slice(5,7),16),H=Y(n.accentColor),W=parseInt(H.substring(0,2),16),$=parseInt(H.substring(2,4),16),j=parseInt(H.substring(4,6),16),P=n.hoverRadius;let z=0,O=g,D=0,U=f,V=0,X=0;if(C&&c){V=c.x,X=c.y;const t=.08+.35*P+.04*n.hoverStrength;z=Math.max(0,Math.floor((V-t)*g)-1),O=Math.min(g,Math.ceil((V+t)*g)+1),D=Math.max(0,Math.floor((X-t)*f)-1),U=Math.min(f,Math.ceil((X+t)*f)+1)}if(C&&"trail"===n.hoverEffect)for(const t of c?.trail??[]){const e=.08+.35*P+.04*n.hoverStrength;z=Math.min(z,Math.max(0,Math.floor((t.x-e)*g)-1)),O=Math.max(O,Math.min(g,Math.ceil((t.x+e)*g)+1)),D=Math.min(D,Math.max(0,Math.floor((t.y-e)*f)-1)),U=Math.max(U,Math.min(f,Math.ceil((t.y+e)*f)+1))}const G=n.animationStyle,_=n.animationSpeed,J=function(t){const e=t&&Object.prototype.hasOwnProperty.call(r,t)?r[t]:t;return a.find(t=>t.value===e||t.mode===e)?.mode??"none"}(G),Q="none"===J,Z=[0,0,0,1],tt=Q?void 0:function(t){const e=u.get(t);if(e)return e;const n=t.length,o=t[0]?.length??0,r=new Uint8ClampedArray(o*n*4);for(let e=0;e<n;e++)for(let n=0;n<o;n++){const a=t[e][n],i=4*(e*o+n);r[i]=a.r,r[i+1]=a.g,r[i+2]=a.b,r[i+3]=a.a}const a=m(r,o,n);return u.set(t,a),a}(e),et=n.hoverStrength,nt=n.hoverEffect,ot=P,rt=n.hoverShape||"circle",at=K(n.invert,w),it=n.colorMode,st=2*Math.PI,ct=1/g,lt=1/f;let ht="",dt=-1;if("dots"===n.renderMode){const r=.5*Math.min(y,S)*n.dotSizeRatio;for(let n=h?.y??0;n<(h?.bottom??f);n++){const a=e[n];for(let e=h?.x??0;e<(h?.right??g);e++){const h=a[e];if(h.a<10)continue;const d=.00392156863*(.299*h.r+.587*h.g+.114*h.b),m=at?1-d:d;if(m<.02)continue;Q||l(J,e/g,n/f,s*_,Z,(.299*h.r+.587*h.g+.114*h.b)/255,tt,8*(n*g+e));const u=Math.max(0,Math.min(1,(1+Z[2])*Z[3]));let p=1,M=0,v=0,w=0,x=0;if(C&&e>=z&&e<=O&&n>=D&&n<=U){const t=I(e*ct,n*lt,V,X,A,et,y,S,nt,ot,rt,c?.trail,o/i);p=t.scale,M=t.offsetX,v=t.offsetY,w=t.glow,x=t.colorBlend}const T=r*m*u*p;if(T<.3)continue;const F=e*y+.5*y+M+Z[0],H=n*S+.5*S+v+Z[1];let P;if(x>0){const t=E(h,it,W,$,j,at);P=`rgb(${Math.min(255,t[0]+(k-t[0])*x|0)},${Math.min(255,t[1]+(L-t[1])*x|0)},${Math.min(255,t[2]+(R-t[2])*x|0)})`}else P=b(h,it,W,$,j,at);const q=Math.min(1,.00392156863*h.a*u*(1+w));if(q!==dt&&(t.globalAlpha=q,dt=q),P!==ht&&(t.fillStyle=P,ht=P),T<=3){const e=2*T;t.fillRect(F-T,H-T,e,e)}else t.beginPath(),t.arc(F,H,T,0,st),t.fill()}}}else{const r=.55,a=.9*Math.min(y/r,S);{const e=/\p{Extended_Pictographic}/u.test(n.customText||n.charset);t.font=e?`${a}px "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Twemoji Mozilla", sans-serif`:`${a}px "JetBrains Mono", monospace`,t.textAlign="center",t.textBaseline="middle"}const d=n.charsetFrames,m=!!d?.length,u=m?d[Math.floor(Math.max(0,s)*(n.charsetFps??2))%d.length]:n.charset,p=t.getTransform();if(!C&&Q&&!m&&"accent"===it&&!h&&n.hoverStrength<=0&&!/\p{Extended_Pictographic}/u.test(n.customText||n.charset)&&"letterSpacing"in t&&/^[\x20-\x7e]*$/.test(n.customText||n.charset)&&e.every(t=>t.every(t=>t.a<10||255===t.a&&1===t.char.length&&/^[\x20-\x7e]$/.test(t.char)))){const n=t.letterSpacing;t.letterSpacing="0px";const o=t.measureText("M").width;t.letterSpacing=y-o+"px",t.fillStyle=`rgb(${W},${$},${j})`,t.globalAlpha=1,t.textAlign="left";for(let n=0;n<f;n++){const r=e[n];let a="";for(let t=0;t<g;t++){const e=r[t];a+=e.a<10?" ":e.char}0!==a.trim().length&&t.fillText(a,.5*(y-o),n*S+.5*S)}return t.letterSpacing=n,t.textAlign="center",void(t.globalAlpha=1)}const M="glitchText"===nt&&C,v="!@#$%^&*<>{}[]|/\\~`0123456789",w=v.length;let x="",T=0,F=0,H=0,K=0,N=0,Y=0;if(M){const t=n.hoverText??"ASCIIFY";if(F=Math.round(V*g),H=Math.round(X*f),Array.isArray(t)){const e=t.filter(t=>t.length>0);0===e.length&&e.push("ASCIIFY");x=e[((7*Math.floor(F/Math.max(1,Math.ceil(g/5)))+13*Math.floor(H/Math.max(1,Math.ceil(f/3))))%e.length+e.length)%e.length]}else x=t||"ASCIIFY";T=x.length,K=Math.max(3,Math.min(12,Math.round(f*P*.6)));const e=Math.floor(K/2);N=Math.max(0,H-e),N+K>f&&(N=Math.max(0,f-K)),Y=F-Math.floor(T/2)}for(let n=h?.y??0;n<(h?.bottom??f);n++){const r=e[n];for(let a=h?.x??0;a<(h?.right??g);a++){const h=r[a];if(h.a<10)continue;let d=m&&null!=h.lum?B(h.lum,q(u),at):h.char;if(" "===d)continue;Q||l(J,a/g,n/f,s*_,Z,(.299*h.r+.587*h.g+.114*h.b)/255,tt,8*(n*g+a));const P=Math.max(0,Math.min(1,(1+Z[2])*Z[3]));if(P<.05)continue;let G=1,st=0,ft=0,mt=0,ut=0;if(C&&!M&&a>=z&&a<=O&&n>=D&&n<=U){const t=I(a*ct,n*lt,V,X,A,et,y,S,nt,ot,rt,c?.trail,o/i);if(G=t.scale,st=t.offsetX,ft=t.offsetY,mt=t.glow,ut=t.colorBlend,"trail"===nt&&t.proximity>0){const o=Math.max(0,Math.min(g-1,Math.round(a-t.offsetX/y))),r=e[Math.max(0,Math.min(f-1,Math.round(n-t.offsetY/S)))][o],i=r.lum??.299*r.r+.587*r.g+.114*r.b;d=B(Math.min(255,i+t.proximity*et*65),q(u),at)}}if(M&&n>=N&&n<N+K){const t=a-Y;if(t>=0&&t<T){const e=x[t],o=Math.abs(n-H)/Math.max(1,.5*K),r=Math.abs(a-F)/Math.max(1,T),i=Math.max(o,r),c=Math.max(0,Math.min(1,1-.9*i)),l=43758.5453*Math.sin(127.1*a+311.7*n+43758.5453*Math.floor(12*s));d=Math.abs(l-Math.floor(l))<c?e:v[Math.abs(Math.floor(97*l))%w],mt=.3+.7*c,ut=.3+.65*c}}const gt=a*y+.5*y+st+Z[0],pt=n*S+.5*S+ft+Z[1];let Mt;if(ut>0){const t=E(h,it,W,$,j,at);Mt=`rgb(${Math.min(255,t[0]+(k-t[0])*ut|0)},${Math.min(255,t[1]+(L-t[1])*ut|0)},${Math.min(255,t[2]+(R-t[2])*ut|0)})`}else Mt=b(h,it,W,$,j,at);const vt=Math.min(1,.00392156863*h.a*P*(1+mt));vt!==dt&&(t.globalAlpha=vt,dt=vt),Mt!==ht&&(t.fillStyle=Mt,ht=Mt),1!==G?(t.translate(gt,pt),t.scale(G,G),t.fillText(d,0,0),t.setTransform(p)):t.fillText(d,gt,pt)}}}t.globalAlpha=1}function ct(t="classic"){if("classic"!==t)throw new RangeError(`Art preset "${String(t)}" was removed in 4.1. Use a StudioStyle with asciify-engine/studio, or supply options.charset directly.`);return{artStyle:"classic"}}function lt(t){return Math.max(0,Math.min(1,t))}function ht(t){return"string"==typeof t?document.querySelector(t):t instanceof HTMLElement?t:null}function dt(t){return"ascii"===t.renderMode&&"none"===t.animationStyle&&t.hoverStrength<=0&&!t.charsetFrames?.length}function ft(t,e={}){const n=lt(t),o=lt(n*(void 0===e.speed?1:Math.max(.001,e.speed)));return lt(e.ease?e.ease(o):o)}function mt(t,e,n={}){if(!Number.isFinite(t.duration)||t.duration<=0)return;const o=n.from??0,r=n.to??t.duration,a=Math.max(o,Math.min(r,t.duration)),i=ft(e,n),s=o+(a-o)*i;t.currentTime=Math.min(Math.max(o,s),Math.max(o,a-.04)),n.onUpdate?.(i,t)}function ut(t,e){return Math.abs(t.currentTime-e)<1/240?gt(t):new Promise(n=>{const o=()=>{t.removeEventListener("seeked",o),n()};t.addEventListener("seeked",o,{once:!0});const r=t.fastSeek;r?r.call(t,e):t.currentTime=e})}function gt(t){const e=t.requestVideoFrameCallback;return new Promise(e?n=>{let o=!1;const r=()=>{o||(o=!0,n())};e.call(t,r),window.setTimeout(r,32)}:t=>requestAnimationFrame(()=>t()))}function pt(t,e={}){const n=ht(e.trigger)??t;t.pause();const o=e.gsap,r=e.ScrollTrigger??o?.ScrollTrigger;if(o&&r?.create){o.registerPlugin?.(r);const a=r.create({trigger:n,start:e.start??"top bottom",end:e.end??"bottom top",scrub:e.scrub??!0,onUpdate:n=>mt(t,n.progress,e)});return()=>a.kill?.()}return function(t,e,n){let o=0;const r=()=>{o=0;const r=e.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight,i=r.height+a,s=i>0?lt((a-r.top)/i):0;mt(t,s,n)},a=()=>{o||(o=requestAnimationFrame(r))};return window.addEventListener("scroll",a,{passive:!0}),window.addEventListener("resize",a),a(),()=>{window.removeEventListener("scroll",a),window.removeEventListener("resize",a),o&&cancelAnimationFrame(o)}}(t,n,e)}function Mt(t,e,n){const o=e.gsap,r=e.ScrollTrigger??o?.ScrollTrigger;if(o&&r?.create){o.registerPlugin?.(r);const a=r.create({trigger:t,start:e.start??"top bottom",end:e.end??"bottom top",scrub:e.scrub??!0,onUpdate:t=>n(t.progress)});return()=>a.kill?.()}return function(t,e){let n=0;const o=()=>{n=0;const o=t.getBoundingClientRect(),r=window.innerHeight||document.documentElement.clientHeight,a=o.height+r,i=a>0?lt((r-o.top)/a):0;e(i)},r=()=>{n||(n=requestAnimationFrame(o))};return window.addEventListener("scroll",r,{passive:!0}),window.addEventListener("resize",r),r(),()=>{window.removeEventListener("scroll",r),window.removeEventListener("resize",r),n&&cancelAnimationFrame(n)}}(t,n)}function vt(t,e,n){if(!t||!e||!n.sourceCrop)return{w:t,h:e};const o=G(n.sourceCrop,t,e);return{w:Math.max(1,Math.round(o.width)),h:Math.max(1,Math.round(o.height))}}function wt(t,e,n,o){const r=o.chromaKey;if(null==r||!1===r)return!1;if(!0===r)return e>1.4*t&&e>1.4*n&&e>80;if("blue-screen"===r)return n>1.4*t&&n>1.4*e&&n>80;const a=F(r),i=(o.chromaKeyTolerance??60)**2,s=t-a.r,c=e-a.g,l=n-a.b;return s*s+c*c+l*l<=i}function xt(t,e,n){if(!e.chromaKey||!e.sourceCrop||"off"===e.chromaKeyTrimMode)return e;const o=t instanceof HTMLVideoElement?t.videoWidth:t.width,r=t instanceof HTMLVideoElement?t.videoHeight:t.height;if(!o||!r)return e;const a=G(e.sourceCrop,o,r),i=Math.min(360,Math.max(1,Math.round(a.width))),s=Math.max(1,Math.round(i*(a.height/a.width))),{ctx:c}=g(i,s);c.drawImage(t,a.x,a.y,a.width,a.height,0,0,i,s);const l=c.getImageData(0,0,i,s).data,h=Math.max(0,Math.min(255,e.chromaKeyTrimLuminanceThreshold??0));let d=i,f=s,m=-1,u=-1;for(let t=0;t<s;t++)for(let n=0;n<i;n++){const o=4*(t*i+n),r=l[o+3],a=l[o],s=l[o+1],c=l[o+2];r<=8||.2126*a+.7152*s+.0722*c<=h||wt(a,s,c,e)||(n<d&&(d=n),t<f&&(f=t),n>m&&(m=n),t>u&&(u=t))}if(m<d||u<f)return e;const p=Math.max(0,Math.min(.25,e.chromaKeyTrimPadding??.002)),M=Math.round(i*p),v=Math.round(s*p);d=Math.max(0,d-M),f=Math.max(0,f-v),m=Math.min(i-1,m+M),u=Math.min(s-1,u+v);const w=function(t,e,n,o,r){const a=r&&Number.isFinite(r)&&r>0?r:null;if(!a)return t;const i=e.x,s=e.y,c=e.x+e.width,l=e.y+e.height,h=Math.max(i,t.left),d=Math.max(s,t.top),f=Math.min(c,n-t.right),m=Math.min(l,o-t.bottom),u=Math.max(1,f-h),g=Math.max(1,m-d),p=h+u/2,M=d+g/2;let v=u,w=g;v/w<a?v=w*a:w=v/a;v>e.width&&(v=e.width,w=Math.max(g,Math.min(e.height,v/a)));w>e.height&&(w=e.height,v=Math.max(u,Math.min(e.width,w*a)));let x=p-v/2,y=M-w/2;return x=Math.max(i,Math.min(c-v,x)),y=Math.max(s,Math.min(l-w,y)),{left:x,top:y,right:n-(x+v),bottom:o-(y+w)}}({left:a.x+d/i*a.width,top:a.y+f/s*a.height,right:o-(a.x+(m+1)/i*a.width),bottom:r-(a.y+(u+1)/s*a.height)},{x:a.x,y:a.y,width:a.width,height:a.height},o,r,n);return{...e,sourceCrop:{unit:"pixel",...w,preserveAspect:!1}}}function yt(t){const e=t.sourceCrop;return e&&"pixel"===e.unit?void 0===e.left||void 0===e.top||void 0===e.right||void 0===e.bottom?null:{left:e.left,top:e.top,right:e.right,bottom:e.bottom}:null}async function bt(t,e,n,o,r){if(!e.chromaKey||!e.sourceCrop||"range"!==e.chromaKeyTrimMode)return e;const a=t.currentTime,i=function(t,e,n,o){const r=!0===o?{}:o||{},a=Math.max(0,r.from??e),i=r.to??n??(Number.isFinite(t.duration)?t.duration:a),s=Math.max(a,i-.04),c=Math.max(0,s-a),l=c>.1?[a,a+.25*c,a+.5*c,a+.75*c,s]:[a];return Array.from(new Set(l.map(t=>Math.max(0,Number(t.toFixed(3))))))}(t,n,o,r);let s=null;for(const n of i){await ut(t,n),await gt(t);const o=yt(xt(t,e));o&&(s=s?{left:Math.min(s.left,o.left),top:Math.min(s.top,o.top),right:Math.min(s.right,o.right),bottom:Math.min(s.bottom,o.bottom)}:o)}return await ut(t,a),await gt(t),s?{...e,sourceCrop:{unit:"pixel",...s,preserveAspect:!0}}:e}function St(t,e,n=2048){return Et({sourceWidth:t,sourceHeight:e,maxRenderDimension:n})}function Et({sourceWidth:t,sourceHeight:e,cssWidth:n=0,cssHeight:o=0,maxRenderDimension:r=2048}){const a=Math.max(1,t),i=Math.max(1,e),s=a/i,c=Math.max(1,r),l=Math.min(1,c/Math.max(a,i)),h=Math.max(a,i)*l,d=Math.max(0,n,o),f=Math.min(c,Math.max(h,d));return s>=1?{renderW:Math.round(f),renderH:Math.round(f/s)}:{renderW:Math.round(f*s),renderH:Math.round(f)}}function At(t,e,n,o){if(void 0===t)return;if("number"==typeof t)return t;const r=t.trim();if(r.endsWith("%")){const t=Number.parseFloat(r)/100;return Number.isFinite(t)?e*t:void 0}if(r.endsWith("px")){const t=Number.parseFloat(r);return Number.isFinite(t)?t:void 0}if(r.endsWith("vw")){const t=Number.parseFloat(r)/100;return Number.isFinite(t)?n*t:void 0}if(r.endsWith("vh")){const t=Number.parseFloat(r)/100;return Number.isFinite(t)?o*t:void 0}}function Ct(t,e,n,o,r,a=2048,i={}){const{width:s,height:c}=e.getBoundingClientRect();if(!s||!c)return{renderW:0,renderH:0,dpr:1};const l="undefined"!=typeof window?window.innerWidth:s,h="undefined"!=typeof window?window.innerHeight:c,d=At(i.width,s,l,h)??s,f=At(i.height,c,l,h)??c,m=function(t,e,n,o,r){const a=t=>{const n=At(t,e,o,r);return n&&n>0?n:0},i=t=>{const e=At(t,n,o,r);return e&&e>0?e:0};return void 0===t?{x:0,y:0}:"number"==typeof t||"string"==typeof t?{x:a(t),y:i(t)}:{x:a(t.x),y:i(t.y)}}(i.bleed,s,c,l,h),u=d+2*m.x,g=f+2*m.y,{cssW:p,cssH:M}=function(t,e,n,o="contain"){if("fill"===o)return{cssW:t,cssH:e};let r=t,a=r/n;const i="cover"===o,s=a>e;return(i&&!s||!i&&s)&&(a=e,r=a*n),"scale-down"===o&&(r=Math.min(r,t),a=Math.min(a,e)),{cssW:Math.round(r),cssH:Math.round(a)}}(u,g,n,i.objectFit??"contain"),v="undefined"!=typeof window&&window.devicePixelRatio||1;let w,x;o&&r?({renderW:w,renderH:x}=Et({sourceWidth:o,sourceHeight:r,cssWidth:p,cssHeight:M,maxRenderDimension:a})):(w=p,x=M);const y=8e6,b=w*v*x*v>y?Math.sqrt(y/(w*x)):v;return t.width=Math.round(w*b),t.height=Math.round(x*b),t.style.width=`${p}px`,t.style.height=`${M}px`,{renderW:w,renderH:x,dpr:b}}async function Tt(t,e,{fontSize:o,artStyle:r="classic",options:a={}}={}){let i;if("string"==typeof t){const e=new Image;e.crossOrigin="anonymous",await new Promise((n,o)=>{e.onload=()=>n(),e.onerror=()=>o(new Error(`Failed to load image: ${t}`)),e.src=t}),i=e}else t instanceof HTMLImageElement&&!t.complete?(await new Promise((e,n)=>{t.onload=()=>e(),t.onerror=()=>n(new Error("Image failed to load"))}),i=t):i=t;const s=ct(r),c=o??a.fontSize??10,l={...n,...s,artStyle:r,...a,fontSize:c},h=e.getContext("2d");if(!h)throw new Error("Could not get 2d context from canvas");const{w:d,h:f}=function(t){return t instanceof HTMLVideoElement?{w:t.videoWidth,h:t.videoHeight}:t instanceof HTMLImageElement?{w:t.naturalWidth||t.width,h:t.naturalHeight||t.height}:{w:t.width,h:t.height}}(i),{renderW:m,renderH:u}=St(d,f),g="undefined"!=typeof window&&window.devicePixelRatio||1,p=8e6,M=m*g*u*g>p?Math.sqrt(p/(m*u)):g;e.width===Math.round(m*M)&&e.height===Math.round(u*M)||(e.width=Math.round(m*M),e.height=Math.round(u*M));const{frame:v}=_(i,l,m,u),w=(t,e)=>{h.save(),h.setTransform(M,0,0,M,0,0),it(h,v,l,m,u,t/1e3,e),h.restore()};w(0,null);return R(e,w,{continuous:"none"!==l.animationStyle||!!l.charsetFrames?.length,interactive:l.hoverStrength>0}).stop}async function Ft(t,e,{fontSize:o,artStyle:r="classic",options:a={}}={}){const i="string"==typeof t?await fetch(t).then(t=>t.arrayBuffer()):t,s=o??a.fontSize??10;let c={...n,...ct(r),artStyle:r,...a,fontSize:s};const l=e.getContext("2d");if(!l)throw new Error("Could not get 2d context from canvas");const{frames:h,fps:d}=await et(i,c,e.width,e.height);if(!h.length)throw new Error("asciifyGif: the GIF contains no renderable frames.");const f=performance.now();let m=-1;return R(e,(t,n)=>{const o=Math.floor((t-f)*d/1e3)%h.length;o===m&&!n&&c.hoverStrength<=0&&"none"===c.animationStyle&&!c.charsetFrames?.length||(it(l,h[o],c,e.width,e.height,(t-f)/1e3,n),m=o)},{continuous:!0,interactive:c.hoverStrength>0}).stop}async function kt(t,e,{fontSize:o,artStyle:r="classic",options:a={},fitTo:i,objectFit:s,objectPosition:c,scale:l,width:h,height:d,bleed:f,preExtract:m=!1,fps:u,maxRenderDimension:g=2048,trim:p,scroll:M,maxCachedFrames:v=90,onReady:w,onFrame:x}={}){const y=p?.start??0,b=p?.end,S=o??a.fontSize??10;let E={...n,...ct(r),artStyle:r,...a,fontSize:S};const A=e.getContext("2d");if(!A)throw new Error("asciifyVideo: could not get 2d context from canvas.");const C="string"==typeof i?document.querySelector(i):i instanceof HTMLElement?i:null,T={objectFit:s,objectPosition:c,scale:l,width:h,height:d,bleed:f},F=function(t,e){var n;if(!function(t){return void 0!==t.objectFit||void 0!==t.objectPosition||void 0!==t.scale||void 0!==t.width||void 0!==t.height||void 0!==t.bleed}(e))return()=>{};const o={width:t.style.width,height:t.style.height,objectFit:t.style.objectFit,objectPosition:t.style.objectPosition,maxWidth:t.style.maxWidth,maxHeight:t.style.maxHeight,transformOrigin:t.style.transformOrigin,scale:t.style.getPropertyValue("scale")};if(e.objectFit&&(t.style.objectFit=e.objectFit),e.objectPosition&&(t.style.objectPosition=e.objectPosition,t.style.transformOrigin=e.objectPosition),void 0===e.scale&&void 0===e.bleed||(t.style.maxWidth="none",t.style.maxHeight="none"),void 0!==e.scale){const o=Number.isFinite(e.scale)&&e.scale>0?e.scale:1;t.style.setProperty("scale",String(o)),(n=t.style).transformOrigin||(n.transformOrigin=e.objectPosition??"center center")}return()=>{t.style.width=o.width,t.style.height=o.height,t.style.objectFit=o.objectFit,t.style.objectPosition=o.objectPosition,t.style.maxWidth=o.maxWidth,t.style.maxHeight=o.maxHeight,t.style.transformOrigin=o.transformOrigin,o.scale?t.style.setProperty("scale",o.scale):t.style.removeProperty("scale")}}(e,T),k=t=>()=>{t(),F()};if(m){let n;"string"==typeof t?(n=document.createElement("video"),n.crossOrigin="anonymous",n.src=t,n.readyState<2&&await new Promise((e,o)=>{n.onloadeddata=()=>e(),n.onerror=()=>o(new Error(`asciifyVideo: failed to load "${t}"`))})):n=t,E=await bt(n,E,y,b,M);const o=vt(n.videoWidth,n.videoHeight,E);C&&Ct(e,C,o.w/o.h,o.w,o.h,g,T);const{renderW:r,renderH:a}=St(o.w,o.h,g),i="undefined"!=typeof window&&window.devicePixelRatio||1,s=8e6,c=r*i*a*i>s?Math.sqrt(s/(r*a)):i;e.width===Math.round(r*c)&&e.height===Math.round(a*c)||(e.width=Math.round(r*c),e.height=Math.round(a*c));const l=void 0!==b?b-y:10,h=u??(M?18:void 0);if(dt(E)){const{frames:t,fps:o}=await tt(n,E,r,a,h,l,void 0,y),i=e=>{const n=t[e];n&&(A.save(),A.setTransform(c,0,0,c,0,0),Q(A,n,E,r,a),A.restore(),x?.())};if(M){let o=!1,r=-1;const a=!0===M?{}:M,s=Mt(ht(a.trigger)??C??e,a,e=>{const s=ft(e,a),c=Math.max(0,Math.min(t.length-1,Math.round(s*(t.length-1))));c!==r&&(r=c,i(c),o||(o=!0,w?.(n)),a.onUpdate?.(s,n))});return i(0),o=!0,w?.(n),k(s)}let s,d=!1,f=0,m=performance.now(),u=!0;const g=1e3/o,p=e=>{d||(e-m>=g&&(i(f),f=(f+1)%t.length,m=e,u&&(u=!1,w?.(n))),s=requestAnimationFrame(p))};return s=requestAnimationFrame(p),k(()=>{d=!0,cancelAnimationFrame(s)})}const{frames:d,fps:f}=await Z(n,E,r,a,h,l,void 0,y);if(!d.length)throw new Error("asciifyVideo: no frames were decoded.");let m=0;const p=performance.now(),v=R(e,(t,e)=>{M||(m=Math.floor((t-p)*f/1e3)%d.length),A.save(),A.setTransform(c,0,0,c,0,0),it(A,d[m],E,r,a,(t-p)/1e3,e),A.restore(),x?.()},{continuous:!M||"none"!==E.animationStyle||!!E.charsetFrames?.length,interactive:E.hoverStrength>0});let S;if(M){const t=!0===M?{}:M;S=Mt(ht(t.trigger)??C??e,t,e=>{m=Math.max(0,Math.min(d.length-1,Math.round(ft(e,t)*(d.length-1)))),v.wake(),t.onUpdate?.(e,n)})}return w?.(n),k(()=>{v.stop(),S?.()})}let L,I=!1;"string"==typeof t?(L=document.createElement("video"),L.crossOrigin="anonymous",L.src=t,L.muted=!0,L.loop=!0,L.playsInline=!0,L.setAttribute("playsinline",""),Object.assign(L.style,{position:"fixed",top:"0",left:"0",width:"1px",height:"1px",opacity:"0",pointerEvents:"none",zIndex:"-1"}),document.body.appendChild(L),I=!0,await new Promise((e,n)=>{L.onloadedmetadata=()=>e(),L.onerror=()=>n(new Error(`asciifyVideo: failed to load "${t}"`))}),await L.play().catch(()=>{})):(L=t,L.readyState<HTMLMediaElement.HAVE_METADATA&&await new Promise((t,e)=>{const n=()=>{L.removeEventListener("loadedmetadata",o),L.removeEventListener("error",r)},o=()=>{n(),t()},r=()=>{n(),e(new Error("asciifyVideo: provided video element failed to load metadata."))};L.addEventListener("loadedmetadata",o),L.addEventListener("error",r),L.load()}),L.paused&&await L.play().catch(()=>{})),y>0&&(L.currentTime=y,await new Promise(t=>{const e=()=>{L.removeEventListener("seeked",e),t()};L.addEventListener("seeked",e)}),await gt(L));let H=null;(y>0||void 0!==b)&&(H=()=>{(void 0!==b&&L.currentTime>=b||y>0&&L.currentTime<y)&&(L.currentTime=y)},L.addEventListener("timeupdate",H)),E=await bt(L,E,y,b,M);let W=null;const $=vt(L.videoWidth,L.videoHeight,E);let{renderW:j,renderH:P}=St($.w,$.h,g);const z=t=>"frame"===E.chromaKeyTrimMode?xt(t,E,j/P):E;if(C){const t=$.w/$.h,n=$.w,o=$.h,r=Ct(e,C,t,n,o,g,T);j=r.renderW,P=r.renderH;const a=e.getContext("2d");a&&a.setTransform(r.dpr,0,0,r.dpr,0,0),W=new ResizeObserver(()=>{const r=Ct(e,C,t,n,o,g,T);j=r.renderW,P=r.renderH;const a=e.getContext("2d");a&&a.setTransform(r.dpr,0,0,r.dpr,0,0)}),W.observe(C)}else{const t="undefined"!=typeof window&&window.devicePixelRatio||1,n=8e6,o=j*t*P*t>n?Math.sqrt(n/(j*P)):t;e.width===Math.round(j*o)&&e.height===Math.round(P*o)||(e.width=Math.round(j*o),e.height=Math.round(P*o)),A.setTransform(o,0,0,o,0,0)}let O=!0,q=null;const D=M&&!m,B=u&&u>0?1e3/u:0;let U=0;const V=!D&&dt(E);if(D&&"ascii"===E.renderMode&&"none"===E.animationStyle&&E.hoverStrength<=0&&!E.charsetFrames?.length){const t=!0===M?{}:M,n=ht(t.trigger)??C??e,o=t.from??y,r=t.to??b??L.duration,a=Math.max(o,Math.min(r,L.duration)),i=Math.max(.001,a-o),s=Math.min(60,Math.max(12,u??30)),c=Math.max(2,Math.ceil(i*s)+1),l=new Array(c),h=[],d=Math.max(2,Math.min(c,Math.floor(v))),f=()=>{for(;h.length>d;){const t=h.findIndex(t=>t!==g&&Math.abs(t-g)>2),e=t>=0?t:0,n=h.splice(e,1)[0];void 0!==n&&(l[n]=void 0)}},m=t=>{const e=h.indexOf(t);e>=0&&h.splice(e,1),h.push(t),f()};let g=0,p=0,S=-1,T=0,F=!1,R=!1,$=!1;const O=new Set,D=document.createElement("video");D.muted=!0,D.playsInline=!0,D.preload="auto",D.crossOrigin=L.crossOrigin||"anonymous",D.src=L.currentSrc||L.src,Object.assign(D.style,{position:"fixed",top:"0",left:"0",width:"1px",height:"1px",opacity:"0",pointerEvents:"none",zIndex:"-1"}),document.body.appendChild(D),D.readyState<HTMLMediaElement.HAVE_METADATA&&await new Promise((t,e)=>{const n=()=>{D.removeEventListener("loadedmetadata",o),D.removeEventListener("error",r)},o=()=>{n(),t()},r=()=>{n(),e(new Error("asciifyVideo: cache video failed to load metadata."))};D.addEventListener("loadedmetadata",o),D.addEventListener("error",r),D.load()}),D.pause(),L.paused&&await L.play().catch(()=>{});const V=t=>o+i*t/Math.max(1,c-1),K=t=>Math.max(0,Math.min(c-1,Math.round(t*(c-1)))),N=z(L),Y=J(L,N,j,P);Y.rows.length>0&&(l[0]=Y,m(0),Q(A,Y,N,j,P),$=!0,w?.(L),x?.());const X=t=>{if(l[t])return t;for(let e=1;e<c;e++){const n=t-e,o=t+e;if(n>=0&&l[n])return n;if(o<c&&l[o])return o}return-1},G=()=>{if(!l[g])return g;for(const t of O)if(!l[t])return t;for(let t=1;t<c;t++){const e=g-t,n=g+t;if(e>=0&&!l[e])return e;if(n<c&&!l[n])return n}return-1},_=t=>{t<0||t>=c||l[t]||(O.add(t),Z())},Z=async()=>{if(F||R)return;const t=G();if(!(t<0)){O.delete(t),R=!0;try{if(await ut(D,V(t)),!F){const e=z(D),n=J(D,e,j,P);n.rows.length>0&&(l[t]=n,m(t))}}finally{R=!1,F||requestAnimationFrame(()=>{Z()})}}},tt=()=>{if(F)return;const t=X(g);if(t>=0&&t!==S){const e=l[t];e&&(Q(A,e,E,j,P),S=t,$||($=!0,w?.(L)),x?.())}else if(t<0||S<0){const t=performance.now();if(B<=0||t-U>=B){const e=z(L),n=J(L,e,j,P);n.rows.length>0&&(Q(A,n,e,j,P),U=t,$||($=!0,w?.(L)),x?.())}}_(g),T=requestAnimationFrame(tt)};return q=Mt(n,t,e=>{const n=function(t,e,n={}){if(!Number.isFinite(t.duration)||t.duration<=0)return null;const o=n.from??0,r=n.to??t.duration,a=Math.max(o,Math.min(r,t.duration)),i=ft(e,n),s=o+(a-o)*i;return{progress:i,time:Math.min(Math.max(o,s),Math.max(o,a-.04))}}(L,e,{...t,from:o,to:a});p=n?.progress??lt(e),g=K(p),_(g),_(g-1),_(g+1),_(g-2),_(g+2),_(g-3),_(g+3),t.onUpdate?.(p,L)}),_(0),_(1),T=requestAnimationFrame(tt),k(()=>{F=!0,cancelAnimationFrame(T),q?.(),W?.disconnect(),O.clear(),h.length=0,l.fill(void 0),D.pause(),D.src="",D.removeAttribute("src"),D.load(),D.isConnected&&D.remove(),H&&L.removeEventListener("timeupdate",H),I&&(L.pause(),L.src="",L.removeAttribute("src"),L.load(),L.isConnected&&L.remove())})}if(D){const t=!0===M?{}:M;q=pt(L,{...t,trigger:t.trigger??C??e,from:t.from??y,to:t.to??b})}let K=-1,N=0,Y=-1,X=0;const G="function"==typeof L.requestVideoFrameCallback,et=()=>{X=L.requestVideoFrameCallback(()=>{N++,et()})};G&&et();let nt=0,ot=0,rt=null;const at=R(e,(t,n)=>{if(L.readyState<2||0===e.width||0===e.height)return;if(B>0&&t-U<B&&!n)return;if(y>0&&L.currentTime<y)return;if(void 0!==b&&L.currentTime>=b)return;const o=(G?N!==Y:L.currentTime!==K)||nt!==j||ot!==P;if(o||!(E.hoverStrength<=0)||"none"!==E.animationStyle||E.charsetFrames?.length){if(V){const t=z(L),e=J(L,t,j,P);Q(A,e,t,j,P)}else!o&&rt||(rt=_(L,z(L),j,P).frame),it(A,rt,E,j,P,t/1e3,n);K=L.currentTime,Y=N,nt=j,ot=P,U=t,O&&(O=!1,w?.(L)),x?.()}},{continuous:!0,interactive:E.hoverStrength>0});return k(()=>{at.stop(),X&&L.cancelVideoFrameCallback(X),q?.(),W?.disconnect(),H&&L.removeEventListener("timeupdate",H),I&&(L.pause(),L.src="",L.removeAttribute("src"),L.load(),L.isConnected&&L.remove())})}function Lt(t,e,n){return kt(t,e,n)}function It(t,e={},o,r){const a={...n,...e},{frame:i,cols:s}=_(t,a,o,r);if(!i.length||0===s)return"";const c=[];for(const t of i)c.push(t.map(t=>t.char).join(""));return c.join("\n")}function Rt(t,e={},o,r){const a={...n,...e},{frame:i,cols:s}=_(t,a,o,r);if(!i.length||0===s)return"";const c=[];for(const t of i){let e="";for(const n of t)" "===n.char||n.a<10?e+=" ":e+=`[38;2;${n.r};${n.g};${n.b}m${n.char}[0m`;c.push(e)}return c.join("\n")}function Ht(t,e,n,o="#505050",r=100){if(!t||e<=0||n<=0)return[];const a=function(t){const e=t.match(/^#([0-9a-f]{3,8})$/i)?.[1];if(e){const t=e.length<=4?e.split("").map(t=>parseInt(t+t,16)):[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)];return{r:t[0],g:t[1],b:t[2]}}const n=t.match(/rgba?\(\s*(\d+)[,\s]+(\d+)[,\s]+(\d+)/i);return n?{r:+n[1],g:+n[2],b:+n[3]}:null}(o)??{r:80,g:80,b:80},i=t,s=i.length;return Array.from({length:n},(t,n)=>Array.from({length:e},(t,o)=>({char:i[(n*e+o)%s],r:a.r,g:a.g,b:a.b,a:r})))}var Wt=new WeakMap;function $t(t,e,o,r,a={},i){const{fontSize:s=10,lineHeight:c=1.6,color:l="#505050",opacity:h=100,hoverEffect:d="spotlight",hoverStrength:f=.85,hoverRadius:m=.18,hoverColor:u="#d4ff00"}=a,g=Math.max(1,Math.floor(e/s)),p=Math.max(1,Math.floor(o/(s*c))),M=JSON.stringify([r,g,p,l,h]);let v=Wt.get(t);v&&v.key===M||(v={key:M,frame:Ht(r,g,p,l,h)},Wt.set(t,v));it(t,v.frame,{...n,fontSize:s,hoverEffect:d,hoverStrength:f,hoverRadius:m,hoverColor:u},e,o,0,i??null)}function jt(t,{format:e="png",quality:n=.92,scale:o=1}={}){return new Promise((r,a)=>{let i=t;if(1!==o){const e=document.createElement("canvas");e.width=Math.round(t.width*o),e.height=Math.round(t.height*o);const n=e.getContext("2d");if(!n)return void a(new Error("captureSnapshot: could not get 2d context"));n.drawImage(t,0,0,e.width,e.height),i=e}i.toBlob(t=>t?r(t):a(new Error("captureSnapshot: toBlob returned null")),`image/${e}`,n)})}async function Pt(t,e={}){const{filename:n="asciify-snapshot",format:o="png",...r}=e,a=await jt(t,{format:o,...r}),i="jpeg"===o?"jpg":o,s=document.createElement("a");s.href=URL.createObjectURL(a),s.download=`${n}.${i}`,s.click(),setTimeout(()=>URL.revokeObjectURL(s.href),1e4)}async function zt(t,{fontSize:e=10,style:o="classic",options:r={},liveOptions:a,mirror:i=!0,constraints:s={facingMode:"user"},dpr:c}={}){if(!navigator.mediaDevices?.getUserMedia)throw new Error("asciifyWebcam: getUserMedia is not supported in this browser.");const l=ct(o),h=await navigator.mediaDevices.getUserMedia({video:s}),d=document.createElement("video");d.srcObject=h,d.muted=!0,d.playsInline=!0,await new Promise((t,e)=>{d.onloadedmetadata=()=>t(),d.onerror=()=>e(new Error("asciifyWebcam: video stream failed to load.")),d.play().catch(e)});const f={...n,...l,...r,fontSize:e},m=t.getContext("2d");if(!m)throw new Error("asciifyWebcam: could not get 2d context from canvas.");const u=c??("undefined"!=typeof window?window.devicePixelRatio:1)??1;1!==u&&m.scale(u,u);let g=null;const p=e=>{const n=t.getBoundingClientRect();g={x:(e.clientX-n.left)/n.width,y:(e.clientY-n.top)/n.height}},M=()=>{g=null};f.hoverStrength>0&&(t.addEventListener("mousemove",p),t.addEventListener("mouseleave",M));let v,w=!1;const x=performance.now(),y=e=>{if(!w){if(d.readyState>=d.HAVE_CURRENT_DATA){const n=t.width/u,o=t.height/u,r=(e-x)/1e3,s=a?{...f,...a()}:f;s.hoverStrength>0?(t.addEventListener("mousemove",p),t.addEventListener("mouseleave",M)):(t.removeEventListener("mousemove",p),t.removeEventListener("mouseleave",M));const{frame:c}=_(d,s,n,o),l=g&&i?{x:1-g.x,y:g.y}:g;i?(m.save(),m.scale(-1,1),m.translate(-n,0),it(m,c,s,n,o,r,l),m.restore()):it(m,c,s,n,o,r,l)}v=requestAnimationFrame(y)}};return v=requestAnimationFrame(y),()=>{w=!0,cancelAnimationFrame(v),t.removeEventListener("mousemove",p),t.removeEventListener("mouseleave",M),h.getTracks().forEach(t=>t.stop()),d.srcObject=null}}var Ot={A:[28,54,99,127,99,99,99],B:[126,99,99,126,99,99,126],C:[62,99,96,96,96,99,62],D:[124,102,99,99,99,102,124],E:[127,96,96,124,96,96,127],F:[127,96,96,124,96,96,96],G:[62,99,96,111,99,99,62],H:[99,99,99,127,99,99,99],I:[127,8,8,8,8,8,127],J:[63,6,6,6,102,102,60],K:[99,102,108,120,108,102,99],L:[96,96,96,96,96,96,127],M:[99,119,107,107,99,99,99],N:[99,115,107,103,99,99,99],O:[62,99,99,99,99,99,62],P:[126,99,99,126,96,96,96],Q:[62,99,99,99,107,102,61],R:[126,99,99,126,108,102,99],S:[62,99,96,62,3,99,62],T:[127,8,8,8,8,8,8],U:[99,99,99,99,99,99,62],V:[99,99,99,99,54,28,8],W:[99,99,99,107,107,54,20],X:[99,54,28,8,28,54,99],Y:[99,99,54,28,8,8,8],Z:[127,3,6,12,24,48,127],a:[0,0,60,3,62,99,61],b:[96,96,124,99,99,99,124],c:[0,0,62,96,96,96,62],d:[3,3,31,99,99,99,31],e:[0,0,62,99,127,96,62],f:[30,48,48,126,48,48,48],g:[0,0,63,99,63,3,62],h:[96,96,124,99,99,99,99],i:[8,0,24,8,8,8,28],j:[4,0,12,4,4,36,24],k:[96,96,102,108,120,108,102],l:[24,8,8,8,8,8,28],m:[0,0,92,107,107,99,99],n:[0,0,94,99,99,99,99],o:[0,0,62,99,99,99,62],p:[0,0,126,99,126,96,96],q:[0,0,63,99,63,3,3],r:[0,0,94,99,96,96,96],s:[0,0,62,96,62,3,124],t:[48,48,126,48,48,48,30],u:[0,0,99,99,99,103,59],v:[0,0,99,99,54,28,8],w:[0,0,99,99,107,54,20],x:[0,0,99,54,28,54,99],y:[0,0,99,99,63,3,62],z:[0,0,127,6,12,24,127],0:[62,99,103,107,115,99,62],1:[8,24,56,8,8,8,62],2:[62,99,3,6,24,48,127],3:[62,99,3,30,3,99,62],4:[6,14,22,38,127,6,6],5:[127,96,126,3,3,99,62],6:[62,99,96,126,99,99,62],7:[127,3,6,12,24,24,24],8:[62,99,99,62,99,99,62],9:[62,99,99,63,3,99,62]," ":[0,0,0,0,0,0,0],"!":[24,24,24,24,24,0,24],"?":[62,99,3,14,8,0,8],".":[0,0,0,0,0,24,24],",":[0,0,0,0,0,24,48],";":[0,24,24,0,24,24,48],":":[0,24,24,0,24,24,0],"-":[0,0,0,62,0,0,0],_:[0,0,0,0,0,0,127],"'":[24,24,32,0,0,0,0],'"':[54,54,36,0,0,0,0],"`":[24,8,0,0,0,0,0],")":[24,12,6,6,6,12,24],"(":[12,24,48,48,48,24,12],"[":[60,48,48,48,48,48,60],"]":[30,6,6,6,6,6,30],"{":[14,24,24,48,24,24,14],"}":[56,12,12,6,12,12,56],"/":[3,6,12,24,48,96,0],"\\":[96,48,24,12,6,3,0],"|":[8,8,8,8,8,8,8],"+":[0,8,8,62,8,8,0],"=":[0,0,62,0,62,0,0],"*":[0,42,28,127,28,42,0],"#":[36,36,127,36,127,36,36],"@":[62,99,111,107,111,96,62],"&":[24,36,24,60,74,68,58],"%":[99,38,4,8,16,50,99],$:[8,62,72,62,9,62,8],"^":[8,20,34,0,0,0,0],"~":[0,0,50,76,0,0,0],"<":[6,12,24,48,24,12,6],">":[48,24,12,6,12,24,48]},qt=[127,65,65,65,65,65,127];function Dt(t){return Ot[t]??Ot[t.toUpperCase()]??qt}function Bt(t,e={}){if(!t)return"";const{char:n="█",scale:o=1}=e,r=[...n][0]??"█",a=Math.max(1,Math.floor(o)),i=7*a,s=a,c=Array.from({length:i},()=>"");for(let e=0;e<t.length;e++){const n=Dt(t[e]);for(let t=0;t<7;t++){const e=n[t];let o="";for(let t=6;t>=0;t--)o+=(e>>t&1?r:" ").repeat(a);for(let e=0;e<a;e++)c[t*a+e]+=o}if(e<t.length-1)for(let t=0;t<i;t++)c[t]+=" ".repeat(s)}return c.join("\n")}function Ut(t,e,n={}){const{color:o="#d4ff00",bgColor:r,fontSize:a=10}=n,i=Bt(e,n);if(!i)return;const s=i.split("\n"),c=Math.max(...s.map(t=>[...t].length));t.width=Math.ceil(c*a*.6),t.height=Math.ceil(s.length*a);const l=t.getContext("2d");r&&"transparent"!==r?(l.fillStyle=r,l.fillRect(0,0,t.width,t.height)):l.clearRect(0,0,t.width,t.height),l.fillStyle=o,l.font=`${a}px monospace`,l.textBaseline="top",s.forEach((t,e)=>l.fillText(t,0,e*a))}var Vt=["ascii","blocks","braille","dots","lines","cross","diagonal","diamond","mixed","pixel","mosaic","lego","voxel","disco","dither","hex","led","cmyk","stipple","engraving","crosshatch","woodblock","risograph","pointillism"];export{t as CHARACTER_SETS,n as DEFAULT_OPTIONS,o as HOVER_PRESETS,e as PALETTE_THEMES,Vt as STUDIO_STYLES,It as asciiText,Rt as asciiTextAnsi,Tt as asciify,Ft as asciifyGif,Lt as asciifyLiveVideo,Bt as asciifyText,kt as asciifyVideo,zt as asciifyWebcam,Ht as buildTextFrame,jt as captureSnapshot,V as clearAsciifyCaches,Et as computeCanvasRenderSize,pt as createVideoScrollScrub,et as gifToAsciiFrames,nt as gifToAsciiTextFrames,_ as imageToAsciiFrame,J as imageToAsciiTextFrame,it as renderFrameToCanvas,$t as renderTextBackground,Q as renderTextFrameToCanvas,Ut as renderTextToCanvas,Pt as snapshotAndDownload,Z as videoToAsciiFrames,tt as videoToAsciiTextFrames};//# sourceMappingURL=core.js.map
|