image-to-pixel 3.0.0 → 3.0.1

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.
Files changed (68) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +69 -69
  3. package/dist/editor.css.map +1 -1
  4. package/dist/editor.esm.js +1 -1
  5. package/dist/editor.esm.js.map +1 -1
  6. package/dist/fonts/README.md +6 -6
  7. package/dist/fonts/geist-LICENSE.txt +93 -93
  8. package/dist/image-to-pixel.bundle.esm.js +13 -13
  9. package/dist/image-to-pixel.bundle.esm.js.map +2 -2
  10. package/dist/image-to-pixel.cjs +2 -2
  11. package/dist/image-to-pixel.cjs.map +2 -2
  12. package/dist/image-to-pixel.esm.js +2 -2
  13. package/dist/image-to-pixel.esm.js.map +2 -2
  14. package/dist/image-to-pixel.js +2 -2
  15. package/dist/image-to-pixel.js.map +2 -2
  16. package/dist/image-to-pixel.min.js +11 -11
  17. package/dist/image-to-pixel.min.js.map +2 -2
  18. package/dist/video.esm.js +1 -1
  19. package/dist/video.esm.js.map +1 -1
  20. package/lib/core/color.js +69 -69
  21. package/lib/core/cpu/pipeline.js +21 -21
  22. package/lib/core/cpu/stages.js +227 -227
  23. package/lib/core/dither/bluenoise-data.js +3 -3
  24. package/lib/core/dither/kernels.js +27 -27
  25. package/lib/core/dither/matrices.js +95 -95
  26. package/lib/core/engine.js +158 -158
  27. package/lib/core/export/canvas.js +22 -22
  28. package/lib/core/export/crc32.js +15 -15
  29. package/lib/core/export/gif.js +153 -153
  30. package/lib/core/export/png.js +94 -94
  31. package/lib/core/export/scale.js +103 -103
  32. package/lib/core/export/sheet.js +95 -95
  33. package/lib/core/export/zip.js +55 -55
  34. package/lib/core/gpu/backend.js +159 -159
  35. package/lib/core/gpu/shaders.js +258 -258
  36. package/lib/core/palette/builtin.js +36 -36
  37. package/lib/core/palette/extract.js +69 -69
  38. package/lib/core/palette/lospec.js +24 -24
  39. package/lib/core/palette/parse.js +112 -112
  40. package/lib/core/plan.js +58 -58
  41. package/lib/core/presets.js +42 -42
  42. package/lib/core/settings.js +274 -274
  43. package/lib/core/source.js +89 -89
  44. package/lib/core/video/frames.js +144 -144
  45. package/lib/core/video/mux-mp4.js +131 -131
  46. package/lib/core/video/mux-webm.js +127 -127
  47. package/lib/editor/controls.js +139 -139
  48. package/lib/editor/dom.js +65 -65
  49. package/lib/editor/exporter.js +185 -185
  50. package/lib/editor/icons.js +61 -61
  51. package/lib/editor/index.js +793 -793
  52. package/lib/editor/inspector.js +328 -328
  53. package/lib/editor/library.js +182 -182
  54. package/lib/editor/persist.js +18 -18
  55. package/lib/editor/samples.js +90 -90
  56. package/lib/editor/stage.js +239 -239
  57. package/lib/editor/store.js +80 -80
  58. package/lib/editor/styles/editor.css +385 -385
  59. package/lib/editor/styles/fonts/README.md +6 -6
  60. package/lib/editor/styles/fonts/geist-LICENSE.txt +93 -93
  61. package/lib/editor/styles/tokens.css +89 -89
  62. package/lib/editor/ui.js +97 -97
  63. package/lib/index.js +3 -1
  64. package/lib/video.js +92 -92
  65. package/package.json +92 -92
  66. package/types/editor.d.ts +34 -34
  67. package/types/index.d.ts +196 -196
  68. package/types/video.d.ts +43 -43
@@ -1,4 +1,4 @@
1
- /*! image-to-pixel v3 | MIT | https://github.com/Tezumie/Image-to-Pixel */
1
+ /*! image-to-pixel v3.0.1 | MIT | https://github.com/Tezumie/Image-to-Pixel */
2
2
  var ImageToPixel=(()=>{var go=Object.create;var tt=Object.defineProperty;var yo=Object.getOwnPropertyDescriptor;var Eo=Object.getOwnPropertyNames;var vo=Object.getPrototypeOf,_o=Object.prototype.hasOwnProperty;var To=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Xt=(e,t)=>()=>(e&&(t=e(e=0)),t);var On=(e,t)=>{for(var n in t)tt(e,n,{get:t[n],enumerable:!0})},Dn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Eo(t))!_o.call(e,o)&&o!==n&&tt(e,o,{get:()=>t[o],enumerable:!(r=yo(t,o))||r.enumerable});return e};var So=(e,t,n)=>(n=e!=null?go(vo(e)):{},Dn(t||!e||!e.__esModule?tt(n,"default",{value:e,enumerable:!0}):n,e)),Ao=e=>Dn(tt({},"__esModule",{value:!0}),e);function oe(e){if(Array.isArray(e))return[e[0]|0,e[1]|0,e[2]|0];let t=String(e).trim().replace(/^#|^0x/i,"");if((t.length===3||t.length===4)&&(t=t.slice(0,3).split("").map(n=>n+n).join("")),!/^[0-9a-f]{6}([0-9a-f]{2})?$/i.test(t))throw new Error(`Invalid colour "${e}"`);return[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16)]}function nt(e){try{return oe(e),!0}catch{return!1}}function we(e){return"#"+e.slice(0,3).map(t=>Math.max(0,Math.min(255,Math.round(t))).toString(16).padStart(2,"0")).join("")}function Ge(e,t,n){e=Gt(e),t=Gt(t),n=Gt(n);let r=Math.cbrt(.4122214708*e+.5363325363*t+.0514459929*n),o=Math.cbrt(.2119034982*e+.6806995451*t+.1073969566*n),i=Math.cbrt(.0883024619*e+.2817188376*t+.6299787005*n);return[.2104542553*r+.793617785*o-.0040720468*i,1.9779984951*r-2.428592205*o+.4505937099*i,.0259040371*r+.7827717662*o-.808675766*i]}function Nn(e){if(e.length<2)return 1;let t=0;for(let n=0;n<e.length;n++){let r=1/0;for(let o=0;o<e.length;o++){if(n===o)continue;let i=e[n][0]-e[o][0],a=e[n][1]-e[o][1],s=e[n][2]-e[o][2],c=Math.sqrt(i*i+a*a+s*s);c<r&&(r=c)}t+=r}return Math.max(.04,Math.min(1,t/e.length/255))}var Q,Gt,rt,le=Xt(()=>{Q=e=>we(oe(e)),Gt=e=>e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4);rt=[.2126,.7152,.0722]});function aa(e){let t=e.split(/\r?\n/);if(!/^GIMP Palette/i.test(t[0]||""))throw new Error('Not a GIMP palette (missing "GIMP Palette" header)');let n="",r=[];for(let o of t.slice(1)){let i=o.trim();if(!i||i.startsWith("#"))continue;let a=/^Name:\s*(.*)$/i.exec(i);if(a){n=a[1].trim();continue}if(/^Columns:/i.test(i))continue;let s=/^(\d{1,3})\s+(\d{1,3})\s+(\d{1,3})/.exec(i);s&&r.push(Q([+s[1],+s[2],+s[3]]))}return{name:n,colors:r}}function Wr(e){let t=[];for(let n of e.split(/\r?\n/)){let r=n.trim();if(!r||r.startsWith(";")||r.startsWith("//"))continue;let o=/^#?([0-9a-f]{6}|[0-9a-f]{8}|[0-9a-f]{3})\b/i.exec(r);if(!o)continue;let i=o[1].length===8?o[1].slice(2):o[1];t.push(Q(i))}return{name:"",colors:t}}function sa(e){let t=e.split(/\r?\n/).map(o=>o.trim());if(t[0]!=="JASC-PAL")throw new Error("Not a JASC palette");let n=parseInt(t[2],10)||0,r=[];for(let o=3;o<3+n&&o<t.length;o++){let i=/^(\d+)\s+(\d+)\s+(\d+)/.exec(t[o]);i&&r.push(Q([+i[1],+i[2],+i[3]]))}return{name:"",colors:r}}function an(e){let t=typeof e=="string"?JSON.parse(e):e,r=(Array.isArray(t)?t:t.colors||t.palette||[]).map(o=>typeof o=="object"&&o?o.hex||o.color:o).filter(Boolean).map(Q);return{name:!Array.isArray(t)&&t.name||"",colors:r}}function ca(e){let t=[],n=/#?\b([0-9a-f]{6})\b/gi,r;for(;r=n.exec(e);)t.push(Q(r[1]));return{name:"",colors:t}}function Vr(e,t=""){let n=(/\.([a-z0-9]+)$/i.exec(t)||[])[1]?.toLowerCase()||"",o=String(e).replace(/^/,"").trim(),i;if(n==="gpl"||/^GIMP Palette/i.test(o)?i=aa(o):n==="pal"||o.startsWith("JASC-PAL")?i=sa(o):n==="json"||o.startsWith("{")||o.startsWith("[")?i=an(o):n==="hex"||n==="txt"?i=Wr(o):(i=Wr(o),i.colors.length||(i=ca(o))),i.colors=ia(i.colors).slice(0,256),!i.name&&t&&(i.name=t.replace(/\.[^.]+$/,"").replace(/[-_]+/g," ")),!i.colors.length)throw new Error("No colours found in that palette");return i}function Yr(e,t){let n=t.map(r=>{let o=Q(r),i=parseInt(o.slice(1,3),16),a=parseInt(o.slice(3,5),16),s=parseInt(o.slice(5,7),16);return`${String(i).padStart(3)} ${String(a).padStart(3)} ${String(s).padStart(3)} ${o.slice(1)}`});return`GIMP Palette
3
3
  Name: ${e||"Palette"}
4
4
  Columns: 8
@@ -7,7 +7,7 @@ ${n.join(`
7
7
  `)}
8
8
  `}var ia,$r,Kr,sn=Xt(()=>{le();ia=e=>[...new Set(e)];$r=e=>e.map(t=>Q(t).slice(1)).join(`
9
9
  `)+`
10
- `,Kr=(e,t)=>JSON.stringify({name:e||"Palette",colors:t.map(n=>Q(n).slice(1))},null,2)});var qr={};On(qr,{fetchLospec:()=>cn,lospecSlug:()=>St});function St(e){let t=String(e||"").trim(),n=/palette-list\/([a-z0-9-]+)/i.exec(t);return(n?n[1]:t).toLowerCase().replace(/\.(json|hex|gpl)$/,"")}async function cn(e,{fetch:t=globalThis.fetch}={}){let n=St(e);if(!/^[a-z0-9-]+$/.test(n))throw new Error("That does not look like a Lospec palette slug");let r=await t(`https://lospec.com/palette-list/${n}.json`);if(!r.ok)throw new Error(`Lospec returned ${r.status} for "${n}"`);let o=await r.json(),i=an(o);return{name:o.name||n,author:o.author||"",colors:i.colors,slug:n}}var fn=Xt(()=>{sn()});var xa={};On(xa,{ASPECTS:()=>He,DEFAULTS:()=>zt,DITHER_METHODS:()=>ot,KERNELS:()=>lt,LEGACY_DITHER:()=>at,MAX_SIZE:()=>Ue,PALETTES:()=>jt,PRESETS:()=>ln,SETTINGS_VERSION:()=>Pe,VERSION:()=>wa,bayer:()=>he,buildTileset:()=>ro,compactSettings:()=>ft,createPixelator:()=>Mt,createZip:()=>no,cropRect:()=>st,decodeSettings:()=>jn,defaultSettings:()=>Ht,detectGrid:()=>zr,ditherKind:()=>it,downloadBlob:()=>Hr,encodeGIF:()=>eo,encodePNG:()=>$e,encodeSettings:()=>Xn,estimateFps:()=>ao,extractPalette:()=>Le,fetchLospec:()=>cn,forEachFrame:()=>so,frameTimes:()=>bn,getPalette:()=>je,getPreset:()=>Zr,hasTransparency:()=>Gr,loadImage:()=>on,lospecSlug:()=>St,makePlan:()=>pt,makeResult:()=>un,mediaError:()=>Rt,mergeSettings:()=>Hn,normalizeSettings:()=>ie,oklab:()=>Ge,packSpriteSheet:()=>pn,parseColor:()=>oe,parseMatrix:()=>$n,parsePalette:()=>Vr,pixelate:()=>Jr,resizeNearest:()=>yt,resolveSize:()=>ct,runCPU:()=>bt,seekTo:()=>Ct,settingsFromJSON:()=>zn,settingsToJSON:()=>Gn,sniffVideoCodec:()=>io,thresholdMap:()=>ut,toCanvas:()=>vt,toFrame:()=>Ye,toGPL:()=>Yr,toHex:()=>we,toHexFile:()=>$r,toPaletteJSON:()=>Kr,uniqueColors:()=>Et,upscale:()=>pe,videoReady:()=>kt});var jt=[{id:"1-bit-monitor",name:"1-Bit Monitor",author:"",colors:["222323","f0f6f0"]},{id:"apollo",name:"Apollo",author:"AdamCYounis",colors:["172038","253a5e","3c5e8b","4f8fba","73bed3","a4dddb","19332d","25562e","468232","75a743","a8ca58","d0da91","4d2b32","7a4841","ad7757","c09473","d7b594","e7d5b3","341c27","602c2c","884b2b","be772b","de9e41","e8c170","241527","411d31","752438","a53030","cf573c","da863e","1e1d39","402751","7a367b","a23e8c","c65197","df84a5","090a14","10141f","151d28","202e37","394a50","577277","819796","a8b5b2","c7cfcc","ebede9"]},{id:"batpalette",name:"Batpalette",author:"el Rojaz",colors:["000000","7f7f7f","ffffff","681e99","3f48cc","88ff82","bfa621","cc3d18"]},{id:"beached-boogaloo",name:"Beached Boogaloo",author:".tomais",colors:["ff0b20","8f0434","500037","a0ff00","57e71e","0ea717","057833","2cdeef","2483e7","153ab7","0d0a87","ff0b88","a60fff","6409cf","eaef30","ff880b","b75308","802202","000000","231940","514378","ffffff","73a3a7","366770","f7b771","c77650","974c38","873939","601e2c","300c1f"]},{id:"cc-29",name:"CC-29",author:"Alpha6",colors:["f2f0e5","b8b5b9","868188","646365","45444f","3a3858","212123","352b42","43436a","4b80ca","68c2d3","a2dcc7","ede19e","d3a068","b45252","6a536e","4b4158","80493a","a77b5b","e5ceb4","c2d368","8ab060","567b79","4e584a","7b7243","b2b47e","edc8c4","cf8acb","5f556a"]},{id:"cga-16",name:"CGA 16",author:"",colors:["000000","0000aa","00aa00","00aaaa","aa0000","aa00aa","aa5500","aaaaaa","555555","5555ff","55ff55","55ffff","ff5555","ff55ff","ffff55","ffffff"]},{id:"chaotic-neutral",name:"Chaotic neutral",author:"Dodecahedron \u2DFD",colors:["e1d4cb","c19f90","a56457","6d504d","484044","392b29","31312f","d8eef0","97999f","81a4c0","6a7f92","415973","43425a","45334b","4b1f40","671087","955ab9"]},{id:"endesga-32",name:"Endesga 32",author:"ENDESGA",colors:["be4a2f","d77643","ead4aa","e4a672","b86f50","733e39","3e2731","a22633","e43b44","f77622","feae34","fee761","63c74d","3e8948","265c42","193c3e","124e89","0099db","2ce8f5","ffffff","c0cbdc","8b9bb4","5a6988","3a4466","262b44","181425","ff0044","68386c","b55088","f6757a","e8b796","c28569"]},{id:"fantasy-24",name:"Fantasy 24",author:"",colors:["1f240a","39571c","a58c27","efac28","efd8a1","ab5c1c","183f39","ef692f","efb775","a56243","773421","724113","2a1d0d","392a1c","684c3c","927e6a","276468","ef3a0c","45230d","3c9f9c","9b1a0a","36170c","550f0a","300f0a"]},{id:"game-boy-dmg",name:"Game Boy (DMG)",author:"",colors:["0f380f","306230","8bac0f","9bbc0f"]},{id:"grayscale-4",name:"Grayscale 4",author:"",colors:["000000","555555","aaaaaa","ffffff"]},{id:"hidden-library",name:"Hidden Library",author:"Pixel Hoo",colors:["100b2a","2a213a","314743","65856d","adca9a","ecfeca","582d27","974133","d67654","5d3441","a3685b","ffb379","ffe6a9","ffffff"]},{id:"intacto14",name:"Intacto14",author:"Anubi",colors:["221529","4b5561","879ba3","cbf5ef","62b4de","5660d6","5b29a6","d64562","f2735c","edbb8e","ab6375","522152","37ada2","8cde8c"]},{id:"journey",name:"Journey",author:"\u{1F34D}PineappleOnPizza\u{1F34D}",colors:["050914","110524","3b063a","691749","9c3247","d46453","f5a15d","ffcf8e","ff7a7d","ff417d","d61a88","94007a","42004e","220029","100726","25082c","3d1132","73263d","bd4035","ed7b39","ffb84a","fff540","c6d831","77b02a","429058","2c645e","153c4a","052137","0e0421","0c0b42","032769","144491","488bd4","78d7ff","b0fff1","faffff","c7d4e1","928fb8","5b537d","392946","24142c","0e0f2c","132243","1a466b","10908e","28c074","3dff6e","f8ffb8","f0c297","cf968c","8f5765","52294b","0f022e","35003b","64004c","9b0e3e","d41e3c","ed4c40","ff9757","d4662f","9c341a","691b22","450c28","2d002e"]},{id:"lospec500",name:"Lospec500",author:"",colors:["10121c","2c1e31","6b2643","ac2847","ec273f","94493a","de5d3a","e98537","f3a833","4d3533","6e4c30","a26d3f","ce9248","dab163","e8d282","f7f3b7","1e4044","006554","26854c","5ab552","9de64e","008b8b","62a477","a6cb96","d3eed3","3e3b65","3859b3","3388de","36c5f4","6dead6","5e5b8c","8c78a5","b0a7b8","deceed","9a4d76","c878af","cc99ff","fa6e79","ffa2ac","ffd1d5","f6e8e0","ffffff"]},{id:"nyx8",name:"Nyx8",author:"Javier Guerrero",colors:["08141e","0f2a3f","20394f","4e495f","816271","997577","c3a38a","f6d6bd"]},{id:"oil-6",name:"Oil 6",author:"",colors:["fbf5ef","f2d3ab","c69fa5","8b6d9c","494d7e","272744"]},{id:"pico-8",name:"PICO-8",author:"",colors:["000000","1d2b53","7e2553","008751","ab5236","5f574f","c2c3c7","fff1e8","ff004d","ffa300","ffec27","00e436","29adff","83769c","ff77a8","ffccaa"]},{id:"resurrect-64",name:"Resurrect 64",author:"Kerrie Lake",colors:["2e222f","3e3546","625565","966c6c","ab947a","694f62","7f708a","9babb2","c7dcd0","ffffff","6e2727","b33831","ea4f36","f57d4a","ae2334","e83b3b","fb6b1d","f79617","f9c22b","7a3045","9e4539","cd683d","e6904e","fbb954","4c3e24","676633","a2a947","d5e04b","fbff86","165a4c","239063","1ebc73","91db69","cddf6c","313638","374e4a","547e64","92a984","b2ba90","0b5e65","0b8a8f","0eaf9b","30e1b9","8ff8e2","323353","484a77","4d65b4","4d9be6","8fd3ff","45293f","6b3e75","905ea9","a884f3","eaaded","753c54","a24b6f","cf657f","ed8099","831c5d","c32454","f04f78","f68181","fca790","fdcbb0"]},{id:"slso8",name:"SLSO8",author:"Luis Miguel Maldonado",colors:["0d2b45","203c56","544e68","8d697a","d08159","ffaa5e","ffd4a3","ffecd6"]},{id:"sweet-canyon-extended-64",name:"Sweet Canyon Extended 64",author:"Mr Slime",colors:["0f0e11","2d2c33","40404a","51545c","6b7179","7c8389","a8b2b6","d5d5d5","eeebe0","f1dbb1","eec99f","e1a17e","cc9562","ab7b49","9a643a","86482f","783a29","6a3328","541d29","42192c","512240","782349","8b2e5d","a93e89","d062c8","ec94ea","f2bdfc","eaebff","a2fafa","64e7e7","54cfd8","2fb6c3","2c89af","25739d","2a5684","214574","1f2966","101445","3c0d3b","66164c","901f3d","bb3030","dc473c","ec6a45","fb9b41","f0c04c","f4d66e","fffb76","ccf17a","97d948","6fba3b","229443","1d7e45","116548","0c4f3f","0a3639","251746","48246d","69189c","9f20c0","e527d2","ff51cf","ff7ada","ff9edb"]},{id:"sweetie-16",name:"Sweetie 16",author:"",colors:["1a1c2c","5d275d","b13e53","ef7d57","ffcd75","a7f070","38b764","257179","29366f","3b5dc9","41a6f6","73eff7","f4f4f4","94b0c2","566c86","333c57"]},{id:"toxic-haze",name:"Toxic Haze",author:"sillyTheJester",colors:["e5ff00","b8d14a","9ab06e","708763","4c5c52","393e40","242424"]},{id:"vinik24",name:"Vinik24",author:"Vinik",colors:["000000","6f6776","9a9a97","c5ccb8","8b5580","c38890","a593a5","666092","9a4f50","c28d75","7ca1c0","416aa3","8d6268","be955c","68aca9","387080","6e6962","93a167","6eaa78","557064","9d9f7f","7e9e99","5d6872","433455"]}];function je(e){let t=String(e||"").toLowerCase();return jt.find(n=>n.id===t||n.name.toLowerCase()===t)||null}le();var Pe=1,Ue=2048,ot=[{id:"none",label:"None",kind:"none"},{id:"bayer2",label:"Bayer 2\xD72",kind:"ordered"},{id:"bayer4",label:"Bayer 4\xD74",kind:"ordered"},{id:"bayer8",label:"Bayer 8\xD78",kind:"ordered"},{id:"bayer16",label:"Bayer 16\xD716",kind:"ordered"},{id:"cluster4",label:"Clustered dot 4\xD74",kind:"ordered"},{id:"cluster8",label:"Clustered dot 8\xD78",kind:"ordered"},{id:"lines",label:"Horizontal lines",kind:"ordered"},{id:"bluenoise",label:"Blue noise",kind:"ordered"},{id:"custom",label:"Custom matrix",kind:"ordered"},{id:"floyd-steinberg",label:"Floyd\u2013Steinberg",kind:"diffusion"},{id:"atkinson",label:"Atkinson",kind:"diffusion"},{id:"sierra-lite",label:"Sierra Lite",kind:"diffusion"},{id:"sierra",label:"Sierra",kind:"diffusion"},{id:"burkes",label:"Burkes",kind:"diffusion"},{id:"jarvis",label:"Jarvis\u2013Judice\u2013Ninke",kind:"diffusion"},{id:"stucki",label:"Stucki",kind:"diffusion"}],it=e=>(ot.find(t=>t.id===e)||{kind:"none"}).kind,at={none:"none","floyd-steinberg":"floyd-steinberg",atkinson:"atkinson",ordered:"bayer8","2x2 bayer":"bayer2","4x4 bayer":"bayer4","clustered 4x4":"cluster4"},zt=Object.freeze({version:Pe,size:{mode:"width",width:96,height:0,block:8,resample:"box"},adjust:{brightness:0,contrast:0,saturation:0,hue:0,gamma:1},frame:{aspect:"original",zoom:1,x:.5,y:.5},palette:{source:"builtin",id:"endesga-32",name:"Endesga 32",colors:[],count:16,distance:"oklab"},dither:{method:"bayer4",strength:.6,matrix:null},alpha:{threshold:.5},cleanup:{orphans:!1,smooth:!1},outline:{mode:"none",color:"#000000",corners:!1},export:{size:"scale",scale:4,indexed:!0,grid:!1,gridColor:"#000000"}}),K=(e,t,n,r)=>{let o=Number(e);return Number.isFinite(o)?Math.min(n,Math.max(t,o)):r},xe=(e,t,n)=>t.includes(e)?e:n,ze=(e,t)=>typeof e=="boolean"?e:t;function Ht(){return ie({})}function ie(e={}){let t=zt,n=e||{},r={},o=n.size||{},i=n.adjust||{},a=n.palette||{},s=n.dither||{},c=n.alpha||{},l=n.cleanup||{},u=n.outline||{},d=n.export||{};r.version=Pe,r.size={mode:xe(o.mode,["width","block"],t.size.mode),width:Math.round(K(o.width,1,Ue,t.size.width)),height:Math.round(K(o.height,0,Ue,t.size.height)),block:K(o.block,1,256,t.size.block),resample:xe(o.resample,["box","nearest"],t.size.resample)},r.adjust={brightness:K(i.brightness,-1,1,0),contrast:K(i.contrast,-1,1,0),saturation:K(i.saturation,-1,1,0),hue:K(i.hue,-180,180,0),gamma:K(i.gamma,.2,5,1)};let f=n.frame||{};r.frame={aspect:xe(f.aspect,He.map(g=>g.id),"original"),zoom:K(f.zoom,1,8,1),x:K(f.x,0,1,.5),y:K(f.y,0,1,.5)};let m=xe(a.source,["builtin","custom","extract","none"],t.palette.source);if(r.palette={source:m,id:typeof a.id=="string"?a.id:m==="builtin"?t.palette.id:"",name:typeof a.name=="string"?a.name:"",colors:[],count:Math.round(K(a.count,2,256,t.palette.count)),distance:xe(a.distance,["oklab","rgb"],t.palette.distance)},m==="builtin"){let g=je(r.palette.id)||je(t.palette.id);r.palette.id=g.id,r.palette.name=g.name,r.palette.colors=g.colors.map(x=>"#"+x)}else m==="custom"?(r.palette.colors=(Array.isArray(a.colors)?a.colors:[]).filter(nt).map(Q).slice(0,256),r.palette.colors.length||(r.palette.colors=["#000000","#ffffff"]),r.palette.name=r.palette.name||"Custom"):m==="extract"?r.palette.name=`Extracted (${r.palette.count})`:r.palette.name="None";let b=ot.some(g=>g.id===s.method)?s.method:t.dither.method;return r.dither={method:b,strength:K(s.strength,0,1,t.dither.strength),matrix:Mo(s.matrix)},r.alpha={threshold:K(c.threshold,0,1,t.alpha.threshold)},r.cleanup={orphans:ze(l.orphans,!1),smooth:ze(l.smooth,!1)},r.outline={mode:xe(u.mode,["none","outer","inner"],"none"),color:nt(u.color)?Q(u.color):t.outline.color,corners:ze(u.corners,!1)},r.export={size:xe(d.size,["scale","source"],"scale"),scale:Math.round(K(d.scale,1,64,t.export.scale)),indexed:ze(d.indexed,t.export.indexed),grid:ze(d.grid,!1),gridColor:nt(d.gridColor)?Q(d.gridColor):t.export.gridColor},r}function Mo(e){if(!Array.isArray(e)||!e.length||!Array.isArray(e[0]))return null;let t=Math.min(16,e.length),n=Math.min(16,e[0].length),r=[];for(let o=0;o<t;o++){let i=[];for(let a=0;a<n;a++){let s=Number((e[o]||[])[a]);i.push(Number.isFinite(s)?s:0)}r.push(i)}return r}var He=[{id:"original",label:"Original",ratio:null},{id:"1:1",label:"1:1",ratio:1},{id:"4:3",label:"4:3",ratio:4/3},{id:"3:4",label:"3:4",ratio:3/4},{id:"3:2",label:"3:2",ratio:3/2},{id:"2:3",label:"2:3",ratio:2/3},{id:"16:9",label:"16:9",ratio:16/9},{id:"9:16",label:"9:16",ratio:9/16}];function st(e,t,n={}){let r=(He.find(l=>l.id===n.aspect)||He[0]).ratio||e/t,o=e,i=e/r;i>t&&(i=t,o=t*r);let a=Math.max(1,n.zoom||1);o=Math.max(1,Math.min(e,Math.round(o/a))),i=Math.max(1,Math.min(t,Math.round(i/a)));let s=n.x??.5,c=n.y??.5;return{x:Math.round((e-o)*s),y:Math.round((t-i)*c),w:o,h:i}}function ct(e,t,n){let r,o;return n.mode==="block"?(r=Math.max(1,Math.round(e/n.block)),o=Math.max(1,Math.round(t/n.block))):(r=n.width,o=n.height||Math.max(1,Math.round(r*t/e))),{width:Math.min(Ue,r),height:Math.min(Ue,o)}}function Ro(e,t){let n={};for(let r of Object.keys(e)){if(r==="version")continue;let o=e[r],i=t[r];if(o&&typeof o=="object"&&!Array.isArray(o)){let a={};for(let s of Object.keys(o))JSON.stringify(o[s])!==JSON.stringify(i&&i[s])&&(a[s]=o[s]);Object.keys(a).length&&(n[r]=a)}else JSON.stringify(o)!==JSON.stringify(i)&&(n[r]=o)}return n}var Bn={enc(e){let t=new TextEncoder().encode(e),n="";for(let r of t)n+=String.fromCharCode(r);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")},dec(e){let t=atob(e.replace(/-/g,"+").replace(/_/g,"/"));return new TextDecoder().decode(Uint8Array.from(t,n=>n.charCodeAt(0)))}};function ft(e){let t=ie(e),n=Ro(t,Ht());return n.palette&&(t.palette.source!=="custom"&&(delete n.palette.colors,delete n.palette.name),t.palette.source!=="builtin"&&delete n.palette.id,t.palette.source!=="extract"&&delete n.palette.count),n.palette&&!Object.keys(n.palette).length&&delete n.palette,n}function Xn(e){return Bn.enc(JSON.stringify({v:Pe,...ft(e)}))}function jn(e){let t=String(e),n=/[#&?]s=([A-Za-z0-9_-]+)/.exec(t);n&&(t=n[1]);let r=JSON.parse(Bn.dec(t));return delete r.v,ie(r)}function Gn(e){return JSON.stringify({$schema:"image-to-pixel/settings",version:Pe,...ft(e)},null,2)}function zn(e){let t=typeof e=="string"?JSON.parse(e):e;return delete t.$schema,ie(t)}function Hn(e,t){let n=JSON.parse(JSON.stringify(e));for(let r of Object.keys(t||{}))t[r]&&typeof t[r]=="object"&&!Array.isArray(t[r])&&n[r]&&typeof n[r]=="object"?Object.assign(n[r],t[r]):n[r]=t[r];return ie(n)}le();var Wn="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";function ko(e){return typeof atob=="function"?Uint8Array.from(atob(e),t=>t.charCodeAt(0)):new Uint8Array(Buffer.from(e,"base64"))}function he(e){let t=[[0]];for(let n=1;n<e;n*=2){let r=[];for(let o=0;o<n*2;o++)r.push(new Array(n*2));for(let o=0;o<n;o++)for(let i=0;i<n;i++){let a=4*t[o][i];r[o][i]=a,r[o][i+n]=a+2,r[o+n][i]=a+3,r[o+n][i+n]=a+1}t=r}return t}function Yn(e){let t=e.length,n=e[0].length,r=[];for(let i=0;i<t;i++)for(let a=0;a<n;a++)r.push({i:i*n+a,v:e[i][a]});r.sort((i,a)=>i.v-a.v||i.i-a.i);let o=new Uint8Array(n*t);return r.forEach((i,a)=>{o[i.i]=a}),o}function Co(e){let t=[];for(let n=0;n<e;n++){let r=[];for(let o=0;o<e;o++){let i=(o+.5)/e*2*Math.PI,a=(n+.5)/e*2*Math.PI;r.push(-(Math.cos(i)+Math.cos(a))+(o*e+n)*1e-9)}t.push(r)}return t}var Uo=[[7,13,11,4],[12,16,14,8],[10,15,6,2],[5,9,3,1]],Wt=new Map;function ut(e,t=null){if(e==="custom"){let o=t&&t.length?t:he(4);return{w:o[0].length,h:o.length,levels:o.length*o[0].length,values:Yn(o)}}if(Wt.has(e))return Wt.get(e);let n,r=o=>({w:o[0].length,h:o.length,levels:o.length*o[0].length,values:Yn(o)});switch(e){case"bayer2":n=r(he(2));break;case"bayer4":n=r(he(4));break;case"bayer8":n=r(he(8));break;case"bayer16":n=r(he(16));break;case"cluster4":n=r(Uo);break;case"cluster8":n=r(Co(8));break;case"lines":n=r([[0],[2],[1],[3]]);break;case"bluenoise":n={w:64,h:64,levels:256,values:ko(Wn)};break;default:n=r(he(4))}return Wt.set(e,n),n}function $n(e){let t=String(e).split(/\r?\n|;/).map(r=>r.trim()).filter(r=>r&&!/^\//.test(r)).map(r=>r.replace(/[[\]]/g,"").split(/[\s,]+/).filter(Boolean).map(Number));if(!t.length)throw new Error("Matrix is empty");let n=t[0].length;if(t.some(r=>r.length!==n||r.some(o=>!Number.isFinite(o))))throw new Error("Every row needs the same number of values");if(n>16||t.length>16)throw new Error("Matrices are limited to 16\xD716");return t}var ge=(e,t)=>t.map(([n,r,o])=>[n,r,o/e]),lt={"floyd-steinberg":ge(16,[[1,0,7],[-1,1,3],[0,1,5],[1,1,1]]),atkinson:ge(8,[[1,0,1],[2,0,1],[-1,1,1],[0,1,1],[1,1,1],[0,2,1]]),"sierra-lite":ge(4,[[1,0,2],[-1,1,1],[0,1,1]]),sierra:ge(32,[[1,0,5],[2,0,3],[-2,1,2],[-1,1,4],[0,1,5],[1,1,4],[2,1,2],[-1,2,2],[0,2,3],[1,2,2]]),burkes:ge(32,[[1,0,8],[2,0,4],[-2,1,2],[-1,1,4],[0,1,8],[1,1,4],[2,1,2]]),jarvis:ge(48,[[1,0,7],[2,0,5],[-2,1,3],[-1,1,5],[0,1,7],[1,1,5],[2,1,3],[-2,2,1],[-1,2,3],[0,2,5],[1,2,3],[2,2,1]]),stucki:ge(42,[[1,0,8],[2,0,4],[-2,1,2],[-1,1,4],[0,1,8],[1,1,4],[2,1,2],[-2,2,1],[-1,2,2],[0,2,4],[1,2,2],[2,2,1]])},Vt=12;function Kn(e){let t=1;for(let[n,r]of e)r>0&&(t=Math.max(t,Math.floor(-n/r)+1));return t}var qn=(e,t,n)=>e-1+n*(t-1)+1;le();function Le(e,t=16,n={}){let{maxSamples:r=4e4,alphaThreshold:o=.5}=n,i=e.width*e.height,a=Math.max(1,Math.floor(i/r)),s=[];for(let f=0;f<i;f+=a){let m=f*4;e.data[m+3]<o*255||s.push([e.data[m],e.data[m+1],e.data[m+2]])}if(!s.length)return["#000000","#ffffff"].slice(0,Math.max(1,t));let c=[s];for(;c.length<t;){let f=-1,m=-1,b=0;if(c.forEach((y,h)=>{if(!(y.length<2))for(let E=0;E<3;E++){let p=255,_=0;for(let R of y)R[E]<p&&(p=R[E]),R[E]>_&&(_=R[E]);let T=(_-p)*Math.sqrt(y.length);T>m&&(m=T,f=h,b=E)}}),f<0||m<=0)break;let g=c[f].slice().sort((y,h)=>y[b]-h[b]),x=g.length>>1;c.splice(f,1,g.slice(0,x),g.slice(x))}let l=c.map(f=>Po(f));for(let f=0;f<6;f++){let m=l.map(()=>[0,0,0,0]);for(let b of s){let g=0,x=1/0;for(let h=0;h<l.length;h++){let E=b[0]-l[h][0],p=b[1]-l[h][1],_=b[2]-l[h][2],T=E*E+p*p+_*_;T<x&&(x=T,g=h)}let y=m[g];y[0]+=b[0],y[1]+=b[1],y[2]+=b[2],y[3]++}l=l.map((b,g)=>m[g][3]?[m[g][0]/m[g][3],m[g][1]/m[g][3],m[g][2]/m[g][3]]:b)}let u=[...new Set(l.map(f=>we(f)))],d=f=>{let m=parseInt(f.slice(1),16);return .2126*(m>>16)+.7152*(m>>8&255)+.0722*(m&255)};return u.sort((f,m)=>d(f)-d(m))}function Po(e){let t=0,n=0,r=0;for(let o of e)t+=o[0],n+=o[1],r+=o[2];return[t/e.length,n/e.length,r/e.length]}le();function mt(e,t,n,r="box",o=null){let i=o?o.x:0,a=o?o.y:0,s=o?o.w:e.width,c=o?o.h:e.height,l=e.data,u=e.width,d=new Float32Array(t*n*4),f=r==="nearest"?1:Math.min(16,Math.max(1,Math.ceil(s/t))),m=r==="nearest"?1:Math.min(16,Math.max(1,Math.ceil(c/n))),b=new Int32Array(t*f),g=new Int32Array(n*m);for(let x=0;x<t;x++)for(let y=0;y<f;y++)b[x*f+y]=i+Math.min(s-1,Math.floor((2*(x*f+y)+1)*s/(2*t*f)));for(let x=0;x<n;x++)for(let y=0;y<m;y++)g[x*m+y]=a+Math.min(c-1,Math.floor((2*(x*m+y)+1)*c/(2*n*m)));for(let x=0;x<n;x++)for(let y=0;y<t;y++){let h=0,E=0,p=0,_=0;for(let R=0;R<m;R++){let S=g[x*m+R]*u;for(let O=0;O<f;O++){let L=(S+b[y*f+O])*4,X=l[L+3]/255;h+=l[L]/255*X,E+=l[L+1]/255*X,p+=l[L+2]/255*X,_+=X}}let T=(x*t+y)*4;_>0&&(d[T]=h/_,d[T+1]=E/_,d[T+2]=p/_),d[T+3]=_/(f*m)}return d}function ht(e,{brightness:t=0,contrast:n=0,saturation:r=0,hue:o=0,gamma:i=1}){if(!t&&!n&&!r&&!o&&i===1)return e;let a=n>=0?1/(1-.99*n):1+n,s=1/i,c=Math.cos(o*Math.PI/180),l=Math.sin(o*Math.PI/180),u=[.213+.787*c-.213*l,.715-.715*c-.715*l,.072-.072*c+.928*l,.213-.213*c+.143*l,.715+.285*c+.14*l,.072-.072*c-.283*l,.213-.213*c-.787*l,.715-.715*c+.715*l,.072+.928*c+.072*l];for(let d=0;d<e.length;d+=4){let f=e[d]+t,m=e[d+1]+t,b=e[d+2]+t;f=(f-.5)*a+.5,m=(m-.5)*a+.5,b=(b-.5)*a+.5;let g=f*rt[0]+m*rt[1]+b*rt[2],x=1+r;if(f=g+(f-g)*x,m=g+(m-g)*x,b=g+(b-g)*x,o){let y=u[0]*f+u[1]*m+u[2]*b,h=u[3]*f+u[4]*m+u[5]*b,E=u[6]*f+u[7]*m+u[8]*b;f=y,m=h,b=E}e[d]=Math.pow(de(f),s),e[d+1]=Math.pow(de(m),s),e[d+2]=Math.pow(de(b),s)}return e}function Jn(e,t){for(let n=3;n<e.length;n+=4)e[n]=e[n]>=t&&e[n]>0?1:0;return e}var de=e=>e<0?0:e>1?1:e;function Zn(e,t){let n=e.length,r=new Float64Array(n*3),o=new Float64Array(n*3);return e.forEach((i,a)=>{o.set([i[0]/255,i[1]/255,i[2]/255],a*3),r.set(t===1?[i[0]/255,i[1]/255,i[2]/255]:Ge(i[0]/255,i[1]/255,i[2]/255),a*3)}),{n,coords:r,rgb:o,distance:t}}var Yt=[.299,.587,.114];function Qn(e,t,n,r){let o,i,a,s=1,c=1,l=1;e.distance===1?(o=t,i=n,a=r,s=Yt[0],c=Yt[1],l=Yt[2]):[o,i,a]=Ge(t,n,r);let u=0,d=1/0,f=e.coords;for(let m=0;m<e.n;m++){let b=o-f[m*3],g=i-f[m*3+1],x=a-f[m*3+2],y=s*b*b+c*g*g+l*x*x;y<d&&(d=y,u=m)}return u}function er(e,t,n,r){let o=new Uint8ClampedArray(t*n*4),i=r.quantize?Zn(r.palette,r.distance):null,a=r.kind==="ordered"?r.map:null,s=a?r.spread*r.settings.dither.strength:0;for(let c=0;c<n;c++)for(let l=0;l<t;l++){let u=(c*t+l)*4;if(e[u+3]<.5)continue;let d=e[u],f=e[u+1],m=e[u+2];if(i){if(a){let g=(a.values[c%a.h*a.w+l%a.w]+.5)/a.levels-.5;d=de(d+g*s),f=de(f+g*s),m=de(m+g*s)}let b=Qn(i,d,f,m);o[u]=r.palette[b][0],o[u+1]=r.palette[b][1],o[u+2]=r.palette[b][2]}else o[u]=Math.round(d*255),o[u+1]=Math.round(f*255),o[u+2]=Math.round(m*255);o[u+3]=255}return o}function tr(e,t,n,r){let o=new Uint8ClampedArray(t*n*4),i=Zn(r.palette,r.distance),a=new Float32Array(t*n*3),s=r.settings.dither.strength,c=r.kernel;for(let l=0;l<n;l++)for(let u=0;u<t;u++){let d=l*t+u,f=d*4;if(e[f+3]<.5)continue;let m=de(e[f]+a[d*3]*s),b=de(e[f+1]+a[d*3+1]*s),g=de(e[f+2]+a[d*3+2]*s),x=Qn(i,m,b,g),y=m-i.rgb[x*3],h=b-i.rgb[x*3+1],E=g-i.rgb[x*3+2];for(let[p,_,T]of c){let R=u+p,S=l+_;if(R<0||R>=t||S>=n)continue;let O=(S*t+R)*3;a[O]+=y*T,a[O+1]+=h*T,a[O+2]+=E*T}o[f]=r.palette[x][0],o[f+1]=r.palette[x][1],o[f+2]=r.palette[x][2],o[f+3]=255}return o}var dt=(e,t)=>e[t+3]===0?-1:e[t]<<16|e[t+1]<<8|e[t+2],nr=[[0,-1],[1,0],[0,1],[-1,0]];function rr(e,t,n){let r=e.slice();for(let o=0;o<n;o++)for(let i=0;i<t;i++){let a=(o*t+i)*4,s=dt(r,a),c=[],l=[];for(let[f,m]of nr){let b=i+f,g=o+m;if(b<0||g<0||b>=t||g>=n)continue;let x=(g*t+b)*4;c.push(dt(r,x)),l.push(x)}if(c.length<2||c.includes(s))continue;let u=0,d=0;for(let f=0;f<c.length;f++){let m=0;for(let b=0;b<c.length;b++)c[b]===c[f]&&m++;m>d&&(d=m,u=f)}e.set(r.subarray(l[u],l[u]+4),a)}return e}function or(e,t,n){let r=e.slice();for(let o=0;o<n;o++)for(let i=0;i<t;i++){let a=(o*t+i)*4,s=dt(r,a),c=[],l=[];for(let u=-1;u<=1;u++)for(let d=-1;d<=1;d++){let f=Math.min(t-1,Math.max(0,i+d)),b=(Math.min(n-1,Math.max(0,o+u))*t+f)*4;c.push(dt(r,b)),l.push(b)}for(let u=0;u<9;u++){if(c[u]===s)continue;let d=0;for(let f=0;f<9;f++)c[f]===c[u]&&d++;if(d>=5){e.set(r.subarray(l[u],l[u]+4),a);break}}}return e}function ir(e,t,n,{mode:r,color:o,corners:i}){if(r==="none")return e;let a=e.slice(),s=(u,d)=>u>=0&&d>=0&&u<t&&d<n&&a[(d*t+u)*4+3]>0,c=(u,d)=>u>=0&&d>=0&&u<t&&d<n,l=i?[[0,-1],[1,0],[0,1],[-1,0],[-1,-1],[1,-1],[1,1],[-1,1]]:nr;for(let u=0;u<n;u++)for(let d=0;d<t;d++){let f=s(d,u),m=!1;for(let[b,g]of l){let x=d+b,y=u+g;if(c(x,y)&&(r==="outer"?!f&&s(x,y):f&&!s(x,y))){m=!0;break}}if(m){let b=(u*t+d)*4;e[b]=o[0],e[b+1]=o[1],e[b+2]=o[2],e[b+3]=255}}return e}function pt(e,t){let n=ie(e),r=st(t.width,t.height,n.frame),{width:o,height:i}=ct(r.w,r.h,n.size),a=n.palette.colors;n.palette.source==="extract"&&(a=Lo(t,n,o,i,r));let s=n.palette.source!=="none"&&a.length>0,c=s?a.map(oe):[],l=s?it(n.dither.method):"none";n.dither.strength<=0&&(l="none");let u=l==="ordered"?ut(n.dither.method,n.dither.matrix):null,d=l==="diffusion"?lt[n.dither.method]:null,f=d?Kn(d):1;return{settings:n,srcWidth:t.width,srcHeight:t.height,crop:r,width:o,height:i,quantize:s,kind:l,palette:c,paletteHex:s?a.slice():null,distance:n.palette.distance==="rgb"?1:0,spread:s?Nn(c):0,map:u,kernel:d,skew:f,waves:d?qn(o,i,f):0,outline:{mode:n.outline.mode,color:oe(n.outline.color),corners:n.outline.corners}}}function Lo(e,t,n,r,o){let i=Math.min(1,160/Math.max(n,r)),a=Math.max(1,Math.round(n*i)),s=Math.max(1,Math.round(r*i)),c=mt(e,a,s,"box",o);ht(c,t.adjust);let l=new Uint8ClampedArray(c.length);for(let u=0;u<c.length;u++)l[u]=Math.round(c[u]*255);return Le({data:l,width:a,height:s},t.palette.count,{alphaThreshold:Math.max(.01,t.alpha.threshold)})}function bt(e,t){let{width:n,height:r,settings:o}=e,i=mt(t,n,r,o.size.resample,e.crop);ht(i,o.adjust),Jn(i,o.alpha.threshold);let a=e.kind==="diffusion"?tr(i,n,r,e):er(i,n,r,e);return o.cleanup.orphans&&rr(a,n,r),o.cleanup.smooth&&or(a,n,r),ir(a,n,r,e.outline),a}var Io="2.0.0",We=4,ar="glcanvas",H=class extends Error{constructor(e,t){super(e),this.name="ShaderMateError",t&&Object.assign(this,t)}},sr=new Set;function ye(e,...t){sr.has(e)||(sr.add(e),console.warn("[ShaderMate]",...t))}var Zt=typeof window<"u"&&typeof document<"u",Fo=e=>Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView),cr=e=>e==null?[]:Array.isArray(e)?e:[e],fr=e=>e>0&&(e&e-1)===0;function Oo(e){var t,n,r,o;if(e==null)return null;if(Array.isArray(e))return[(t=e[0])!=null?t:0,(n=e[1])!=null?n:0,(r=e[2])!=null?r:0,(o=e[3])!=null?o:1];if(typeof e=="string"&&Zt){let i=document.createElement("canvas");i.width=i.height=1;let a=i.getContext("2d");a.fillStyle=e,a.fillRect(0,0,1,1);let s=a.getImageData(0,0,1,1).data;return[s[0]/255,s[1]/255,s[2]/255,s[3]/255]}return null}function Do(){if(!Zt)return!1;let e=location.hostname;return location.protocol==="file:"||e==="localhost"||e==="127.0.0.1"||e===""||e.endsWith(".local")}var No=class{constructor(e){this.gl=e,this._items=new Map,this._nextId=1}add(e,t){let n=this._nextId++;return this._items.set(n,{obj:e,count:1,type:t}),n}ref(e){let t=this._items.get(e);return t&&t.count++,e}get(e){let t=this._items.get(e);return t?t.obj:null}unref(e){let t=this._items.get(e);t&&(t.count--,t.count<=0&&this._destroy(e,t))}_destroy(e,t){let{obj:n,type:r}=t,o=this.gl;switch(r){case"texture2D":case"textureCube":o.deleteTexture(n);break;case"fbo":o.deleteFramebuffer(n);break;case"buffer":o.deleteBuffer(n);break;case"program":o.deleteProgram(n);break}this._items.delete(e)}dispose(){for(let[e,t]of[...this._items])this._destroy(e,t)}};function Bo(e){let t=new Map;function n(s,c){return t.has(s)||t.set(s,new Set),t.get(s).add(c),()=>r(s,c)}function r(s,c){let l=t.get(s);l&&l.delete(c)}function o(s,c){let l=u=>{r(s,l),c(u)};return n(s,l)}function i(s,c){let l=t.get(s);if(l)for(let u of[...l])try{u(c)}catch(d){console.error(`[ShaderMate] error in "${s}" listener`,d)}e&&e(s,c)}function a(){t.clear()}return{on:n,off:r,once:o,emit:i,clear:a}}var ur={linear:e=>e,inQuad:e=>e*e,outQuad:e=>e*(2-e),inOutQuad:e=>e<.5?2*e*e:-1+(4-2*e)*e,inCubic:e=>e*e*e,outCubic:e=>1-Math.pow(1-e,3),inOutCubic:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,outExpo:e=>e===1?1:1-Math.pow(2,-10*e),outBack:e=>1+2.70158*Math.pow(e-1,3)+1.70158*Math.pow(e-1,2),outElastic:e=>e===0||e===1?e:Math.pow(2,-10*e)*Math.sin((e*10-.75)*(2*Math.PI)/3)+1};function Xo(){let e=new Map;function t(o,i,a,s,c={}){let{duration:l=500,delay:u=0}=c,d=typeof c.ease=="function"?c.ease:ur[c.ease]||ur.outCubic,f=e.get(o);f&&f.resolve(!1);let m=i(),b=Array.isArray(s)||ArrayBuffer.isView(s),g=b?Array.from(m??s):Number(m??0),x=b?Array.from(s):Number(s);return new Promise(y=>{let h={start:performance.now()+u,resolve:E=>{e.delete(o),y(E)},update(E){let p=l>0?jo((E-this.start)/l):1;if(p<0)return;let _=d(p);a(b?g.map((T,R)=>T+(x[R]-T)*_):g+(x-g)*_),p>=1&&this.resolve(!0)}};e.set(o,h)})}function n(o){for(let i of[...e.values()])i.update(o)}function r(o){if(o===void 0){for(let a of[...e.values()])a.resolve(!1);return}let i=e.get(o);i&&i.resolve(!1)}return{tween:t,update:n,cancel:r,get size(){return e.size}}}var jo=e=>e<0?e:e>1?1:e;function Go(e){let t;if(typeof e=="string")t=[{src:e}];else if(Array.isArray(e))t=e.map(o=>typeof o=="string"?{src:o}:{...o});else if(e&&typeof e=="object")t=[{...e}];else throw new H("ShaderMate: expected a shader (string), a pass object, or an array of passes");if(!t.length)throw new H("ShaderMate: no passes given");t.forEach((o,i)=>{var a,s,c,l,u;if(o.src==null&&(o.src=(l=(c=(s=(a=o.shader)!=null?a:o.frag)!=null?s:o.fragment)!=null?c:o.glsl)!=null?l:o.url),o.src==null)throw new H(`Pass ${(u=o.name)!=null?u:i} has no shader source (use "shader")`);o.name==null&&(o.name=t.length===1?"main":"pass"+i),o.uniforms==null&&(o.uniforms={})}),t.some(o=>o.screen)||(t[t.length-1].screen=!0),t.filter(o=>o.screen).length>1&&console.warn("[ShaderMate] Multiple screen:true passes; last drawn wins.");let n=t.map(o=>o.name),r=n.filter((o,i)=>n.indexOf(o)!==i);if(r.length)throw new H("Duplicate pass names: "+[...new Set(r)].join(", "));for(let o of t){let i=Array.isArray(o.channels)?o.channels:o.channels?[o.channels]:[];for(o.channels=i.slice(0,We).map(a=>_r(a,n,o.name));o.channels.length<We;)o.channels.push(null)}return t}var zo=e=>typeof HTMLElement<"u"&&e instanceof HTMLElement,Ho=e=>typeof ImageBitmap<"u"&&e instanceof ImageBitmap,Wo=e=>typeof WebGLTexture<"u"&&e instanceof WebGLTexture;function _r(e,t=[],n=""){if(e==null||e===!1)return null;if(typeof e=="string")return t.includes(e)?{pass:e}:{url:e};if(zo(e)||Ho(e))return{element:e};if(Wo(e))return{texture:e};let r={...e};return r.pass==null&&r.id!=null&&(r.pass=r.id),r.url==null&&r.image!=null&&(r.url=r.image),r.element==null&&r.canvas!=null&&(r.element=r.canvas),r.pass==null&&r.src!=null&&r.url==null&&r.video==null&&(r.url=r.src),r.pass!=null&&!t.includes(r.pass)&&console.warn(`[ShaderMate] Pass "${n}": channel references unknown pass "${r.pass}"`),r}function $t(e){return/[\r\n]/.test(e)||/^\s*(void|#|precision|uniform|in |out |\/\/|\/\*)/.test(e)||/[{};]/.test(e)}var Vo=e=>typeof WebGL2RenderingContext<"u"&&e instanceof WebGL2RenderingContext;function Yo(e,t={}){let n=Object.assign({alpha:t.alpha!==!1,premultipliedAlpha:t.premultipliedAlpha!==!1,preserveDrawingBuffer:!!t.preserveDrawingBuffer,antialias:!!t.antialias,powerPreference:t.powerPreference||"default"},t.contextAttributes),r=t.webgl===void 0?"auto":String(t.webgl),o=null;if((r==="auto"||r==="2")&&(o=e.getContext("webgl2",n)),!o&&(r==="auto"||r==="1")&&(o=e.getContext("webgl",n)||e.getContext("experimental-webgl",n)),!o)throw new H("WebGL not supported");return o}function $o(e,t){let n={};return t?(n.EXT_color_buffer_float=e.getExtension("EXT_color_buffer_float"),n.EXT_color_buffer_half_float=e.getExtension("EXT_color_buffer_half_float"),n.OES_texture_float_linear=e.getExtension("OES_texture_float_linear")):(n.OES_texture_float=e.getExtension("OES_texture_float"),n.OES_texture_half_float=e.getExtension("OES_texture_half_float"),n.OES_texture_float_linear=e.getExtension("OES_texture_float_linear"),n.OES_texture_half_float_linear=e.getExtension("OES_texture_half_float_linear"),n.OES_standard_derivatives=e.getExtension("OES_standard_derivatives"),n.WEBGL_color_buffer_float=e.getExtension("WEBGL_color_buffer_float"),n.EXT_color_buffer_half_float=e.getExtension("EXT_color_buffer_half_float"),n.WEBGL_depth_texture=e.getExtension("WEBGL_depth_texture"),n.EXT_shader_texture_lod=e.getExtension("EXT_shader_texture_lod")),n}function Ko(e){let t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),e.STATIC_DRAW),{bind(n){e.bindBuffer(e.ARRAY_BUFFER,t);let r=e.getAttribLocation(n,"a_position");r!==-1&&(e.enableVertexAttribArray(r),e.vertexAttribPointer(r,2,e.FLOAT,!1,0,0))},draw(){e.drawArrays(e.TRIANGLES,0,6)},dispose(){e.deleteBuffer(t)}}}function qo(e,t){var n;let r=t.split(`
10
+ `,Kr=(e,t)=>JSON.stringify({name:e||"Palette",colors:t.map(n=>Q(n).slice(1))},null,2)});var qr={};On(qr,{fetchLospec:()=>cn,lospecSlug:()=>St});function St(e){let t=String(e||"").trim(),n=/palette-list\/([a-z0-9-]+)/i.exec(t);return(n?n[1]:t).toLowerCase().replace(/\.(json|hex|gpl)$/,"")}async function cn(e,{fetch:t=globalThis.fetch}={}){let n=St(e);if(!/^[a-z0-9-]+$/.test(n))throw new Error("That does not look like a Lospec palette slug");let r=await t(`https://lospec.com/palette-list/${n}.json`);if(!r.ok)throw new Error(`Lospec returned ${r.status} for "${n}"`);let o=await r.json(),i=an(o);return{name:o.name||n,author:o.author||"",colors:i.colors,slug:n}}var fn=Xt(()=>{sn()});var xa={};On(xa,{ASPECTS:()=>He,DEFAULTS:()=>zt,DITHER_METHODS:()=>ot,KERNELS:()=>lt,LEGACY_DITHER:()=>at,MAX_SIZE:()=>Ue,PALETTES:()=>jt,PRESETS:()=>ln,SETTINGS_VERSION:()=>Pe,VERSION:()=>wa,bayer:()=>he,buildTileset:()=>ro,compactSettings:()=>ft,createPixelator:()=>Rt,createZip:()=>no,cropRect:()=>st,decodeSettings:()=>jn,defaultSettings:()=>Ht,detectGrid:()=>zr,ditherKind:()=>it,downloadBlob:()=>Hr,encodeGIF:()=>eo,encodePNG:()=>$e,encodeSettings:()=>Xn,estimateFps:()=>ao,extractPalette:()=>Le,fetchLospec:()=>cn,forEachFrame:()=>so,frameTimes:()=>bn,getPalette:()=>je,getPreset:()=>Zr,hasTransparency:()=>Gr,loadImage:()=>on,lospecSlug:()=>St,makePlan:()=>pt,makeResult:()=>un,mediaError:()=>Mt,mergeSettings:()=>Hn,normalizeSettings:()=>ie,oklab:()=>Ge,packSpriteSheet:()=>pn,parseColor:()=>oe,parseMatrix:()=>$n,parsePalette:()=>Vr,pixelate:()=>Jr,resizeNearest:()=>yt,resolveSize:()=>ct,runCPU:()=>bt,seekTo:()=>Ct,settingsFromJSON:()=>zn,settingsToJSON:()=>Gn,sniffVideoCodec:()=>io,thresholdMap:()=>ut,toCanvas:()=>vt,toFrame:()=>Ye,toGPL:()=>Yr,toHex:()=>we,toHexFile:()=>$r,toPaletteJSON:()=>Kr,uniqueColors:()=>Et,upscale:()=>pe,videoReady:()=>kt});var jt=[{id:"1-bit-monitor",name:"1-Bit Monitor",author:"",colors:["222323","f0f6f0"]},{id:"apollo",name:"Apollo",author:"AdamCYounis",colors:["172038","253a5e","3c5e8b","4f8fba","73bed3","a4dddb","19332d","25562e","468232","75a743","a8ca58","d0da91","4d2b32","7a4841","ad7757","c09473","d7b594","e7d5b3","341c27","602c2c","884b2b","be772b","de9e41","e8c170","241527","411d31","752438","a53030","cf573c","da863e","1e1d39","402751","7a367b","a23e8c","c65197","df84a5","090a14","10141f","151d28","202e37","394a50","577277","819796","a8b5b2","c7cfcc","ebede9"]},{id:"batpalette",name:"Batpalette",author:"el Rojaz",colors:["000000","7f7f7f","ffffff","681e99","3f48cc","88ff82","bfa621","cc3d18"]},{id:"beached-boogaloo",name:"Beached Boogaloo",author:".tomais",colors:["ff0b20","8f0434","500037","a0ff00","57e71e","0ea717","057833","2cdeef","2483e7","153ab7","0d0a87","ff0b88","a60fff","6409cf","eaef30","ff880b","b75308","802202","000000","231940","514378","ffffff","73a3a7","366770","f7b771","c77650","974c38","873939","601e2c","300c1f"]},{id:"cc-29",name:"CC-29",author:"Alpha6",colors:["f2f0e5","b8b5b9","868188","646365","45444f","3a3858","212123","352b42","43436a","4b80ca","68c2d3","a2dcc7","ede19e","d3a068","b45252","6a536e","4b4158","80493a","a77b5b","e5ceb4","c2d368","8ab060","567b79","4e584a","7b7243","b2b47e","edc8c4","cf8acb","5f556a"]},{id:"cga-16",name:"CGA 16",author:"",colors:["000000","0000aa","00aa00","00aaaa","aa0000","aa00aa","aa5500","aaaaaa","555555","5555ff","55ff55","55ffff","ff5555","ff55ff","ffff55","ffffff"]},{id:"chaotic-neutral",name:"Chaotic neutral",author:"Dodecahedron \u2DFD",colors:["e1d4cb","c19f90","a56457","6d504d","484044","392b29","31312f","d8eef0","97999f","81a4c0","6a7f92","415973","43425a","45334b","4b1f40","671087","955ab9"]},{id:"endesga-32",name:"Endesga 32",author:"ENDESGA",colors:["be4a2f","d77643","ead4aa","e4a672","b86f50","733e39","3e2731","a22633","e43b44","f77622","feae34","fee761","63c74d","3e8948","265c42","193c3e","124e89","0099db","2ce8f5","ffffff","c0cbdc","8b9bb4","5a6988","3a4466","262b44","181425","ff0044","68386c","b55088","f6757a","e8b796","c28569"]},{id:"fantasy-24",name:"Fantasy 24",author:"",colors:["1f240a","39571c","a58c27","efac28","efd8a1","ab5c1c","183f39","ef692f","efb775","a56243","773421","724113","2a1d0d","392a1c","684c3c","927e6a","276468","ef3a0c","45230d","3c9f9c","9b1a0a","36170c","550f0a","300f0a"]},{id:"game-boy-dmg",name:"Game Boy (DMG)",author:"",colors:["0f380f","306230","8bac0f","9bbc0f"]},{id:"grayscale-4",name:"Grayscale 4",author:"",colors:["000000","555555","aaaaaa","ffffff"]},{id:"hidden-library",name:"Hidden Library",author:"Pixel Hoo",colors:["100b2a","2a213a","314743","65856d","adca9a","ecfeca","582d27","974133","d67654","5d3441","a3685b","ffb379","ffe6a9","ffffff"]},{id:"intacto14",name:"Intacto14",author:"Anubi",colors:["221529","4b5561","879ba3","cbf5ef","62b4de","5660d6","5b29a6","d64562","f2735c","edbb8e","ab6375","522152","37ada2","8cde8c"]},{id:"journey",name:"Journey",author:"\u{1F34D}PineappleOnPizza\u{1F34D}",colors:["050914","110524","3b063a","691749","9c3247","d46453","f5a15d","ffcf8e","ff7a7d","ff417d","d61a88","94007a","42004e","220029","100726","25082c","3d1132","73263d","bd4035","ed7b39","ffb84a","fff540","c6d831","77b02a","429058","2c645e","153c4a","052137","0e0421","0c0b42","032769","144491","488bd4","78d7ff","b0fff1","faffff","c7d4e1","928fb8","5b537d","392946","24142c","0e0f2c","132243","1a466b","10908e","28c074","3dff6e","f8ffb8","f0c297","cf968c","8f5765","52294b","0f022e","35003b","64004c","9b0e3e","d41e3c","ed4c40","ff9757","d4662f","9c341a","691b22","450c28","2d002e"]},{id:"lospec500",name:"Lospec500",author:"",colors:["10121c","2c1e31","6b2643","ac2847","ec273f","94493a","de5d3a","e98537","f3a833","4d3533","6e4c30","a26d3f","ce9248","dab163","e8d282","f7f3b7","1e4044","006554","26854c","5ab552","9de64e","008b8b","62a477","a6cb96","d3eed3","3e3b65","3859b3","3388de","36c5f4","6dead6","5e5b8c","8c78a5","b0a7b8","deceed","9a4d76","c878af","cc99ff","fa6e79","ffa2ac","ffd1d5","f6e8e0","ffffff"]},{id:"nyx8",name:"Nyx8",author:"Javier Guerrero",colors:["08141e","0f2a3f","20394f","4e495f","816271","997577","c3a38a","f6d6bd"]},{id:"oil-6",name:"Oil 6",author:"",colors:["fbf5ef","f2d3ab","c69fa5","8b6d9c","494d7e","272744"]},{id:"pico-8",name:"PICO-8",author:"",colors:["000000","1d2b53","7e2553","008751","ab5236","5f574f","c2c3c7","fff1e8","ff004d","ffa300","ffec27","00e436","29adff","83769c","ff77a8","ffccaa"]},{id:"resurrect-64",name:"Resurrect 64",author:"Kerrie Lake",colors:["2e222f","3e3546","625565","966c6c","ab947a","694f62","7f708a","9babb2","c7dcd0","ffffff","6e2727","b33831","ea4f36","f57d4a","ae2334","e83b3b","fb6b1d","f79617","f9c22b","7a3045","9e4539","cd683d","e6904e","fbb954","4c3e24","676633","a2a947","d5e04b","fbff86","165a4c","239063","1ebc73","91db69","cddf6c","313638","374e4a","547e64","92a984","b2ba90","0b5e65","0b8a8f","0eaf9b","30e1b9","8ff8e2","323353","484a77","4d65b4","4d9be6","8fd3ff","45293f","6b3e75","905ea9","a884f3","eaaded","753c54","a24b6f","cf657f","ed8099","831c5d","c32454","f04f78","f68181","fca790","fdcbb0"]},{id:"slso8",name:"SLSO8",author:"Luis Miguel Maldonado",colors:["0d2b45","203c56","544e68","8d697a","d08159","ffaa5e","ffd4a3","ffecd6"]},{id:"sweet-canyon-extended-64",name:"Sweet Canyon Extended 64",author:"Mr Slime",colors:["0f0e11","2d2c33","40404a","51545c","6b7179","7c8389","a8b2b6","d5d5d5","eeebe0","f1dbb1","eec99f","e1a17e","cc9562","ab7b49","9a643a","86482f","783a29","6a3328","541d29","42192c","512240","782349","8b2e5d","a93e89","d062c8","ec94ea","f2bdfc","eaebff","a2fafa","64e7e7","54cfd8","2fb6c3","2c89af","25739d","2a5684","214574","1f2966","101445","3c0d3b","66164c","901f3d","bb3030","dc473c","ec6a45","fb9b41","f0c04c","f4d66e","fffb76","ccf17a","97d948","6fba3b","229443","1d7e45","116548","0c4f3f","0a3639","251746","48246d","69189c","9f20c0","e527d2","ff51cf","ff7ada","ff9edb"]},{id:"sweetie-16",name:"Sweetie 16",author:"",colors:["1a1c2c","5d275d","b13e53","ef7d57","ffcd75","a7f070","38b764","257179","29366f","3b5dc9","41a6f6","73eff7","f4f4f4","94b0c2","566c86","333c57"]},{id:"toxic-haze",name:"Toxic Haze",author:"sillyTheJester",colors:["e5ff00","b8d14a","9ab06e","708763","4c5c52","393e40","242424"]},{id:"vinik24",name:"Vinik24",author:"Vinik",colors:["000000","6f6776","9a9a97","c5ccb8","8b5580","c38890","a593a5","666092","9a4f50","c28d75","7ca1c0","416aa3","8d6268","be955c","68aca9","387080","6e6962","93a167","6eaa78","557064","9d9f7f","7e9e99","5d6872","433455"]}];function je(e){let t=String(e||"").toLowerCase();return jt.find(n=>n.id===t||n.name.toLowerCase()===t)||null}le();var Pe=1,Ue=2048,ot=[{id:"none",label:"None",kind:"none"},{id:"bayer2",label:"Bayer 2\xD72",kind:"ordered"},{id:"bayer4",label:"Bayer 4\xD74",kind:"ordered"},{id:"bayer8",label:"Bayer 8\xD78",kind:"ordered"},{id:"bayer16",label:"Bayer 16\xD716",kind:"ordered"},{id:"cluster4",label:"Clustered dot 4\xD74",kind:"ordered"},{id:"cluster8",label:"Clustered dot 8\xD78",kind:"ordered"},{id:"lines",label:"Horizontal lines",kind:"ordered"},{id:"bluenoise",label:"Blue noise",kind:"ordered"},{id:"custom",label:"Custom matrix",kind:"ordered"},{id:"floyd-steinberg",label:"Floyd\u2013Steinberg",kind:"diffusion"},{id:"atkinson",label:"Atkinson",kind:"diffusion"},{id:"sierra-lite",label:"Sierra Lite",kind:"diffusion"},{id:"sierra",label:"Sierra",kind:"diffusion"},{id:"burkes",label:"Burkes",kind:"diffusion"},{id:"jarvis",label:"Jarvis\u2013Judice\u2013Ninke",kind:"diffusion"},{id:"stucki",label:"Stucki",kind:"diffusion"}],it=e=>(ot.find(t=>t.id===e)||{kind:"none"}).kind,at={none:"none","floyd-steinberg":"floyd-steinberg",atkinson:"atkinson",ordered:"bayer8","2x2 bayer":"bayer2","4x4 bayer":"bayer4","clustered 4x4":"cluster4"},zt=Object.freeze({version:Pe,size:{mode:"width",width:96,height:0,block:8,resample:"box"},adjust:{brightness:0,contrast:0,saturation:0,hue:0,gamma:1},frame:{aspect:"original",zoom:1,x:.5,y:.5},palette:{source:"builtin",id:"endesga-32",name:"Endesga 32",colors:[],count:16,distance:"oklab"},dither:{method:"bayer4",strength:.6,matrix:null},alpha:{threshold:.5},cleanup:{orphans:!1,smooth:!1},outline:{mode:"none",color:"#000000",corners:!1},export:{size:"scale",scale:4,indexed:!0,grid:!1,gridColor:"#000000"}}),K=(e,t,n,r)=>{let o=Number(e);return Number.isFinite(o)?Math.min(n,Math.max(t,o)):r},xe=(e,t,n)=>t.includes(e)?e:n,ze=(e,t)=>typeof e=="boolean"?e:t;function Ht(){return ie({})}function ie(e={}){let t=zt,n=e||{},r={},o=n.size||{},i=n.adjust||{},a=n.palette||{},s=n.dither||{},c=n.alpha||{},l=n.cleanup||{},u=n.outline||{},d=n.export||{};r.version=Pe,r.size={mode:xe(o.mode,["width","block"],t.size.mode),width:Math.round(K(o.width,1,Ue,t.size.width)),height:Math.round(K(o.height,0,Ue,t.size.height)),block:K(o.block,1,256,t.size.block),resample:xe(o.resample,["box","nearest"],t.size.resample)},r.adjust={brightness:K(i.brightness,-1,1,0),contrast:K(i.contrast,-1,1,0),saturation:K(i.saturation,-1,1,0),hue:K(i.hue,-180,180,0),gamma:K(i.gamma,.2,5,1)};let f=n.frame||{};r.frame={aspect:xe(f.aspect,He.map(g=>g.id),"original"),zoom:K(f.zoom,1,8,1),x:K(f.x,0,1,.5),y:K(f.y,0,1,.5)};let m=xe(a.source,["builtin","custom","extract","none"],t.palette.source);if(r.palette={source:m,id:typeof a.id=="string"?a.id:m==="builtin"?t.palette.id:"",name:typeof a.name=="string"?a.name:"",colors:[],count:Math.round(K(a.count,2,256,t.palette.count)),distance:xe(a.distance,["oklab","rgb"],t.palette.distance)},m==="builtin"){let g=je(r.palette.id)||je(t.palette.id);r.palette.id=g.id,r.palette.name=g.name,r.palette.colors=g.colors.map(x=>"#"+x)}else m==="custom"?(r.palette.colors=(Array.isArray(a.colors)?a.colors:[]).filter(nt).map(Q).slice(0,256),r.palette.colors.length||(r.palette.colors=["#000000","#ffffff"]),r.palette.name=r.palette.name||"Custom"):m==="extract"?r.palette.name=`Extracted (${r.palette.count})`:r.palette.name="None";let b=ot.some(g=>g.id===s.method)?s.method:t.dither.method;return r.dither={method:b,strength:K(s.strength,0,1,t.dither.strength),matrix:Ro(s.matrix)},r.alpha={threshold:K(c.threshold,0,1,t.alpha.threshold)},r.cleanup={orphans:ze(l.orphans,!1),smooth:ze(l.smooth,!1)},r.outline={mode:xe(u.mode,["none","outer","inner"],"none"),color:nt(u.color)?Q(u.color):t.outline.color,corners:ze(u.corners,!1)},r.export={size:xe(d.size,["scale","source"],"scale"),scale:Math.round(K(d.scale,1,64,t.export.scale)),indexed:ze(d.indexed,t.export.indexed),grid:ze(d.grid,!1),gridColor:nt(d.gridColor)?Q(d.gridColor):t.export.gridColor},r}function Ro(e){if(!Array.isArray(e)||!e.length||!Array.isArray(e[0]))return null;let t=Math.min(16,e.length),n=Math.min(16,e[0].length),r=[];for(let o=0;o<t;o++){let i=[];for(let a=0;a<n;a++){let s=Number((e[o]||[])[a]);i.push(Number.isFinite(s)?s:0)}r.push(i)}return r}var He=[{id:"original",label:"Original",ratio:null},{id:"1:1",label:"1:1",ratio:1},{id:"4:3",label:"4:3",ratio:4/3},{id:"3:4",label:"3:4",ratio:3/4},{id:"3:2",label:"3:2",ratio:3/2},{id:"2:3",label:"2:3",ratio:2/3},{id:"16:9",label:"16:9",ratio:16/9},{id:"9:16",label:"9:16",ratio:9/16}];function st(e,t,n={}){let r=(He.find(l=>l.id===n.aspect)||He[0]).ratio||e/t,o=e,i=e/r;i>t&&(i=t,o=t*r);let a=Math.max(1,n.zoom||1);o=Math.max(1,Math.min(e,Math.round(o/a))),i=Math.max(1,Math.min(t,Math.round(i/a)));let s=n.x??.5,c=n.y??.5;return{x:Math.round((e-o)*s),y:Math.round((t-i)*c),w:o,h:i}}function ct(e,t,n){let r,o;return n.mode==="block"?(r=Math.max(1,Math.round(e/n.block)),o=Math.max(1,Math.round(t/n.block))):(r=n.width,o=n.height||Math.max(1,Math.round(r*t/e))),{width:Math.min(Ue,r),height:Math.min(Ue,o)}}function Mo(e,t){let n={};for(let r of Object.keys(e)){if(r==="version")continue;let o=e[r],i=t[r];if(o&&typeof o=="object"&&!Array.isArray(o)){let a={};for(let s of Object.keys(o))JSON.stringify(o[s])!==JSON.stringify(i&&i[s])&&(a[s]=o[s]);Object.keys(a).length&&(n[r]=a)}else JSON.stringify(o)!==JSON.stringify(i)&&(n[r]=o)}return n}var Bn={enc(e){let t=new TextEncoder().encode(e),n="";for(let r of t)n+=String.fromCharCode(r);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")},dec(e){let t=atob(e.replace(/-/g,"+").replace(/_/g,"/"));return new TextDecoder().decode(Uint8Array.from(t,n=>n.charCodeAt(0)))}};function ft(e){let t=ie(e),n=Mo(t,Ht());return n.palette&&(t.palette.source!=="custom"&&(delete n.palette.colors,delete n.palette.name),t.palette.source!=="builtin"&&delete n.palette.id,t.palette.source!=="extract"&&delete n.palette.count),n.palette&&!Object.keys(n.palette).length&&delete n.palette,n}function Xn(e){return Bn.enc(JSON.stringify({v:Pe,...ft(e)}))}function jn(e){let t=String(e),n=/[#&?]s=([A-Za-z0-9_-]+)/.exec(t);n&&(t=n[1]);let r=JSON.parse(Bn.dec(t));return delete r.v,ie(r)}function Gn(e){return JSON.stringify({$schema:"image-to-pixel/settings",version:Pe,...ft(e)},null,2)}function zn(e){let t=typeof e=="string"?JSON.parse(e):e;return delete t.$schema,ie(t)}function Hn(e,t){let n=JSON.parse(JSON.stringify(e));for(let r of Object.keys(t||{}))t[r]&&typeof t[r]=="object"&&!Array.isArray(t[r])&&n[r]&&typeof n[r]=="object"?Object.assign(n[r],t[r]):n[r]=t[r];return ie(n)}le();var Wn="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";function ko(e){return typeof atob=="function"?Uint8Array.from(atob(e),t=>t.charCodeAt(0)):new Uint8Array(Buffer.from(e,"base64"))}function he(e){let t=[[0]];for(let n=1;n<e;n*=2){let r=[];for(let o=0;o<n*2;o++)r.push(new Array(n*2));for(let o=0;o<n;o++)for(let i=0;i<n;i++){let a=4*t[o][i];r[o][i]=a,r[o][i+n]=a+2,r[o+n][i]=a+3,r[o+n][i+n]=a+1}t=r}return t}function Yn(e){let t=e.length,n=e[0].length,r=[];for(let i=0;i<t;i++)for(let a=0;a<n;a++)r.push({i:i*n+a,v:e[i][a]});r.sort((i,a)=>i.v-a.v||i.i-a.i);let o=new Uint8Array(n*t);return r.forEach((i,a)=>{o[i.i]=a}),o}function Co(e){let t=[];for(let n=0;n<e;n++){let r=[];for(let o=0;o<e;o++){let i=(o+.5)/e*2*Math.PI,a=(n+.5)/e*2*Math.PI;r.push(-(Math.cos(i)+Math.cos(a))+(o*e+n)*1e-9)}t.push(r)}return t}var Uo=[[7,13,11,4],[12,16,14,8],[10,15,6,2],[5,9,3,1]],Wt=new Map;function ut(e,t=null){if(e==="custom"){let o=t&&t.length?t:he(4);return{w:o[0].length,h:o.length,levels:o.length*o[0].length,values:Yn(o)}}if(Wt.has(e))return Wt.get(e);let n,r=o=>({w:o[0].length,h:o.length,levels:o.length*o[0].length,values:Yn(o)});switch(e){case"bayer2":n=r(he(2));break;case"bayer4":n=r(he(4));break;case"bayer8":n=r(he(8));break;case"bayer16":n=r(he(16));break;case"cluster4":n=r(Uo);break;case"cluster8":n=r(Co(8));break;case"lines":n=r([[0],[2],[1],[3]]);break;case"bluenoise":n={w:64,h:64,levels:256,values:ko(Wn)};break;default:n=r(he(4))}return Wt.set(e,n),n}function $n(e){let t=String(e).split(/\r?\n|;/).map(r=>r.trim()).filter(r=>r&&!/^\//.test(r)).map(r=>r.replace(/[[\]]/g,"").split(/[\s,]+/).filter(Boolean).map(Number));if(!t.length)throw new Error("Matrix is empty");let n=t[0].length;if(t.some(r=>r.length!==n||r.some(o=>!Number.isFinite(o))))throw new Error("Every row needs the same number of values");if(n>16||t.length>16)throw new Error("Matrices are limited to 16\xD716");return t}var ge=(e,t)=>t.map(([n,r,o])=>[n,r,o/e]),lt={"floyd-steinberg":ge(16,[[1,0,7],[-1,1,3],[0,1,5],[1,1,1]]),atkinson:ge(8,[[1,0,1],[2,0,1],[-1,1,1],[0,1,1],[1,1,1],[0,2,1]]),"sierra-lite":ge(4,[[1,0,2],[-1,1,1],[0,1,1]]),sierra:ge(32,[[1,0,5],[2,0,3],[-2,1,2],[-1,1,4],[0,1,5],[1,1,4],[2,1,2],[-1,2,2],[0,2,3],[1,2,2]]),burkes:ge(32,[[1,0,8],[2,0,4],[-2,1,2],[-1,1,4],[0,1,8],[1,1,4],[2,1,2]]),jarvis:ge(48,[[1,0,7],[2,0,5],[-2,1,3],[-1,1,5],[0,1,7],[1,1,5],[2,1,3],[-2,2,1],[-1,2,3],[0,2,5],[1,2,3],[2,2,1]]),stucki:ge(42,[[1,0,8],[2,0,4],[-2,1,2],[-1,1,4],[0,1,8],[1,1,4],[2,1,2],[-2,2,1],[-1,2,2],[0,2,4],[1,2,2],[2,2,1]])},Vt=12;function Kn(e){let t=1;for(let[n,r]of e)r>0&&(t=Math.max(t,Math.floor(-n/r)+1));return t}var qn=(e,t,n)=>e-1+n*(t-1)+1;le();function Le(e,t=16,n={}){let{maxSamples:r=4e4,alphaThreshold:o=.5}=n,i=e.width*e.height,a=Math.max(1,Math.floor(i/r)),s=[];for(let f=0;f<i;f+=a){let m=f*4;e.data[m+3]<o*255||s.push([e.data[m],e.data[m+1],e.data[m+2]])}if(!s.length)return["#000000","#ffffff"].slice(0,Math.max(1,t));let c=[s];for(;c.length<t;){let f=-1,m=-1,b=0;if(c.forEach((y,h)=>{if(!(y.length<2))for(let E=0;E<3;E++){let p=255,_=0;for(let M of y)M[E]<p&&(p=M[E]),M[E]>_&&(_=M[E]);let T=(_-p)*Math.sqrt(y.length);T>m&&(m=T,f=h,b=E)}}),f<0||m<=0)break;let g=c[f].slice().sort((y,h)=>y[b]-h[b]),x=g.length>>1;c.splice(f,1,g.slice(0,x),g.slice(x))}let l=c.map(f=>Po(f));for(let f=0;f<6;f++){let m=l.map(()=>[0,0,0,0]);for(let b of s){let g=0,x=1/0;for(let h=0;h<l.length;h++){let E=b[0]-l[h][0],p=b[1]-l[h][1],_=b[2]-l[h][2],T=E*E+p*p+_*_;T<x&&(x=T,g=h)}let y=m[g];y[0]+=b[0],y[1]+=b[1],y[2]+=b[2],y[3]++}l=l.map((b,g)=>m[g][3]?[m[g][0]/m[g][3],m[g][1]/m[g][3],m[g][2]/m[g][3]]:b)}let u=[...new Set(l.map(f=>we(f)))],d=f=>{let m=parseInt(f.slice(1),16);return .2126*(m>>16)+.7152*(m>>8&255)+.0722*(m&255)};return u.sort((f,m)=>d(f)-d(m))}function Po(e){let t=0,n=0,r=0;for(let o of e)t+=o[0],n+=o[1],r+=o[2];return[t/e.length,n/e.length,r/e.length]}le();function mt(e,t,n,r="box",o=null){let i=o?o.x:0,a=o?o.y:0,s=o?o.w:e.width,c=o?o.h:e.height,l=e.data,u=e.width,d=new Float32Array(t*n*4),f=r==="nearest"?1:Math.min(16,Math.max(1,Math.ceil(s/t))),m=r==="nearest"?1:Math.min(16,Math.max(1,Math.ceil(c/n))),b=new Int32Array(t*f),g=new Int32Array(n*m);for(let x=0;x<t;x++)for(let y=0;y<f;y++)b[x*f+y]=i+Math.min(s-1,Math.floor((2*(x*f+y)+1)*s/(2*t*f)));for(let x=0;x<n;x++)for(let y=0;y<m;y++)g[x*m+y]=a+Math.min(c-1,Math.floor((2*(x*m+y)+1)*c/(2*n*m)));for(let x=0;x<n;x++)for(let y=0;y<t;y++){let h=0,E=0,p=0,_=0;for(let M=0;M<m;M++){let S=g[x*m+M]*u;for(let O=0;O<f;O++){let L=(S+b[y*f+O])*4,X=l[L+3]/255;h+=l[L]/255*X,E+=l[L+1]/255*X,p+=l[L+2]/255*X,_+=X}}let T=(x*t+y)*4;_>0&&(d[T]=h/_,d[T+1]=E/_,d[T+2]=p/_),d[T+3]=_/(f*m)}return d}function ht(e,{brightness:t=0,contrast:n=0,saturation:r=0,hue:o=0,gamma:i=1}){if(!t&&!n&&!r&&!o&&i===1)return e;let a=n>=0?1/(1-.99*n):1+n,s=1/i,c=Math.cos(o*Math.PI/180),l=Math.sin(o*Math.PI/180),u=[.213+.787*c-.213*l,.715-.715*c-.715*l,.072-.072*c+.928*l,.213-.213*c+.143*l,.715+.285*c+.14*l,.072-.072*c-.283*l,.213-.213*c-.787*l,.715-.715*c+.715*l,.072+.928*c+.072*l];for(let d=0;d<e.length;d+=4){let f=e[d]+t,m=e[d+1]+t,b=e[d+2]+t;f=(f-.5)*a+.5,m=(m-.5)*a+.5,b=(b-.5)*a+.5;let g=f*rt[0]+m*rt[1]+b*rt[2],x=1+r;if(f=g+(f-g)*x,m=g+(m-g)*x,b=g+(b-g)*x,o){let y=u[0]*f+u[1]*m+u[2]*b,h=u[3]*f+u[4]*m+u[5]*b,E=u[6]*f+u[7]*m+u[8]*b;f=y,m=h,b=E}e[d]=Math.pow(de(f),s),e[d+1]=Math.pow(de(m),s),e[d+2]=Math.pow(de(b),s)}return e}function Jn(e,t){for(let n=3;n<e.length;n+=4)e[n]=e[n]>=t&&e[n]>0?1:0;return e}var de=e=>e<0?0:e>1?1:e;function Zn(e,t){let n=e.length,r=new Float64Array(n*3),o=new Float64Array(n*3);return e.forEach((i,a)=>{o.set([i[0]/255,i[1]/255,i[2]/255],a*3),r.set(t===1?[i[0]/255,i[1]/255,i[2]/255]:Ge(i[0]/255,i[1]/255,i[2]/255),a*3)}),{n,coords:r,rgb:o,distance:t}}var Yt=[.299,.587,.114];function Qn(e,t,n,r){let o,i,a,s=1,c=1,l=1;e.distance===1?(o=t,i=n,a=r,s=Yt[0],c=Yt[1],l=Yt[2]):[o,i,a]=Ge(t,n,r);let u=0,d=1/0,f=e.coords;for(let m=0;m<e.n;m++){let b=o-f[m*3],g=i-f[m*3+1],x=a-f[m*3+2],y=s*b*b+c*g*g+l*x*x;y<d&&(d=y,u=m)}return u}function er(e,t,n,r){let o=new Uint8ClampedArray(t*n*4),i=r.quantize?Zn(r.palette,r.distance):null,a=r.kind==="ordered"?r.map:null,s=a?r.spread*r.settings.dither.strength:0;for(let c=0;c<n;c++)for(let l=0;l<t;l++){let u=(c*t+l)*4;if(e[u+3]<.5)continue;let d=e[u],f=e[u+1],m=e[u+2];if(i){if(a){let g=(a.values[c%a.h*a.w+l%a.w]+.5)/a.levels-.5;d=de(d+g*s),f=de(f+g*s),m=de(m+g*s)}let b=Qn(i,d,f,m);o[u]=r.palette[b][0],o[u+1]=r.palette[b][1],o[u+2]=r.palette[b][2]}else o[u]=Math.round(d*255),o[u+1]=Math.round(f*255),o[u+2]=Math.round(m*255);o[u+3]=255}return o}function tr(e,t,n,r){let o=new Uint8ClampedArray(t*n*4),i=Zn(r.palette,r.distance),a=new Float32Array(t*n*3),s=r.settings.dither.strength,c=r.kernel;for(let l=0;l<n;l++)for(let u=0;u<t;u++){let d=l*t+u,f=d*4;if(e[f+3]<.5)continue;let m=de(e[f]+a[d*3]*s),b=de(e[f+1]+a[d*3+1]*s),g=de(e[f+2]+a[d*3+2]*s),x=Qn(i,m,b,g),y=m-i.rgb[x*3],h=b-i.rgb[x*3+1],E=g-i.rgb[x*3+2];for(let[p,_,T]of c){let M=u+p,S=l+_;if(M<0||M>=t||S>=n)continue;let O=(S*t+M)*3;a[O]+=y*T,a[O+1]+=h*T,a[O+2]+=E*T}o[f]=r.palette[x][0],o[f+1]=r.palette[x][1],o[f+2]=r.palette[x][2],o[f+3]=255}return o}var dt=(e,t)=>e[t+3]===0?-1:e[t]<<16|e[t+1]<<8|e[t+2],nr=[[0,-1],[1,0],[0,1],[-1,0]];function rr(e,t,n){let r=e.slice();for(let o=0;o<n;o++)for(let i=0;i<t;i++){let a=(o*t+i)*4,s=dt(r,a),c=[],l=[];for(let[f,m]of nr){let b=i+f,g=o+m;if(b<0||g<0||b>=t||g>=n)continue;let x=(g*t+b)*4;c.push(dt(r,x)),l.push(x)}if(c.length<2||c.includes(s))continue;let u=0,d=0;for(let f=0;f<c.length;f++){let m=0;for(let b=0;b<c.length;b++)c[b]===c[f]&&m++;m>d&&(d=m,u=f)}e.set(r.subarray(l[u],l[u]+4),a)}return e}function or(e,t,n){let r=e.slice();for(let o=0;o<n;o++)for(let i=0;i<t;i++){let a=(o*t+i)*4,s=dt(r,a),c=[],l=[];for(let u=-1;u<=1;u++)for(let d=-1;d<=1;d++){let f=Math.min(t-1,Math.max(0,i+d)),b=(Math.min(n-1,Math.max(0,o+u))*t+f)*4;c.push(dt(r,b)),l.push(b)}for(let u=0;u<9;u++){if(c[u]===s)continue;let d=0;for(let f=0;f<9;f++)c[f]===c[u]&&d++;if(d>=5){e.set(r.subarray(l[u],l[u]+4),a);break}}}return e}function ir(e,t,n,{mode:r,color:o,corners:i}){if(r==="none")return e;let a=e.slice(),s=(u,d)=>u>=0&&d>=0&&u<t&&d<n&&a[(d*t+u)*4+3]>0,c=(u,d)=>u>=0&&d>=0&&u<t&&d<n,l=i?[[0,-1],[1,0],[0,1],[-1,0],[-1,-1],[1,-1],[1,1],[-1,1]]:nr;for(let u=0;u<n;u++)for(let d=0;d<t;d++){let f=s(d,u),m=!1;for(let[b,g]of l){let x=d+b,y=u+g;if(c(x,y)&&(r==="outer"?!f&&s(x,y):f&&!s(x,y))){m=!0;break}}if(m){let b=(u*t+d)*4;e[b]=o[0],e[b+1]=o[1],e[b+2]=o[2],e[b+3]=255}}return e}function pt(e,t){let n=ie(e),r=st(t.width,t.height,n.frame),{width:o,height:i}=ct(r.w,r.h,n.size),a=n.palette.colors;n.palette.source==="extract"&&(a=Lo(t,n,o,i,r));let s=n.palette.source!=="none"&&a.length>0,c=s?a.map(oe):[],l=s?it(n.dither.method):"none";n.dither.strength<=0&&(l="none");let u=l==="ordered"?ut(n.dither.method,n.dither.matrix):null,d=l==="diffusion"?lt[n.dither.method]:null,f=d?Kn(d):1;return{settings:n,srcWidth:t.width,srcHeight:t.height,crop:r,width:o,height:i,quantize:s,kind:l,palette:c,paletteHex:s?a.slice():null,distance:n.palette.distance==="rgb"?1:0,spread:s?Nn(c):0,map:u,kernel:d,skew:f,waves:d?qn(o,i,f):0,outline:{mode:n.outline.mode,color:oe(n.outline.color),corners:n.outline.corners}}}function Lo(e,t,n,r,o){let i=Math.min(1,160/Math.max(n,r)),a=Math.max(1,Math.round(n*i)),s=Math.max(1,Math.round(r*i)),c=mt(e,a,s,"box",o);ht(c,t.adjust);let l=new Uint8ClampedArray(c.length);for(let u=0;u<c.length;u++)l[u]=Math.round(c[u]*255);return Le({data:l,width:a,height:s},t.palette.count,{alphaThreshold:Math.max(.01,t.alpha.threshold)})}function bt(e,t){let{width:n,height:r,settings:o}=e,i=mt(t,n,r,o.size.resample,e.crop);ht(i,o.adjust),Jn(i,o.alpha.threshold);let a=e.kind==="diffusion"?tr(i,n,r,e):er(i,n,r,e);return o.cleanup.orphans&&rr(a,n,r),o.cleanup.smooth&&or(a,n,r),ir(a,n,r,e.outline),a}var Io="2.0.0",We=4,ar="glcanvas",H=class extends Error{constructor(e,t){super(e),this.name="ShaderMateError",t&&Object.assign(this,t)}},sr=new Set;function ye(e,...t){sr.has(e)||(sr.add(e),console.warn("[ShaderMate]",...t))}var Zt=typeof window<"u"&&typeof document<"u",Fo=e=>Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView),cr=e=>e==null?[]:Array.isArray(e)?e:[e],fr=e=>e>0&&(e&e-1)===0;function Oo(e){var t,n,r,o;if(e==null)return null;if(Array.isArray(e))return[(t=e[0])!=null?t:0,(n=e[1])!=null?n:0,(r=e[2])!=null?r:0,(o=e[3])!=null?o:1];if(typeof e=="string"&&Zt){let i=document.createElement("canvas");i.width=i.height=1;let a=i.getContext("2d");a.fillStyle=e,a.fillRect(0,0,1,1);let s=a.getImageData(0,0,1,1).data;return[s[0]/255,s[1]/255,s[2]/255,s[3]/255]}return null}function Do(){if(!Zt)return!1;let e=location.hostname;return location.protocol==="file:"||e==="localhost"||e==="127.0.0.1"||e===""||e.endsWith(".local")}var No=class{constructor(e){this.gl=e,this._items=new Map,this._nextId=1}add(e,t){let n=this._nextId++;return this._items.set(n,{obj:e,count:1,type:t}),n}ref(e){let t=this._items.get(e);return t&&t.count++,e}get(e){let t=this._items.get(e);return t?t.obj:null}unref(e){let t=this._items.get(e);t&&(t.count--,t.count<=0&&this._destroy(e,t))}_destroy(e,t){let{obj:n,type:r}=t,o=this.gl;switch(r){case"texture2D":case"textureCube":o.deleteTexture(n);break;case"fbo":o.deleteFramebuffer(n);break;case"buffer":o.deleteBuffer(n);break;case"program":o.deleteProgram(n);break}this._items.delete(e)}dispose(){for(let[e,t]of[...this._items])this._destroy(e,t)}};function Bo(e){let t=new Map;function n(s,c){return t.has(s)||t.set(s,new Set),t.get(s).add(c),()=>r(s,c)}function r(s,c){let l=t.get(s);l&&l.delete(c)}function o(s,c){let l=u=>{r(s,l),c(u)};return n(s,l)}function i(s,c){let l=t.get(s);if(l)for(let u of[...l])try{u(c)}catch(d){console.error(`[ShaderMate] error in "${s}" listener`,d)}e&&e(s,c)}function a(){t.clear()}return{on:n,off:r,once:o,emit:i,clear:a}}var ur={linear:e=>e,inQuad:e=>e*e,outQuad:e=>e*(2-e),inOutQuad:e=>e<.5?2*e*e:-1+(4-2*e)*e,inCubic:e=>e*e*e,outCubic:e=>1-Math.pow(1-e,3),inOutCubic:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,outExpo:e=>e===1?1:1-Math.pow(2,-10*e),outBack:e=>1+2.70158*Math.pow(e-1,3)+1.70158*Math.pow(e-1,2),outElastic:e=>e===0||e===1?e:Math.pow(2,-10*e)*Math.sin((e*10-.75)*(2*Math.PI)/3)+1};function Xo(){let e=new Map;function t(o,i,a,s,c={}){let{duration:l=500,delay:u=0}=c,d=typeof c.ease=="function"?c.ease:ur[c.ease]||ur.outCubic,f=e.get(o);f&&f.resolve(!1);let m=i(),b=Array.isArray(s)||ArrayBuffer.isView(s),g=b?Array.from(m??s):Number(m??0),x=b?Array.from(s):Number(s);return new Promise(y=>{let h={start:performance.now()+u,resolve:E=>{e.delete(o),y(E)},update(E){let p=l>0?jo((E-this.start)/l):1;if(p<0)return;let _=d(p);a(b?g.map((T,M)=>T+(x[M]-T)*_):g+(x-g)*_),p>=1&&this.resolve(!0)}};e.set(o,h)})}function n(o){for(let i of[...e.values()])i.update(o)}function r(o){if(o===void 0){for(let a of[...e.values()])a.resolve(!1);return}let i=e.get(o);i&&i.resolve(!1)}return{tween:t,update:n,cancel:r,get size(){return e.size}}}var jo=e=>e<0?e:e>1?1:e;function Go(e){let t;if(typeof e=="string")t=[{src:e}];else if(Array.isArray(e))t=e.map(o=>typeof o=="string"?{src:o}:{...o});else if(e&&typeof e=="object")t=[{...e}];else throw new H("ShaderMate: expected a shader (string), a pass object, or an array of passes");if(!t.length)throw new H("ShaderMate: no passes given");t.forEach((o,i)=>{var a,s,c,l,u;if(o.src==null&&(o.src=(l=(c=(s=(a=o.shader)!=null?a:o.frag)!=null?s:o.fragment)!=null?c:o.glsl)!=null?l:o.url),o.src==null)throw new H(`Pass ${(u=o.name)!=null?u:i} has no shader source (use "shader")`);o.name==null&&(o.name=t.length===1?"main":"pass"+i),o.uniforms==null&&(o.uniforms={})}),t.some(o=>o.screen)||(t[t.length-1].screen=!0),t.filter(o=>o.screen).length>1&&console.warn("[ShaderMate] Multiple screen:true passes; last drawn wins.");let n=t.map(o=>o.name),r=n.filter((o,i)=>n.indexOf(o)!==i);if(r.length)throw new H("Duplicate pass names: "+[...new Set(r)].join(", "));for(let o of t){let i=Array.isArray(o.channels)?o.channels:o.channels?[o.channels]:[];for(o.channels=i.slice(0,We).map(a=>_r(a,n,o.name));o.channels.length<We;)o.channels.push(null)}return t}var zo=e=>typeof HTMLElement<"u"&&e instanceof HTMLElement,Ho=e=>typeof ImageBitmap<"u"&&e instanceof ImageBitmap,Wo=e=>typeof WebGLTexture<"u"&&e instanceof WebGLTexture;function _r(e,t=[],n=""){if(e==null||e===!1)return null;if(typeof e=="string")return t.includes(e)?{pass:e}:{url:e};if(zo(e)||Ho(e))return{element:e};if(Wo(e))return{texture:e};let r={...e};return r.pass==null&&r.id!=null&&(r.pass=r.id),r.url==null&&r.image!=null&&(r.url=r.image),r.element==null&&r.canvas!=null&&(r.element=r.canvas),r.pass==null&&r.src!=null&&r.url==null&&r.video==null&&(r.url=r.src),r.pass!=null&&!t.includes(r.pass)&&console.warn(`[ShaderMate] Pass "${n}": channel references unknown pass "${r.pass}"`),r}function $t(e){return/[\r\n]/.test(e)||/^\s*(void|#|precision|uniform|in |out |\/\/|\/\*)/.test(e)||/[{};]/.test(e)}var Vo=e=>typeof WebGL2RenderingContext<"u"&&e instanceof WebGL2RenderingContext;function Yo(e,t={}){let n=Object.assign({alpha:t.alpha!==!1,premultipliedAlpha:t.premultipliedAlpha!==!1,preserveDrawingBuffer:!!t.preserveDrawingBuffer,antialias:!!t.antialias,powerPreference:t.powerPreference||"default"},t.contextAttributes),r=t.webgl===void 0?"auto":String(t.webgl),o=null;if((r==="auto"||r==="2")&&(o=e.getContext("webgl2",n)),!o&&(r==="auto"||r==="1")&&(o=e.getContext("webgl",n)||e.getContext("experimental-webgl",n)),!o)throw new H("WebGL not supported");return o}function $o(e,t){let n={};return t?(n.EXT_color_buffer_float=e.getExtension("EXT_color_buffer_float"),n.EXT_color_buffer_half_float=e.getExtension("EXT_color_buffer_half_float"),n.OES_texture_float_linear=e.getExtension("OES_texture_float_linear")):(n.OES_texture_float=e.getExtension("OES_texture_float"),n.OES_texture_half_float=e.getExtension("OES_texture_half_float"),n.OES_texture_float_linear=e.getExtension("OES_texture_float_linear"),n.OES_texture_half_float_linear=e.getExtension("OES_texture_half_float_linear"),n.OES_standard_derivatives=e.getExtension("OES_standard_derivatives"),n.WEBGL_color_buffer_float=e.getExtension("WEBGL_color_buffer_float"),n.EXT_color_buffer_half_float=e.getExtension("EXT_color_buffer_half_float"),n.WEBGL_depth_texture=e.getExtension("WEBGL_depth_texture"),n.EXT_shader_texture_lod=e.getExtension("EXT_shader_texture_lod")),n}function Ko(e){let t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),e.STATIC_DRAW),{bind(n){e.bindBuffer(e.ARRAY_BUFFER,t);let r=e.getAttribLocation(n,"a_position");r!==-1&&(e.enableVertexAttribArray(r),e.vertexAttribPointer(r,2,e.FLOAT,!1,0,0))},draw(){e.drawArrays(e.TRIANGLES,0,6)},dispose(){e.deleteBuffer(t)}}}function qo(e,t){var n;let r=t.split(`
11
11
  `),o=r.findIndex(a=>/^\s*#line\s+1\b/.test(a))+1,i=[];for(let a of e.split(`
12
12
  `)){let s=/ERROR:\s*\d+:(\d+):\s*(.*)/.exec(a);if(!s)continue;let c=parseInt(s[1],10),l=o>0?o+c-1:c-1;i.push({line:c,message:s[2].trim(),source:(n=r[l])!=null?n:"",physical:l})}return i}function lr(e,t,n,{label:r="",showExpandedOnError:o=!0}={}){let i=e.createShader(t);if(e.shaderSource(i,n),e.compileShader(i),e.getShaderParameter(i,e.COMPILE_STATUS))return{shader:i};let a=e.getShaderInfoLog(i)||"";e.deleteShader(i);let s=qo(a,n),c=t===e.VERTEX_SHADER?"Vertex":"Fragment",l=s.length?s.map(d=>`line ${d.line}: ${d.message}`).join(`
13
13
  `):a.trim(),u=new H(`${c} shader compile error${r?` in pass "${r}"`:""}:
@@ -62,21 +62,21 @@ ${b}
62
62
  `}finally{i.pop()}}}return l+s.slice(u)}return a(e)}function pi(e){let t="";for(let n of e)if(typeof n=="string")t+=`#define ${n}
63
63
  `;else if(n&&typeof n=="object")for(let r in n){let o=n[r];t+=o===!0||o===void 0?`#define ${r}
64
64
  `:`#define ${r} ${o}
65
- `}return t}var Mr={header:!0,builtins:!0,uniforms:!0,defines:!0,mainWrap:!0},bi={header:!1,builtins:!1,uniforms:!1,defines:!1,mainWrap:!1};function wi(e,{isGL2:t,defines:n=[],enableDerivatives:r=!1,inject:o=Mr,channelTypes:i=[],builtinOpts:a={}}={}){if(!o||!Object.values(o).some(Boolean))return e;let s="",c=e,l=/^[ \t]*#version[^\n]*/m.exec(c);l&&(s=l[0].trim()+`
65
+ `}return t}var Rr={header:!0,builtins:!0,uniforms:!0,defines:!0,mainWrap:!0},bi={header:!1,builtins:!1,uniforms:!1,defines:!1,mainWrap:!1};function wi(e,{isGL2:t,defines:n=[],enableDerivatives:r=!1,inject:o=Rr,channelTypes:i=[],builtinOpts:a={}}={}){if(!o||!Object.values(o).some(Boolean))return e;let s="",c=e,l=/^[ \t]*#version[^\n]*/m.exec(c);l&&(s=l[0].trim()+`
66
66
  `,c=c.slice(0,l.index)+c.slice(l.index+l[0].length));let u="";if(s?u+=s:o.header&&t&&(u+=`#version 300 es
67
67
  `),o.builtins&&!t&&r&&(u+=`#extension GL_OES_standard_derivatives : enable
68
68
  `),o.header&&(u+=`precision highp float;
69
69
  precision highp int;
70
70
  `),o.builtins){u+=t?Jo:Zo,u+=ci;let b=fi(c,t),g=/\bout\s+(?:\w+\s+)*vec4\s+\w+\s*;/.test(hr(c));b?u+=b:t&&!g&&(u+=`out vec4 outColor;
71
71
  `)}o.uniforms&&(u+=mi(c,i,a)),o.defines&&(u+=pi(n));let d=hr(c),f=o.mainWrap&&/\bmainImage\s*\(/.test(d)&&!/\bvoid\s+main\s*\(/.test(d),m=u+`#line 1
72
- `+c;return f&&(m+=t?Qo:ei),m}function gt(e,t,n,r,o,i={},a={},{dynamic:s=!1,flipDefault:c=!1}={}){let l=e.createTexture();e.bindTexture(e.TEXTURE_2D,l);let u=i.flipY===void 0?c:!!i.flipY,d=!a.isGL2&&!(fr(r)&&fr(o));d&&i.wrap&&i.wrap!=="clamp"&&ye("npot-wrap","Non-power-of-two texture in WebGL1: forcing wrap to clamp.");let f=d?e.CLAMP_TO_EDGE:Qt(e,i.wrap),m=!!i.mipmap&&!s&&!d,b=en(e,i.filter),g=m?i.filter==="nearest"?e.NEAREST_MIPMAP_NEAREST:e.LINEAR_MIPMAP_LINEAR:b;e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,g),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,b),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,f),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,f);let x=()=>{e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,u),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!!i.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1)};return x(),m&&e.generateMipmap(e.TEXTURE_2D),e.bindTexture(e.TEXTURE_2D,null),{texId:t.add(l,"texture2D"),width:r,height:o,source:n,update:s?()=>{n.readyState!==void 0&&n.readyState<2||(e.bindTexture(e.TEXTURE_2D,l),x(),e.bindTexture(e.TEXTURE_2D,null))}:()=>{}}}function xi(e,t,n,r={},o={}){return new Promise((i,a)=>{let s=new Image;s.crossOrigin=r.crossOrigin===void 0?"anonymous":r.crossOrigin,s.onload=()=>i(gt(e,t,s,s.naturalWidth,s.naturalHeight,r,o)),s.onerror=()=>a(new Error(`Failed to load image "${n}"`)),s.src=n})}var gi=["+X","-X","+Y","-Y","+Z","-Z"];function yi(e,t,n,r={}){return new Promise((o,i)=>{if(!Array.isArray(n)||n.length!==6)return i(new Error("cubemap needs an array of 6 URLs"));let a=e.createTexture();e.bindTexture(e.TEXTURE_CUBE_MAP,a);let s=Qt(e,r.wrap),c=en(e,r.filter);e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MIN_FILTER,c),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MAG_FILTER,c),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_S,s),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_T,s);let l=[e.TEXTURE_CUBE_MAP_POSITIVE_X,e.TEXTURE_CUBE_MAP_NEGATIVE_X,e.TEXTURE_CUBE_MAP_POSITIVE_Y,e.TEXTURE_CUBE_MAP_NEGATIVE_Y,e.TEXTURE_CUBE_MAP_POSITIVE_Z,e.TEXTURE_CUBE_MAP_NEGATIVE_Z],u=0,d=0,f=0,m=!1;n.forEach((b,g)=>{let x=new Image;x.crossOrigin="anonymous",x.onload=()=>{m||(d||(d=x.width,f=x.height),e.bindTexture(e.TEXTURE_CUBE_MAP,a),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.texImage2D(l[g],0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,x),++u===6&&(r.mipmap&&e.generateMipmap(e.TEXTURE_CUBE_MAP),e.bindTexture(e.TEXTURE_CUBE_MAP,null),o({texId:t.add(a,"textureCube"),width:d,height:f,cubemap:!0,update(){}})))},x.onerror=()=>{m||(m=!0,e.deleteTexture(a),i(new Error(`Failed to load cubemap face ${gi[g]}: "${b}"`)))},x.src=b})})}function Ei(e){let t=e.play&&e.play();t&&t.catch&&t.catch(()=>{let n=()=>{e.play().catch(()=>{})};window.addEventListener("pointerdown",n,{once:!0}),window.addEventListener("keydown",n,{once:!0})})}function vi(e,t,n,r={},o={}){return new Promise((i,a)=>{let s=document.createElement("video");Object.assign(s,{src:n,crossOrigin:"anonymous",loop:r.loop!==!1,muted:r.muted!==!1,playsInline:!0,autoplay:!0}),s.addEventListener("error",()=>a(new Error(`Failed to load video "${n}"`)),{once:!0}),s.addEventListener("canplay",()=>{Ei(s);let c=gt(e,t,s,s.videoWidth,s.videoHeight,{...r,flipY:r.flipY===void 0?!0:r.flipY},o,{dynamic:!0});c.getTime=()=>s.currentTime,c.media=s,c.dispose=()=>{s.pause(),s.removeAttribute("src"),s.load()},i(c)},{once:!0}),s.load()})}function _i(e,t,n={},r={}){let o=typeof n.camera=="object"?n.camera:{facingMode:"user"};return navigator.mediaDevices.getUserMedia({video:o,audio:!1}).then(i=>new Promise(a=>{let s=document.createElement("video");Object.assign(s,{srcObject:i,muted:!0,playsInline:!0,autoplay:!0}),s.addEventListener("loadedmetadata",()=>{s.play().catch(()=>{});let c=gt(e,t,s,s.videoWidth,s.videoHeight,{...n,flipY:n.flipY===void 0?!0:n.flipY},r,{dynamic:!0});c.media=s,c.dispose=()=>{s.pause(),i.getTracks().forEach(l=>l.stop())},a(c)},{once:!0})}))}function pr(e,t,n,{mic:r=!1}={}){let o=n.layout==="spectrogram",i=n.fftSize||(o?1024:512),a=window.AudioContext||window.webkitAudioContext;return new Promise((s,c)=>{var l;let u=new a,d=u.createAnalyser();d.fftSize=i,d.smoothingTimeConstant=(l=n.smoothing)!=null?l:.8;let f=d.frequencyBinCount,m=new Uint8Array(i),b=o?f:2,g=o?3:1,x=new Uint8Array(f*b*g),y=o?new Uint8Array(f):null,h=null;o&&(h=u.createAnalyser(),h.fftSize=i,h.smoothingTimeConstant=0);let E=e.createTexture(),p=o?e.RGB:e.LUMINANCE,_=()=>{e.bindTexture(e.TEXTURE_2D,E),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.pixelStorei(e.UNPACK_ALIGNMENT,1),e.texImage2D(e.TEXTURE_2D,0,p,f,b,0,p,e.UNSIGNED_BYTE,x),e.bindTexture(e.TEXTURE_2D,null)};e.bindTexture(e.TEXTURE_2D,E),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),_();let T=()=>u.currentTime,R=()=>{},S=()=>{let Z=()=>{u.state==="suspended"&&u.resume()};Z(),window.addEventListener("pointerdown",Z,{once:!0}),window.addEventListener("keydown",Z,{once:!0}),s({texId:t.add(E,"texture2D"),width:f,height:b,analyser:d,context:u,getTime:T,update(){if(o){let ne=f*3;x.copyWithin(ne,0,x.length-ne),d.getByteFrequencyData(y),d.getByteTimeDomainData(m);for(let Y=0;Y<f;Y++)x[Y*3]=y[Y],x[Y*3+1]=m[Y*2];h.getByteFrequencyData(y);for(let Y=0;Y<f;Y++)x[Y*3+2]=y[Y]}else d.getByteFrequencyData(x.subarray(0,f)),d.getByteTimeDomainData(m),x.set(m.subarray(0,f),f);_()},dispose(){R(),u.close&&u.close()}})};if(r){navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(Z=>{let ne=u.createMediaStreamSource(Z);ne.connect(d),h&&ne.connect(h),R=()=>Z.getTracks().forEach(Y=>Y.stop()),S()}).catch(c);return}let O=n.audio||n.audioFFT,L=O instanceof HTMLMediaElement?O:new Audio,X=L!==O;X&&Object.assign(L,{src:O,crossOrigin:"anonymous",loop:n.loop!==!1,autoplay:!0}),T=()=>L.currentTime;let D=()=>{let Z=u.createMediaElementSource(L);if(Z.connect(d),h&&Z.connect(h),d.connect(u.destination),X){let ne=()=>{u.state==="suspended"&&u.resume(),L.play().catch(()=>{})};ne(),window.addEventListener("pointerdown",ne,{once:!0}),window.addEventListener("keydown",ne,{once:!0}),R=()=>{L.pause(),L.removeAttribute("src"),L.load()}}S()};L.readyState>=3?D():(L.addEventListener("canplay",D,{once:!0}),L.addEventListener("error",()=>c(new Error(`Failed to load audio "${O}"`)),{once:!0}),X&&L.load())})}var Ti=e=>typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement,br=e=>typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement;function Si(e,t,n,r={},o={}){let i=n.videoWidth||n.naturalWidth||n.width||1,a=n.videoHeight||n.naturalHeight||n.height||1,s=Ti(n)||br(n),c=r.dynamic===void 0?s:!!r.dynamic,l=gt(e,t,n,i,a,r,o,{dynamic:c,flipDefault:s});if(br(n)&&(l.getTime=()=>n.currentTime),c){let u=l.update;l.update=()=>{l.width=n.videoWidth||n.naturalWidth||n.width||1,l.height=n.videoHeight||n.naturalHeight||n.height||1,u()}}return Promise.resolve(l)}function Ai(e,t,n){let r=t.add(n.texture,n.cube?"textureCube":"texture2D");return t.ref(r),Promise.resolve({texId:r,width:n.width||1,height:n.height||1,cubemap:!!n.cube,update(){}})}function Mi(e,t,n={}){let i=new Uint8Array(768),a=new Uint8Array(256),s=new Uint8Array(256),c=new Uint8Array(256),l=n.keyboard&&typeof n.keyboard=="object"&&n.keyboard.target||window,u=x=>{if(typeof x.keyCode=="number"&&x.keyCode)return x.keyCode&255;let y=x.key||"";return y.length===1?y.toUpperCase().charCodeAt(0)&255:0},d=x=>{let y=u(x);a[y]||(s[y]=255,c[y]=c[y]?0:255),a[y]=255},f=x=>{a[u(x)]=0},m=()=>a.fill(0);l.addEventListener("keydown",d),l.addEventListener("keyup",f),window.addEventListener("blur",m);let b=e.createTexture();e.bindTexture(e.TEXTURE_2D,b),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);let g=()=>{e.bindTexture(e.TEXTURE_2D,b),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.pixelStorei(e.UNPACK_ALIGNMENT,1),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,256,3,0,e.LUMINANCE,e.UNSIGNED_BYTE,i),e.bindTexture(e.TEXTURE_2D,null)};return g(),Promise.resolve({texId:t.add(b,"texture2D"),width:256,height:3,keyboard:!0,update(){i.set(a,0),i.set(s,256),i.set(c,256*2),g(),s.fill(0)},dispose(){l.removeEventListener("keydown",d),l.removeEventListener("keyup",f),window.removeEventListener("blur",m)}})}function Kt(e,t,n,r){return n.texture?Ai(e,t,n):n.element?Si(e,t,n.element,n,r):n.url?xi(e,t,n.url,n,r):n.video?vi(e,t,n.video,n,r):n.camera?_i(e,t,n,r):n.mic?pr(e,t,n,{mic:!0}):n.keyboard?Mi(e,t,n):n.audio||n.audioFFT?pr(e,t,n):n.cubemap?yi(e,t,n.cubemap,n):Promise.reject(new Error("Unrecognised channel: "+JSON.stringify(n)))}function Ri(e){return e?e.cubemap||e.texture&&e.cube?"cube":"2D":null}var Rr=e=>e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"");function ki(e){let t=/^[ \t]*\/\/[ \t]*(?:=+[ \t]*)?(?:Pass[ \t]*:?[ \t]*([^\n=—–-]+?)|(Main)|(Common))[ \t]*(?:[—–-]+[^\n]*)?(?:=+)?[ \t]*$/gim,n=[],r;for(;r=t.exec(e);)n.push({index:r.index,end:r.index+r[0].length,raw:r[0],pass:r[1],main:!!r[2],common:!!r[3]});if(!n.length)return null;let o={common:e.slice(0,n[0].index).trim(),passes:[]};return n.forEach((i,a)=>{let s=e.slice(i.end,a+1<n.length?n[a+1].index:e.length).trim();if(i.common){o.common=(o.common?o.common+`
73
- `:"")+s;return}let c=i.main?"main":String(i.pass).trim(),l=/buffer\s*type\s*:\s*(\w+)/i.exec(i.raw),u=/^(\d+)$/.exec(c);o.passes.push({name:i.main?"main":u?"pass"+u[1]:c.replace(/[^\w]+/g,"_").replace(/^_+|_+$/g,"").toLowerCase(),label:c,main:i.main,src:s,bufferType:l?l[1].toLowerCase():"2d"})}),o.common&&/[{};]/.test(Rr(o.common)),o}function Ci(e){let t={},n=/\[([^\]]*)\]/.exec(e||"");if(!n)return t;for(let r of n[1].toLowerCase().split(/[\s,]+/))r==="nearest"||r==="linear"?t.filter=r:r==="clamp"||r==="repeat"||r==="mirror"?t.wrap=r:r==="mipmap"?t.mipmap=!0:(r==="flipy"||r==="flip")&&(t.flipY=!0);return t}function wr(e){let t={},n={},r=e.split(`
74
- `),o=/^\s*uniform\s+(?:(?:lowp|mediump|highp)\s+)?(\w+)\s+(\w+)(?:\s*\[\s*\d+\s*\])?\s*(?:=\s*([^;]+))?;\s*(?:\/\/(.*))?$/;return{source:r.map(a=>{var s,c,l;let u=o.exec(a);if(!u)return a;let[,d,f,m,b=""]=u,g=b.trim();if(/^sampler/.test(d)){let y=Ui(f,g,d);y&&(n[f]=y)}else{let y={},h=S=>(S.match(/-?\d*\.?\d+(?:e-?\d+)?/g)||[]).map(Number),E=/\[([^\]]*)\]/.exec(g),p=h(g.replace(/\[[^\]]*\]/,"")),_=/vec(\d)/.test(d)?+d.match(/vec(\d)/)[1]:1,T=/^bool/.test(d),R;if(m){let S=h(m);R=_===1?T?/true/.test(m):(s=S[0])!=null?s:0:S.slice(0,_)}else p.length&&(R=_===1?p[0]:p.length>=_?p.slice(0,_):new Array(_).fill(p[0]));if(E){let S=h(E[1]);S.length>=2&&(y.min=S[0],y.max=S[1],S.length>=3&&(y.step=S[2]))}(R!==void 0||E)&&(y.value=R!==void 0?R:_===1?(c=y.min)!=null?c:0:new Array(_).fill((l=y.min)!=null?l:0),t[f]=y)}return m?a.replace(/\s*=\s*[^;]+;/,";"):a}).join(`
75
- `),uniforms:t,samplers:n}}function Ui(e,t,n){let r=Ci(t),o=t.replace(/\[[^\]]*\]/g,"").trim(),i=/^ref:\s*(.+)$/i.exec(o);if(i){let a=i[1].trim(),s;return(s=/^pass\s*(\d+)(?::out(\d+))?$/i.exec(a))?{pass:"pass"+s[1],...r}:(s=/^pass:\s*(\S+)/i.exec(a))?{pass:s[1],...r}:/^main$/i.test(a)?{pass:"main",...r}:(s=/^sampler\s+(\w+)/i.exec(a))?{sameAs:s[1],...r}:null}if(e==="u_audio"||/audio/i.test(e)&&/^(mic|\[CAM\]|\[VIDEO\])?$/i.test(o))return/^https?:|^data:/i.test(o)?{audio:o,layout:"spectrogram"}:{mic:!0,layout:"spectrogram"};if(e==="u_webcam")return{camera:!0,...r};if(e==="u_keyboard")return{keyboard:!0};if(/^(https?:|data:)/i.test(o)){let a=o.split(/\s+/)[0];return/\.(mp4|webm|mov|ogv|m4v)(\?|$)/i.test(a)?{video:a,...r}:/\.(mp3|wav|ogg|m4a|aac|flac)(\?|$)/i.test(a)?{audio:a,layout:"spectrogram"}:n==="samplerCube"?null:{url:a,...r}}return null}function Pi(e){return/\bu_mouse\s*\.\s*[xyzw]*[zw]/.test(Rr(e))}var Li=35678,Ii=35680,Fi=e=>e.filter(t=>!t.cfg.screen);function Oi(e,t,n={}){let r=[],o=Fi(t),i=t.find(c=>c.cfg.screen),a=new Map(t.map(c=>[c.name,c])),s=Object.assign({},e.cfg.annotatedSamplers,e.cfg.samplers);for(let c in e.uniformInfo){let l=e.uniformInfo[c];if(l.type!==Li&&l.type!==Ii||/^iChannel\d$/.test(c))continue;let u=n[c]||s[c]||null,d;if(u&&u.sameAs&&(u=s[u.sameAs]||n[u.sameAs]||null),u||(c==="u_passes"&&l.size>1?u={array:o.slice(0,l.size)}:c==="u_main"?u=i?{pass:i.name}:null:(d=/^u_pass(\d+)$/.exec(c))&&o[+d[1]-1]?u={pass:o[+d[1]-1].name}:c.startsWith("u_")&&a.has(c.slice(2))?u={pass:c.slice(2)}:c==="u_audio"?u={mic:!0,layout:"spectrogram"}:c==="u_keyboard"?u={keyboard:!0}:c==="u_webcam"&&(u={camera:!0})),u&&u.pass!=null&&!a.has(u.pass)){let f=/^pass(\d+)$/.exec(u.pass);f&&o[+f[1]-1]?u={...u,pass:o[+f[1]-1].name}:u.pass==="main"&&i&&(u={...u,pass:i.name})}u&&r.push({name:c,info:l,spec:u})}return r}function Di(e){let t=e.find(n=>n.cfg.screen);return t?e.some(n=>(n.samplers||[]).some(r=>r.spec.pass===t.name)||n.cfg.channels.some(r=>r&&r.pass===t.name)):!1}function Ni(e,{target:t=window,speed:n=1.5,sensitivity:r=.004}={}){let o=[0,0,0],i=-Math.PI/2,a=0,s=new Set,c=!1,l=0,u=0,d=[0,0,-1],f=new Float32Array(16),m=(T,R)=>{let S=T.key.length===1?T.key.toLowerCase():T.key;R?s.add(S):s.delete(S)},b=T=>m(T,!0),g=T=>m(T,!1),x=T=>{T.button===0&&(c=!0,l=T.clientX,u=T.clientY)},y=T=>{c&&(i+=(T.clientX-l)*r,a-=(T.clientY-u)*r,a=Math.max(-1.55,Math.min(1.55,a)),l=T.clientX,u=T.clientY)},h=()=>{c=!1},E=T=>{let R=d,S=-T.deltaY*.002*n;o[0]+=R[0]*S,o[1]+=R[1]*S,o[2]+=R[2]*S},p=()=>s.clear();t.addEventListener("keydown",b),t.addEventListener("keyup",g),e.addEventListener("pointerdown",x),window.addEventListener("pointermove",y),window.addEventListener("pointerup",h),e.addEventListener("wheel",E,{passive:!0}),window.addEventListener("blur",p);function _(){let T=d,R=[0,1,0],S=[T[1]*R[2]-T[2]*R[1],T[2]*R[0]-T[0]*R[2],T[0]*R[1]-T[1]*R[0]],O=Math.hypot(S[0],S[1],S[2])||1;S=S.map(X=>X/O);let L=[S[1]*T[2]-S[2]*T[1],S[2]*T[0]-S[0]*T[2],S[0]*T[1]-S[1]*T[0]];return f.set([S[0],L[0],-T[0],0,S[1],L[1],-T[1],0,S[2],L[2],-T[2],0,-(S[0]*o[0]+S[1]*o[1]+S[2]*o[2]),-(L[0]*o[0]+L[1]*o[1]+L[2]*o[2]),T[0]*o[0]+T[1]*o[1]+T[2]*o[2],1]),{right:S,up:L}}return{pos:o,dir:d,view:f,update(T){d[0]=Math.cos(a)*Math.cos(i),d[1]=Math.sin(a),d[2]=Math.cos(a)*Math.sin(i);let{right:R}=_(),S=n*T*(s.has("Shift")?3:1),O=(L,X)=>{o[0]+=L[0]*X,o[1]+=L[1]*X,o[2]+=L[2]*X};(s.has("w")||s.has("ArrowUp"))&&O(d,S),(s.has("s")||s.has("ArrowDown"))&&O(d,-S),(s.has("d")||s.has("ArrowRight"))&&O(R,S),(s.has("a")||s.has("ArrowLeft"))&&O(R,-S),(s.has("e")||s.has(" "))&&(o[1]+=S),(s.has("q")||s.has("c"))&&(o[1]-=S),_()},dispose(){t.removeEventListener("keydown",b),t.removeEventListener("keyup",g),e.removeEventListener("pointerdown",x),window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",h),e.removeEventListener("wheel",E),window.removeEventListener("blur",p)}}}var kr=Object.create(null),q=(e,...t)=>t.forEach(n=>{kr[n.toLowerCase()]=e});q({kind:"f",n:1},"float","number","f","1f","1fv","float[]","uniform1f","uniform1fv");q({kind:"f",n:2},"vec2","2f","2fv","vec2[]","uniform2f","uniform2fv");q({kind:"f",n:3},"vec3","3f","3fv","vec3[]","uniform3f","uniform3fv");q({kind:"f",n:4},"vec4","4f","4fv","vec4[]","uniform4f","uniform4fv");q({kind:"i",n:1},"int","bool","boolean","i","1i","1iv","int[]","bool[]","uniform1i","uniform1iv");q({kind:"i",n:2},"ivec2","bvec2","2i","2iv","ivec2[]","bvec2[]","uniform2i","uniform2iv");q({kind:"i",n:3},"ivec3","bvec3","3i","3iv","ivec3[]","bvec3[]","uniform3i","uniform3iv");q({kind:"i",n:4},"ivec4","bvec4","4i","4iv","ivec4[]","bvec4[]","uniform4i","uniform4iv");q({kind:"u",n:1},"uint","1ui","1uiv","uint[]");q({kind:"u",n:2},"uvec2","2ui","2uiv","uvec2[]");q({kind:"u",n:3},"uvec3","3ui","3uiv","uvec3[]");q({kind:"u",n:4},"uvec4","4ui","4uiv","uvec4[]");q({kind:"m",n:2},"mat2","matrix2fv","mat2fv","uniformmatrix2fv");q({kind:"m",n:3},"mat3","matrix3fv","mat3fv","uniformmatrix3fv");q({kind:"m",n:4},"mat4","matrix4fv","mat4fv","uniformmatrix4fv");function Bi(e){return typeof e!="string"?null:kr[e.trim().toLowerCase()]||null}var Xi={5126:{kind:"f",n:1},35664:{kind:"f",n:2},35665:{kind:"f",n:3},35666:{kind:"f",n:4},5124:{kind:"i",n:1},35667:{kind:"i",n:2},35668:{kind:"i",n:3},35669:{kind:"i",n:4},35670:{kind:"i",n:1},35671:{kind:"i",n:2},35672:{kind:"i",n:3},35673:{kind:"i",n:4},5125:{kind:"u",n:1},36294:{kind:"u",n:2},36295:{kind:"u",n:3},36296:{kind:"u",n:4},35674:{kind:"m",n:2},35675:{kind:"m",n:3},35676:{kind:"m",n:4}};function ji(e){return Xi[e]}var Gi=5126,xr=35666;function nn(e){return e!=null&&typeof e=="object"&&!Fo(e)&&"value"in e}var gr=e=>typeof e=="boolean"?e?1:0:e;function qt(e,t){return typeof e=="number"||typeof e=="boolean"?new Array(t).fill(gr(e)):ArrayBuffer.isView(e)?e:Array.isArray(e)&&e.some(n=>typeof n=="boolean")?e.map(gr):e}function zi(e,t,n,r,o){let i=n.n;switch(n.kind){case"f":return i===1&&typeof r=="number"?e.uniform1f(t,r):e["uniform"+i+"fv"](t,qt(r,i));case"i":return i===1&&(typeof r=="number"||typeof r=="boolean")?e.uniform1i(t,+r):e["uniform"+i+"iv"](t,qt(r,i));case"u":return i===1&&typeof r=="number"?e.uniform1ui(t,r):e["uniform"+i+"uiv"](t,qt(r,i));case"m":return e["uniformMatrix"+i+"fv"](t,!!o,r)}}function yr(e,t,n,{strict:r=!1,warnMissing:o=!1,label:i=""}={}){if(n)for(let a in n){let s=n[a],c=nn(s)?s:null,l=c?c.value:s;if(l==null)continue;let u=t[a];if(!u||!u.loc){if(r)throw new H("Unknown uniform: "+a);o&&ye("missing-uniform:"+i+":"+a,`Uniform "${a}" not found in ${i?`pass "${i}"`:"shader"} (misspelled, undeclared, or optimized out).`);continue}let d;if(c&&c.type!=null){if(d=Bi(c.type),!d){if(r)throw new H("Unknown uniform type: "+c.type+" for "+a);ye("bad-type:"+a,"Unknown uniform type",c.type,a);continue}}else if(d=ji(u.type),!d)continue;zi(e,u.loc,d,l,c&&c.transpose)}}function Hi(e,t,n={}){let r=n.target==="canvas"?e:n.target&&typeof n.target=="object"?n.target:window,o=+n.smooth||0,i={x:0,y:0,down:!1,over:!1,dragX:0,dragY:0,wheel:0},a={x:0,y:0,clickX:0,clickY:0,down:!1,over:!1,uvX:0,uvY:0,dragX:0,dragY:0,wheel:0,clicked:!1},s=!1,c=0,l=0,u=!1;function d(){let E=e.getBoundingClientRect(),p=t?t():"fill";if(!E.width||!E.height||p!=="contain"&&p!=="cover")return E;let _=e.width/e.height,T=E.width/E.height,R,S;return T>_==(p==="contain")?(S=E.height,R=S*_):(R=E.width,S=R/_),{left:E.left+(E.width-R)/2,top:E.top+(E.height-S)/2,width:R,height:S,bottom:0,right:0}}function f(E,p){let _=d();return!_.width||!_.height?[0,0]:[(E-_.left)*(e.width/_.width),(_.top+_.height-p)*(e.height/_.height)]}let m=(E,p)=>{let[_,T]=f(E,p);return[_/e.width,T/e.height]},b=E=>{let[p,_]=f(E.clientX,E.clientY);i.down&&(i.dragX+=p-c,i.dragY+=_-l),c=p,l=_,i.x=p,i.y=_,i.over=p>=0&&_>=0&&p<=e.width&&_<=e.height,u||(u=!0,a.x=p,a.y=_)},g=E=>{E.button!==void 0&&E.button!==0||(b(E),!(r===window&&!i.over)&&(i.down=!0,a.down=!0,s=!0,c=i.x,l=i.y,a.clickX=i.x,a.clickY=i.y,o||(a.x=i.x,a.y=i.y)))},x=()=>{i.down=!1,a.down=!1},y=()=>{i.over=!1},h=E=>{i.wheel+=-E.deltaY*.002};return n.touch!==!1&&r===e&&(e.style.touchAction="none"),r.addEventListener("pointermove",b,{passive:!0}),r.addEventListener("pointerdown",g,{passive:!0}),window.addEventListener("pointerup",x,{passive:!0}),window.addEventListener("pointercancel",x,{passive:!0}),r.addEventListener("pointerleave",y,{passive:!0}),r.addEventListener("wheel",h,{passive:!0}),{state:a,toShader:f,toUV:m,update(){if(o>0&&o<1){let E=1-Math.pow(1-o,1);a.x+=(i.x-a.x)*E,a.y+=(i.y-a.y)*E}else a.x=i.x,a.y=i.y;a.over=i.over,a.clicked=s,s=!1,a.dragX=i.dragX,a.dragY=i.dragY,a.wheel=i.wheel,a.uvX=e.width?a.x/e.width:0,a.uvY=e.height?a.y/e.height:0},dispose(){r.removeEventListener("pointermove",b),r.removeEventListener("pointerdown",g),window.removeEventListener("pointerup",x),window.removeEventListener("pointercancel",x),r.removeEventListener("pointerleave",y),r.removeEventListener("wheel",h)}}}function Wi(e){if(!e)return 0;if(typeof e=="number")return e;if(Array.isArray(e))return e[0]/e[1];if(typeof e=="string"){let t=e.split(/[:/x]/).map(Number);return t.length===2&&t[1]?t[0]/t[1]:Number(e)||0}return 0}function Vi(e={},t=!0){var n,r,o,i,a,s;let c=(n=e.size)!=null?n:e.sizing,l={mode:t?"canvas":"window",width:0,height:0,aspect:Wi(e.aspect),fit:e.fit||"contain",pixelRatio:(o=(r=e.pixelRatio)!=null?r:e.dpr)!=null?o:"auto",maxPixelRatio:(i=e.maxPixelRatio)!=null?i:2,scale:(s=(a=e.scale)!=null?a:e.renderScale)!=null?s:1};return Array.isArray(c)?(l.mode="fixed",l.width=c[0],l.height=c[1]):typeof c=="string"?l.mode=c==="screen"||c==="fullscreen"?"window":c==="element"?"canvas":c:c&&typeof c=="object"&&(l.mode="fixed",l.width=c.width,l.height=c.height,c.fit&&(l.fit=c.fit)),l.mode==="fixed"&&(l.aspect=l.width/l.height),l}function Yi(e,t={},n=!0){let r=Vi(t,n),o=()=>r.pixelRatio==="auto"?Math.min(window.devicePixelRatio||1,r.maxPixelRatio):Number(r.pixelRatio)||1,i=!1;function a(){return r.mode==="window"?{w:window.innerWidth,h:window.innerHeight}:{w:e.clientWidth||window.innerWidth,h:e.clientHeight||window.innerHeight}}function s(){if(r.mode==="fixed")return{w:r.width,h:r.height};let l=a(),u=o()*r.scale,d=l.w,f=l.h;return r.aspect&&(d/f>r.aspect?d=f*r.aspect:f=d/r.aspect),{w:d*u,h:f*u}}function c(){i||(i=!0,r.mode==="window"&&(e.style.cssText+=";display:block;position:fixed;left:0;top:0;width:100%;height:100%;"),(r.mode==="fixed"||r.aspect)&&(e.style.objectFit=r.fit))}return{cfg:r,fit:()=>r.mode==="fixed"||r.aspect?r.fit:"fill",setFixed(l,u){r.mode="fixed",r.width=l,r.height=u,r.aspect=l/u,i=!1},update(){c();let l=s(),u=Math.max(1,Math.round(l.w)),d=Math.max(1,Math.round(l.h));return e.width===u&&e.height===d?!1:(e.width=u,e.height=d,!0)},observe(l){let u=!1,d=()=>{u||(u=!0,requestAnimationFrame(()=>{u=!1,l()}))};window.addEventListener("resize",d);let f=null;return r.mode==="canvas"&&typeof ResizeObserver<"u"&&(f=new ResizeObserver(d),f.observe(e)),()=>{window.removeEventListener("resize",d),f&&f.disconnect()}}}}function $i(e,{enabled:t=!0,margin:n="100px",onChange:r}={}){let o=typeof document>"u"?!0:!document.hidden,i=!0,a=()=>r&&r(o&&i),s=()=>{o=!document.hidden,a()},c=null;return t&&(document.addEventListener("visibilitychange",s),typeof IntersectionObserver<"u"&&(c=new IntersectionObserver(l=>{for(let u of l)i=u.isIntersecting;a()},{rootMargin:n}),c.observe(e))),{get visible(){return o&&i},dispose(){t&&document.removeEventListener("visibilitychange",s),c&&c.disconnect()}}}var Ki={font:'"Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif',mono:'"Geist Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace',bg:"#1f1f1f",bgAlt:"#181818",raised:"#2a2d2e",hover:"#37373d",border:"#3c3c3c",text:"#cccccc",textStrong:"#ececec",label:"#9d9d9d",accent:"#4daafc",number:"#4daafc",string:"#d1977f",red:"#e46962",redSoft:"#4e3534",redText:"#f9dedc",radius:"8px",shadow:"0 1px 0 rgba(255,255,255,.03) inset, 0 16px 40px -16px rgba(0,0,0,.7), 0 4px 14px rgba(0,0,0,.3)"};function Cr(e){return Object.assign({},Ki,e&&typeof e=="object"?e:null)}function Er({visible:e=!1,key:t="F1",position:n="top-left",theme:r}={}){let o=Cr(r),i=document.createElement("div"),[a,s]=n.split("-");i.style.cssText=`position:fixed;${a==="bottom"?"bottom":"top"}:12px;${s==="right"?"right":"left"}:12px;z-index:2147483647;min-width:168px;padding:8px 10px;border:1px solid ${o.border};border-radius:${o.radius};background:${o.bg}e6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:${o.shadow};color:${o.text};font:12px/1.5 ${o.mono};pointer-events:none;display:none`,document.body.appendChild(i);let c=(y,h)=>`<div style="display:flex;justify-content:space-between;gap:14px"><span style="color:${o.label}">${y}</span><span style="color:${o.textStrong}">${h}</span></div>`,l=!1,u=0,d=0,f=0,m=0;function b(y=!0){l=!!y,i.style.display=l?"block":"none",u=d=f=0}let g=()=>b(!l),x=y=>{y.key===t&&(y.preventDefault(),g())};return t&&window.addEventListener("keydown",x),b(e),{show:b,toggle:g,isVisible:()=>l,update(y){if(!l)return;u+=y.rawDt,d+=y.cpuMs,f++;let h=performance.now();if(h-m<250)return;m=h;let E=u/f*1e3;i.innerHTML=`<div style="display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px"><b style="color:${o.accent};font-size:16px;font-weight:600">${(1e3/E).toFixed(0)}<span style="font-size:11px;color:${o.label};font-weight:400"> fps</span></b><span style="color:${o.label}">${E.toFixed(1)} ms</span></div>`+c("cpu",(d/f).toFixed(2)+" ms")+c("frame",y.frame)+c("time",y.time.toFixed(2)+" s")+c("size",`${y.width}\xD7${y.height}`)+c("passes",y.passes),u=d=f=0},dispose(){t&&window.removeEventListener("keydown",x),i.remove()}}}function qi(e,t){let n=Cr(t),r=null;function o(){if(!r)return;let a=e.getBoundingClientRect();Object.assign(r.style,{left:a.left+"px",top:a.top+"px",width:a.width+"px",height:a.height+"px"})}let i=a=>String(a).replace(/&/g,"&amp;").replace(/</g,"&lt;");return{show(a){r||(r=document.createElement("div"),r.style.cssText=`position:fixed;z-index:2147483646;box-sizing:border-box;overflow:auto;padding:16px;background:${n.bgAlt}f2;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:${n.text};font:13px/1.55 ${n.font}`,document.body.appendChild(r),window.addEventListener("resize",o));let s=a.errors||[],c=i(a.message.split(`
76
- `)[0]),l="";s.length?l=s.map(u=>`<div style="display:grid;grid-template-columns:auto 1fr;gap:4px 12px;padding:10px 12px;border:1px solid ${n.border};border-radius:${n.radius};background:${n.bg};margin-bottom:8px"><span style="color:${n.red};font-family:${n.mono};font-size:12px">line ${u.line}</span><span style="color:${n.textStrong}">${i(u.message)}</span><span></span><code style="color:${n.label};font-family:${n.mono};font-size:12px;white-space:pre-wrap">${i(u.source.trim())}</code></div>`).join(""):a.log&&(l=`<pre style="margin:0;padding:10px 12px;border:1px solid ${n.border};border-radius:${n.radius};background:${n.bg};color:${n.label};font:12px/1.5 ${n.mono};white-space:pre-wrap">${i(a.log)}</pre>`),r.innerHTML=`<div style="display:flex;align-items:center;gap:10px;margin-bottom:12px"><span style="display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:11px;background:${n.redSoft};color:${n.redText};font-size:11.5px;font-weight:500">Shader error</span><b style="color:${n.textStrong};font-weight:600">${c}</b></div>`+l,r.style.display="block",o()},hide(){r&&(r.style.display="none")},dispose(){r&&(r.remove(),window.removeEventListener("resize",o),r=null)}}}function Ji(e,t){function n(a="image/png",s){return t(),e.toDataURL(a,s)}function r(a="image/png",s){return t(),new Promise((c,l)=>e.toBlob(u=>u?c(u):l(new Error("toBlob failed")),a,s))}async function o(a="shadermate.png",s,c){s||(s=/\.jpe?g$/i.test(a)?"image/jpeg":/\.webp$/i.test(a)?"image/webp":"image/png");let l=await r(s,c);vr(l,a)}function i({fps:a=60,mimeType:s,bitsPerSecond:c=8e6,duration:l=0,download:u}={}){if(typeof MediaRecorder>"u"||!e.captureStream)throw new Error("MediaRecorder not supported");let d=e.captureStream(a),f=s||["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm","video/mp4"].find(y=>MediaRecorder.isTypeSupported(y))||"",m=new MediaRecorder(d,{mimeType:f||void 0,videoBitsPerSecond:c}),b=[];m.ondataavailable=y=>{y.data.size&&b.push(y.data)};let g=new Promise(y=>{m.onstop=()=>y(new Blob(b,{type:m.mimeType}))});m.start(100);let x={recorder:m,stop(){return m.state!=="inactive"&&m.stop(),d.getTracks().forEach(y=>y.stop()),g},done:g};if(l>0){let y=new Promise(h=>setTimeout(()=>h(x.stop()),l));return u?y.then(h=>(vr(h,typeof u=="string"?u:"shadermate.webm"),h)):y}return x}return{screenshot:n,toBlob:r,download:o,record:i}}function vr(e,t){let n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function Zi(e,t){var n;if(typeof e=="string"||Array.isArray(e))return{...t||{},passes:e};if(e&&typeof e=="object"&&(e.shader!=null||e.passes!=null||e.src!=null)){let r={...e};return r.passes==null?r.passes={src:(n=r.shader)!=null?n:r.src,uniforms:r.passUniforms,channels:r.channels,pingpong:r.pingpong,float:r.float}:r.channels!=null&&console.warn("[ShaderMate] `channels` only applies to the single-shader form; put channels on each pass instead."),r}throw new H("createShader: pass a shader string, an array of passes, or { shader | passes, ...options }")}function Qi(e){if(e&&typeof e=="object"&&typeof e.getContext=="function")return{canvas:e,given:!0};if(typeof e=="string"){let n=document.getElementById(e);if(!n)try{n=document.querySelector(e)}catch{}if(!n)throw new H(`Canvas not found: "${e}"`);return{canvas:n,given:!0}}let t=document.getElementById(ar);return t?{canvas:t,given:!0}:(t=document.createElement("canvas"),t.id=ar,(document.body||document.documentElement).appendChild(t),{canvas:t,given:!1})}function xt(e,t,n){let r=e[t];nn(r)?r.value=n:e[t]=n}var Jt=(e,t)=>nn(e[t])?e[t].value:e[t];function Ur(e,t){var n,r,o;if(!Zt)throw new H("ShaderMate needs a browser environment (window/document).");let i=Zi(e,t),a=i.autoSetup!==!1,s=Object.assign({},a?Mr:bi,i.inject),c=cr(i.defines),l=typeof i.common=="string"?i.common:"",u=i.dialect||"auto",d=i.samplers||{},f=i.uniforms||{},m=i.includes||{},b=!!i.strictUniforms,g=i.warnMissingUniforms!==!1,x=i.showExpandedOnError!==!1,y=i.errorOverlay===void 0||i.errorOverlay==="auto"?Do():!!i.errorOverlay,h,E,p;i.gl?(p=i.gl,h=p.canvas,E=!0):({canvas:h,given:E}=Qi(i.canvas),p=Yo(h,i));let _=Vo(p),T=$o(p,_),R={isGL2:_,ext:T},S=new No(p),O=!!(_||T.OES_standard_derivatives),L=Oo((n=i.background)!=null?n:i.clearColor)||[0,0,0,0];p.clearColor(L[0],L[1],L[2],L[3]);let X=Bo(),{emit:D,on:Z,off:ne,once:Y}=X,Ke=Ko(p),Fe=Yi(h,i,E),Ee=Hi(h,Fe.fit,i.pointer===!1?{target:"canvas",smooth:0}:typeof i.pointer=="object"?i.pointer:{}),Oe=Xo(),ve=y?qi(h,i.theme):null,ae=null;i.stats&&(ae=Er({visible:i.stats===!0||i.stats==="visible",key:i.statsKey===void 0?"F1":i.statsKey,position:i.statsPosition,theme:i.theme}));let B=[],ee=new Map,_e=[],se=!1,me=!1,Te=null,wn=()=>{},be=performance.now(),xn=0,De=0,ue=i.time||0,W=i.autoplay!==!1&&!i.startPaused&&!i.paused,Ut=(r=i.timeScale)!=null?r:1,qe=i.fixedDelta||0,Je=i.maxFps||i.fps||0,Se=i.loop||0,co=(o=i.maxDelta)!=null?o:.1,gn=!0,Pt=null,yn=60,Ne=[],re=null,Ae=null,Me=!1,fo=$i(h,{enabled:i.pauseWhenHidden!==!1,onChange:w=>{gn=w,w&&(be=performance.now()),D("visibility",w)}});function Lt(w){Pt=w,ve&&ve.show(w),D("error",w),i.onError&&i.onError(w)}function En(){Pt=null,ve&&ve.hide()}let It=async w=>{let v=await fetch(w);if(!v.ok)throw new H(`Failed to fetch ${w}: ${v.status} ${v.statusText}`);return v.text()},uo=async w=>m[w]!=null?m[w]:It(w),Ze=null;async function lo(){if(Ze!==null)return Ze;if(!l)return Ze="";let w=$t(l)?l:await It(l),v=wr(w);for(let A in v.uniforms)A in f||(f[A]=v.uniforms[A]);return Object.assign(d,v.samplers,d),Ze=v.source}async function vn(w,v,A=_e){let k=$t(v)?v:await It(v),C=await lo(),M=wr(k);k=M.source;for(let te in M.uniforms)!(te in w.uniforms)&&!(te in f)&&(w.uniforms[te]=M.uniforms[te]);w.annotatedSamplers=M.samplers;let U=C?C+`
72
+ `+c;return f&&(m+=t?Qo:ei),m}function gt(e,t,n,r,o,i={},a={},{dynamic:s=!1,flipDefault:c=!1}={}){let l=e.createTexture();e.bindTexture(e.TEXTURE_2D,l);let u=i.flipY===void 0?c:!!i.flipY,d=!a.isGL2&&!(fr(r)&&fr(o));d&&i.wrap&&i.wrap!=="clamp"&&ye("npot-wrap","Non-power-of-two texture in WebGL1: forcing wrap to clamp.");let f=d?e.CLAMP_TO_EDGE:Qt(e,i.wrap),m=!!i.mipmap&&!s&&!d,b=en(e,i.filter),g=m?i.filter==="nearest"?e.NEAREST_MIPMAP_NEAREST:e.LINEAR_MIPMAP_LINEAR:b;e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,g),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,b),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,f),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,f);let x=()=>{e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,u),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!!i.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1)};return x(),m&&e.generateMipmap(e.TEXTURE_2D),e.bindTexture(e.TEXTURE_2D,null),{texId:t.add(l,"texture2D"),width:r,height:o,source:n,update:s?()=>{n.readyState!==void 0&&n.readyState<2||(e.bindTexture(e.TEXTURE_2D,l),x(),e.bindTexture(e.TEXTURE_2D,null))}:()=>{}}}function xi(e,t,n,r={},o={}){return new Promise((i,a)=>{let s=new Image;s.crossOrigin=r.crossOrigin===void 0?"anonymous":r.crossOrigin,s.onload=()=>i(gt(e,t,s,s.naturalWidth,s.naturalHeight,r,o)),s.onerror=()=>a(new Error(`Failed to load image "${n}"`)),s.src=n})}var gi=["+X","-X","+Y","-Y","+Z","-Z"];function yi(e,t,n,r={}){return new Promise((o,i)=>{if(!Array.isArray(n)||n.length!==6)return i(new Error("cubemap needs an array of 6 URLs"));let a=e.createTexture();e.bindTexture(e.TEXTURE_CUBE_MAP,a);let s=Qt(e,r.wrap),c=en(e,r.filter);e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MIN_FILTER,c),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MAG_FILTER,c),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_S,s),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_T,s);let l=[e.TEXTURE_CUBE_MAP_POSITIVE_X,e.TEXTURE_CUBE_MAP_NEGATIVE_X,e.TEXTURE_CUBE_MAP_POSITIVE_Y,e.TEXTURE_CUBE_MAP_NEGATIVE_Y,e.TEXTURE_CUBE_MAP_POSITIVE_Z,e.TEXTURE_CUBE_MAP_NEGATIVE_Z],u=0,d=0,f=0,m=!1;n.forEach((b,g)=>{let x=new Image;x.crossOrigin="anonymous",x.onload=()=>{m||(d||(d=x.width,f=x.height),e.bindTexture(e.TEXTURE_CUBE_MAP,a),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.texImage2D(l[g],0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,x),++u===6&&(r.mipmap&&e.generateMipmap(e.TEXTURE_CUBE_MAP),e.bindTexture(e.TEXTURE_CUBE_MAP,null),o({texId:t.add(a,"textureCube"),width:d,height:f,cubemap:!0,update(){}})))},x.onerror=()=>{m||(m=!0,e.deleteTexture(a),i(new Error(`Failed to load cubemap face ${gi[g]}: "${b}"`)))},x.src=b})})}function Ei(e){let t=e.play&&e.play();t&&t.catch&&t.catch(()=>{let n=()=>{e.play().catch(()=>{})};window.addEventListener("pointerdown",n,{once:!0}),window.addEventListener("keydown",n,{once:!0})})}function vi(e,t,n,r={},o={}){return new Promise((i,a)=>{let s=document.createElement("video");Object.assign(s,{src:n,crossOrigin:"anonymous",loop:r.loop!==!1,muted:r.muted!==!1,playsInline:!0,autoplay:!0}),s.addEventListener("error",()=>a(new Error(`Failed to load video "${n}"`)),{once:!0}),s.addEventListener("canplay",()=>{Ei(s);let c=gt(e,t,s,s.videoWidth,s.videoHeight,{...r,flipY:r.flipY===void 0?!0:r.flipY},o,{dynamic:!0});c.getTime=()=>s.currentTime,c.media=s,c.dispose=()=>{s.pause(),s.removeAttribute("src"),s.load()},i(c)},{once:!0}),s.load()})}function _i(e,t,n={},r={}){let o=typeof n.camera=="object"?n.camera:{facingMode:"user"};return navigator.mediaDevices.getUserMedia({video:o,audio:!1}).then(i=>new Promise(a=>{let s=document.createElement("video");Object.assign(s,{srcObject:i,muted:!0,playsInline:!0,autoplay:!0}),s.addEventListener("loadedmetadata",()=>{s.play().catch(()=>{});let c=gt(e,t,s,s.videoWidth,s.videoHeight,{...n,flipY:n.flipY===void 0?!0:n.flipY},r,{dynamic:!0});c.media=s,c.dispose=()=>{s.pause(),i.getTracks().forEach(l=>l.stop())},a(c)},{once:!0})}))}function pr(e,t,n,{mic:r=!1}={}){let o=n.layout==="spectrogram",i=n.fftSize||(o?1024:512),a=window.AudioContext||window.webkitAudioContext;return new Promise((s,c)=>{var l;let u=new a,d=u.createAnalyser();d.fftSize=i,d.smoothingTimeConstant=(l=n.smoothing)!=null?l:.8;let f=d.frequencyBinCount,m=new Uint8Array(i),b=o?f:2,g=o?3:1,x=new Uint8Array(f*b*g),y=o?new Uint8Array(f):null,h=null;o&&(h=u.createAnalyser(),h.fftSize=i,h.smoothingTimeConstant=0);let E=e.createTexture(),p=o?e.RGB:e.LUMINANCE,_=()=>{e.bindTexture(e.TEXTURE_2D,E),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.pixelStorei(e.UNPACK_ALIGNMENT,1),e.texImage2D(e.TEXTURE_2D,0,p,f,b,0,p,e.UNSIGNED_BYTE,x),e.bindTexture(e.TEXTURE_2D,null)};e.bindTexture(e.TEXTURE_2D,E),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),_();let T=()=>u.currentTime,M=()=>{},S=()=>{let Z=()=>{u.state==="suspended"&&u.resume()};Z(),window.addEventListener("pointerdown",Z,{once:!0}),window.addEventListener("keydown",Z,{once:!0}),s({texId:t.add(E,"texture2D"),width:f,height:b,analyser:d,context:u,getTime:T,update(){if(o){let ne=f*3;x.copyWithin(ne,0,x.length-ne),d.getByteFrequencyData(y),d.getByteTimeDomainData(m);for(let Y=0;Y<f;Y++)x[Y*3]=y[Y],x[Y*3+1]=m[Y*2];h.getByteFrequencyData(y);for(let Y=0;Y<f;Y++)x[Y*3+2]=y[Y]}else d.getByteFrequencyData(x.subarray(0,f)),d.getByteTimeDomainData(m),x.set(m.subarray(0,f),f);_()},dispose(){M(),u.close&&u.close()}})};if(r){navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(Z=>{let ne=u.createMediaStreamSource(Z);ne.connect(d),h&&ne.connect(h),M=()=>Z.getTracks().forEach(Y=>Y.stop()),S()}).catch(c);return}let O=n.audio||n.audioFFT,L=O instanceof HTMLMediaElement?O:new Audio,X=L!==O;X&&Object.assign(L,{src:O,crossOrigin:"anonymous",loop:n.loop!==!1,autoplay:!0}),T=()=>L.currentTime;let D=()=>{let Z=u.createMediaElementSource(L);if(Z.connect(d),h&&Z.connect(h),d.connect(u.destination),X){let ne=()=>{u.state==="suspended"&&u.resume(),L.play().catch(()=>{})};ne(),window.addEventListener("pointerdown",ne,{once:!0}),window.addEventListener("keydown",ne,{once:!0}),M=()=>{L.pause(),L.removeAttribute("src"),L.load()}}S()};L.readyState>=3?D():(L.addEventListener("canplay",D,{once:!0}),L.addEventListener("error",()=>c(new Error(`Failed to load audio "${O}"`)),{once:!0}),X&&L.load())})}var Ti=e=>typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement,br=e=>typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement;function Si(e,t,n,r={},o={}){let i=n.videoWidth||n.naturalWidth||n.width||1,a=n.videoHeight||n.naturalHeight||n.height||1,s=Ti(n)||br(n),c=r.dynamic===void 0?s:!!r.dynamic,l=gt(e,t,n,i,a,r,o,{dynamic:c,flipDefault:s});if(br(n)&&(l.getTime=()=>n.currentTime),c){let u=l.update;l.update=()=>{l.width=n.videoWidth||n.naturalWidth||n.width||1,l.height=n.videoHeight||n.naturalHeight||n.height||1,u()}}return Promise.resolve(l)}function Ai(e,t,n){let r=t.add(n.texture,n.cube?"textureCube":"texture2D");return t.ref(r),Promise.resolve({texId:r,width:n.width||1,height:n.height||1,cubemap:!!n.cube,update(){}})}function Ri(e,t,n={}){let i=new Uint8Array(768),a=new Uint8Array(256),s=new Uint8Array(256),c=new Uint8Array(256),l=n.keyboard&&typeof n.keyboard=="object"&&n.keyboard.target||window,u=x=>{if(typeof x.keyCode=="number"&&x.keyCode)return x.keyCode&255;let y=x.key||"";return y.length===1?y.toUpperCase().charCodeAt(0)&255:0},d=x=>{let y=u(x);a[y]||(s[y]=255,c[y]=c[y]?0:255),a[y]=255},f=x=>{a[u(x)]=0},m=()=>a.fill(0);l.addEventListener("keydown",d),l.addEventListener("keyup",f),window.addEventListener("blur",m);let b=e.createTexture();e.bindTexture(e.TEXTURE_2D,b),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);let g=()=>{e.bindTexture(e.TEXTURE_2D,b),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.pixelStorei(e.UNPACK_ALIGNMENT,1),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,256,3,0,e.LUMINANCE,e.UNSIGNED_BYTE,i),e.bindTexture(e.TEXTURE_2D,null)};return g(),Promise.resolve({texId:t.add(b,"texture2D"),width:256,height:3,keyboard:!0,update(){i.set(a,0),i.set(s,256),i.set(c,256*2),g(),s.fill(0)},dispose(){l.removeEventListener("keydown",d),l.removeEventListener("keyup",f),window.removeEventListener("blur",m)}})}function Kt(e,t,n,r){return n.texture?Ai(e,t,n):n.element?Si(e,t,n.element,n,r):n.url?xi(e,t,n.url,n,r):n.video?vi(e,t,n.video,n,r):n.camera?_i(e,t,n,r):n.mic?pr(e,t,n,{mic:!0}):n.keyboard?Ri(e,t,n):n.audio||n.audioFFT?pr(e,t,n):n.cubemap?yi(e,t,n.cubemap,n):Promise.reject(new Error("Unrecognised channel: "+JSON.stringify(n)))}function Mi(e){return e?e.cubemap||e.texture&&e.cube?"cube":"2D":null}var Mr=e=>e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"");function ki(e){let t=/^[ \t]*\/\/[ \t]*(?:=+[ \t]*)?(?:Pass[ \t]*:?[ \t]*([^\n=—–-]+?)|(Main)|(Common))[ \t]*(?:[—–-]+[^\n]*)?(?:=+)?[ \t]*$/gim,n=[],r;for(;r=t.exec(e);)n.push({index:r.index,end:r.index+r[0].length,raw:r[0],pass:r[1],main:!!r[2],common:!!r[3]});if(!n.length)return null;let o={common:e.slice(0,n[0].index).trim(),passes:[]};return n.forEach((i,a)=>{let s=e.slice(i.end,a+1<n.length?n[a+1].index:e.length).trim();if(i.common){o.common=(o.common?o.common+`
73
+ `:"")+s;return}let c=i.main?"main":String(i.pass).trim(),l=/buffer\s*type\s*:\s*(\w+)/i.exec(i.raw),u=/^(\d+)$/.exec(c);o.passes.push({name:i.main?"main":u?"pass"+u[1]:c.replace(/[^\w]+/g,"_").replace(/^_+|_+$/g,"").toLowerCase(),label:c,main:i.main,src:s,bufferType:l?l[1].toLowerCase():"2d"})}),o.common&&/[{};]/.test(Mr(o.common)),o}function Ci(e){let t={},n=/\[([^\]]*)\]/.exec(e||"");if(!n)return t;for(let r of n[1].toLowerCase().split(/[\s,]+/))r==="nearest"||r==="linear"?t.filter=r:r==="clamp"||r==="repeat"||r==="mirror"?t.wrap=r:r==="mipmap"?t.mipmap=!0:(r==="flipy"||r==="flip")&&(t.flipY=!0);return t}function wr(e){let t={},n={},r=e.split(`
74
+ `),o=/^\s*uniform\s+(?:(?:lowp|mediump|highp)\s+)?(\w+)\s+(\w+)(?:\s*\[\s*\d+\s*\])?\s*(?:=\s*([^;]+))?;\s*(?:\/\/(.*))?$/;return{source:r.map(a=>{var s,c,l;let u=o.exec(a);if(!u)return a;let[,d,f,m,b=""]=u,g=b.trim();if(/^sampler/.test(d)){let y=Ui(f,g,d);y&&(n[f]=y)}else{let y={},h=S=>(S.match(/-?\d*\.?\d+(?:e-?\d+)?/g)||[]).map(Number),E=/\[([^\]]*)\]/.exec(g),p=h(g.replace(/\[[^\]]*\]/,"")),_=/vec(\d)/.test(d)?+d.match(/vec(\d)/)[1]:1,T=/^bool/.test(d),M;if(m){let S=h(m);M=_===1?T?/true/.test(m):(s=S[0])!=null?s:0:S.slice(0,_)}else p.length&&(M=_===1?p[0]:p.length>=_?p.slice(0,_):new Array(_).fill(p[0]));if(E){let S=h(E[1]);S.length>=2&&(y.min=S[0],y.max=S[1],S.length>=3&&(y.step=S[2]))}(M!==void 0||E)&&(y.value=M!==void 0?M:_===1?(c=y.min)!=null?c:0:new Array(_).fill((l=y.min)!=null?l:0),t[f]=y)}return m?a.replace(/\s*=\s*[^;]+;/,";"):a}).join(`
75
+ `),uniforms:t,samplers:n}}function Ui(e,t,n){let r=Ci(t),o=t.replace(/\[[^\]]*\]/g,"").trim(),i=/^ref:\s*(.+)$/i.exec(o);if(i){let a=i[1].trim(),s;return(s=/^pass\s*(\d+)(?::out(\d+))?$/i.exec(a))?{pass:"pass"+s[1],...r}:(s=/^pass:\s*(\S+)/i.exec(a))?{pass:s[1],...r}:/^main$/i.test(a)?{pass:"main",...r}:(s=/^sampler\s+(\w+)/i.exec(a))?{sameAs:s[1],...r}:null}if(e==="u_audio"||/audio/i.test(e)&&/^(mic|\[CAM\]|\[VIDEO\])?$/i.test(o))return/^https?:|^data:/i.test(o)?{audio:o,layout:"spectrogram"}:{mic:!0,layout:"spectrogram"};if(e==="u_webcam")return{camera:!0,...r};if(e==="u_keyboard")return{keyboard:!0};if(/^(https?:|data:)/i.test(o)){let a=o.split(/\s+/)[0];return/\.(mp4|webm|mov|ogv|m4v)(\?|$)/i.test(a)?{video:a,...r}:/\.(mp3|wav|ogg|m4a|aac|flac)(\?|$)/i.test(a)?{audio:a,layout:"spectrogram"}:n==="samplerCube"?null:{url:a,...r}}return null}function Pi(e){return/\bu_mouse\s*\.\s*[xyzw]*[zw]/.test(Mr(e))}var Li=35678,Ii=35680,Fi=e=>e.filter(t=>!t.cfg.screen);function Oi(e,t,n={}){let r=[],o=Fi(t),i=t.find(c=>c.cfg.screen),a=new Map(t.map(c=>[c.name,c])),s=Object.assign({},e.cfg.annotatedSamplers,e.cfg.samplers);for(let c in e.uniformInfo){let l=e.uniformInfo[c];if(l.type!==Li&&l.type!==Ii||/^iChannel\d$/.test(c))continue;let u=n[c]||s[c]||null,d;if(u&&u.sameAs&&(u=s[u.sameAs]||n[u.sameAs]||null),u||(c==="u_passes"&&l.size>1?u={array:o.slice(0,l.size)}:c==="u_main"?u=i?{pass:i.name}:null:(d=/^u_pass(\d+)$/.exec(c))&&o[+d[1]-1]?u={pass:o[+d[1]-1].name}:c.startsWith("u_")&&a.has(c.slice(2))?u={pass:c.slice(2)}:c==="u_audio"?u={mic:!0,layout:"spectrogram"}:c==="u_keyboard"?u={keyboard:!0}:c==="u_webcam"&&(u={camera:!0})),u&&u.pass!=null&&!a.has(u.pass)){let f=/^pass(\d+)$/.exec(u.pass);f&&o[+f[1]-1]?u={...u,pass:o[+f[1]-1].name}:u.pass==="main"&&i&&(u={...u,pass:i.name})}u&&r.push({name:c,info:l,spec:u})}return r}function Di(e){let t=e.find(n=>n.cfg.screen);return t?e.some(n=>(n.samplers||[]).some(r=>r.spec.pass===t.name)||n.cfg.channels.some(r=>r&&r.pass===t.name)):!1}function Ni(e,{target:t=window,speed:n=1.5,sensitivity:r=.004}={}){let o=[0,0,0],i=-Math.PI/2,a=0,s=new Set,c=!1,l=0,u=0,d=[0,0,-1],f=new Float32Array(16),m=(T,M)=>{let S=T.key.length===1?T.key.toLowerCase():T.key;M?s.add(S):s.delete(S)},b=T=>m(T,!0),g=T=>m(T,!1),x=T=>{T.button===0&&(c=!0,l=T.clientX,u=T.clientY)},y=T=>{c&&(i+=(T.clientX-l)*r,a-=(T.clientY-u)*r,a=Math.max(-1.55,Math.min(1.55,a)),l=T.clientX,u=T.clientY)},h=()=>{c=!1},E=T=>{let M=d,S=-T.deltaY*.002*n;o[0]+=M[0]*S,o[1]+=M[1]*S,o[2]+=M[2]*S},p=()=>s.clear();t.addEventListener("keydown",b),t.addEventListener("keyup",g),e.addEventListener("pointerdown",x),window.addEventListener("pointermove",y),window.addEventListener("pointerup",h),e.addEventListener("wheel",E,{passive:!0}),window.addEventListener("blur",p);function _(){let T=d,M=[0,1,0],S=[T[1]*M[2]-T[2]*M[1],T[2]*M[0]-T[0]*M[2],T[0]*M[1]-T[1]*M[0]],O=Math.hypot(S[0],S[1],S[2])||1;S=S.map(X=>X/O);let L=[S[1]*T[2]-S[2]*T[1],S[2]*T[0]-S[0]*T[2],S[0]*T[1]-S[1]*T[0]];return f.set([S[0],L[0],-T[0],0,S[1],L[1],-T[1],0,S[2],L[2],-T[2],0,-(S[0]*o[0]+S[1]*o[1]+S[2]*o[2]),-(L[0]*o[0]+L[1]*o[1]+L[2]*o[2]),T[0]*o[0]+T[1]*o[1]+T[2]*o[2],1]),{right:S,up:L}}return{pos:o,dir:d,view:f,update(T){d[0]=Math.cos(a)*Math.cos(i),d[1]=Math.sin(a),d[2]=Math.cos(a)*Math.sin(i);let{right:M}=_(),S=n*T*(s.has("Shift")?3:1),O=(L,X)=>{o[0]+=L[0]*X,o[1]+=L[1]*X,o[2]+=L[2]*X};(s.has("w")||s.has("ArrowUp"))&&O(d,S),(s.has("s")||s.has("ArrowDown"))&&O(d,-S),(s.has("d")||s.has("ArrowRight"))&&O(M,S),(s.has("a")||s.has("ArrowLeft"))&&O(M,-S),(s.has("e")||s.has(" "))&&(o[1]+=S),(s.has("q")||s.has("c"))&&(o[1]-=S),_()},dispose(){t.removeEventListener("keydown",b),t.removeEventListener("keyup",g),e.removeEventListener("pointerdown",x),window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",h),e.removeEventListener("wheel",E),window.removeEventListener("blur",p)}}}var kr=Object.create(null),q=(e,...t)=>t.forEach(n=>{kr[n.toLowerCase()]=e});q({kind:"f",n:1},"float","number","f","1f","1fv","float[]","uniform1f","uniform1fv");q({kind:"f",n:2},"vec2","2f","2fv","vec2[]","uniform2f","uniform2fv");q({kind:"f",n:3},"vec3","3f","3fv","vec3[]","uniform3f","uniform3fv");q({kind:"f",n:4},"vec4","4f","4fv","vec4[]","uniform4f","uniform4fv");q({kind:"i",n:1},"int","bool","boolean","i","1i","1iv","int[]","bool[]","uniform1i","uniform1iv");q({kind:"i",n:2},"ivec2","bvec2","2i","2iv","ivec2[]","bvec2[]","uniform2i","uniform2iv");q({kind:"i",n:3},"ivec3","bvec3","3i","3iv","ivec3[]","bvec3[]","uniform3i","uniform3iv");q({kind:"i",n:4},"ivec4","bvec4","4i","4iv","ivec4[]","bvec4[]","uniform4i","uniform4iv");q({kind:"u",n:1},"uint","1ui","1uiv","uint[]");q({kind:"u",n:2},"uvec2","2ui","2uiv","uvec2[]");q({kind:"u",n:3},"uvec3","3ui","3uiv","uvec3[]");q({kind:"u",n:4},"uvec4","4ui","4uiv","uvec4[]");q({kind:"m",n:2},"mat2","matrix2fv","mat2fv","uniformmatrix2fv");q({kind:"m",n:3},"mat3","matrix3fv","mat3fv","uniformmatrix3fv");q({kind:"m",n:4},"mat4","matrix4fv","mat4fv","uniformmatrix4fv");function Bi(e){return typeof e!="string"?null:kr[e.trim().toLowerCase()]||null}var Xi={5126:{kind:"f",n:1},35664:{kind:"f",n:2},35665:{kind:"f",n:3},35666:{kind:"f",n:4},5124:{kind:"i",n:1},35667:{kind:"i",n:2},35668:{kind:"i",n:3},35669:{kind:"i",n:4},35670:{kind:"i",n:1},35671:{kind:"i",n:2},35672:{kind:"i",n:3},35673:{kind:"i",n:4},5125:{kind:"u",n:1},36294:{kind:"u",n:2},36295:{kind:"u",n:3},36296:{kind:"u",n:4},35674:{kind:"m",n:2},35675:{kind:"m",n:3},35676:{kind:"m",n:4}};function ji(e){return Xi[e]}var Gi=5126,xr=35666;function nn(e){return e!=null&&typeof e=="object"&&!Fo(e)&&"value"in e}var gr=e=>typeof e=="boolean"?e?1:0:e;function qt(e,t){return typeof e=="number"||typeof e=="boolean"?new Array(t).fill(gr(e)):ArrayBuffer.isView(e)?e:Array.isArray(e)&&e.some(n=>typeof n=="boolean")?e.map(gr):e}function zi(e,t,n,r,o){let i=n.n;switch(n.kind){case"f":return i===1&&typeof r=="number"?e.uniform1f(t,r):e["uniform"+i+"fv"](t,qt(r,i));case"i":return i===1&&(typeof r=="number"||typeof r=="boolean")?e.uniform1i(t,+r):e["uniform"+i+"iv"](t,qt(r,i));case"u":return i===1&&typeof r=="number"?e.uniform1ui(t,r):e["uniform"+i+"uiv"](t,qt(r,i));case"m":return e["uniformMatrix"+i+"fv"](t,!!o,r)}}function yr(e,t,n,{strict:r=!1,warnMissing:o=!1,label:i=""}={}){if(n)for(let a in n){let s=n[a],c=nn(s)?s:null,l=c?c.value:s;if(l==null)continue;let u=t[a];if(!u||!u.loc){if(r)throw new H("Unknown uniform: "+a);o&&ye("missing-uniform:"+i+":"+a,`Uniform "${a}" not found in ${i?`pass "${i}"`:"shader"} (misspelled, undeclared, or optimized out).`);continue}let d;if(c&&c.type!=null){if(d=Bi(c.type),!d){if(r)throw new H("Unknown uniform type: "+c.type+" for "+a);ye("bad-type:"+a,"Unknown uniform type",c.type,a);continue}}else if(d=ji(u.type),!d)continue;zi(e,u.loc,d,l,c&&c.transpose)}}function Hi(e,t,n={}){let r=n.target==="canvas"?e:n.target&&typeof n.target=="object"?n.target:window,o=+n.smooth||0,i={x:0,y:0,down:!1,over:!1,dragX:0,dragY:0,wheel:0},a={x:0,y:0,clickX:0,clickY:0,down:!1,over:!1,uvX:0,uvY:0,dragX:0,dragY:0,wheel:0,clicked:!1},s=!1,c=0,l=0,u=!1;function d(){let E=e.getBoundingClientRect(),p=t?t():"fill";if(!E.width||!E.height||p!=="contain"&&p!=="cover")return E;let _=e.width/e.height,T=E.width/E.height,M,S;return T>_==(p==="contain")?(S=E.height,M=S*_):(M=E.width,S=M/_),{left:E.left+(E.width-M)/2,top:E.top+(E.height-S)/2,width:M,height:S,bottom:0,right:0}}function f(E,p){let _=d();return!_.width||!_.height?[0,0]:[(E-_.left)*(e.width/_.width),(_.top+_.height-p)*(e.height/_.height)]}let m=(E,p)=>{let[_,T]=f(E,p);return[_/e.width,T/e.height]},b=E=>{let[p,_]=f(E.clientX,E.clientY);i.down&&(i.dragX+=p-c,i.dragY+=_-l),c=p,l=_,i.x=p,i.y=_,i.over=p>=0&&_>=0&&p<=e.width&&_<=e.height,u||(u=!0,a.x=p,a.y=_)},g=E=>{E.button!==void 0&&E.button!==0||(b(E),!(r===window&&!i.over)&&(i.down=!0,a.down=!0,s=!0,c=i.x,l=i.y,a.clickX=i.x,a.clickY=i.y,o||(a.x=i.x,a.y=i.y)))},x=()=>{i.down=!1,a.down=!1},y=()=>{i.over=!1},h=E=>{i.wheel+=-E.deltaY*.002};return n.touch!==!1&&r===e&&(e.style.touchAction="none"),r.addEventListener("pointermove",b,{passive:!0}),r.addEventListener("pointerdown",g,{passive:!0}),window.addEventListener("pointerup",x,{passive:!0}),window.addEventListener("pointercancel",x,{passive:!0}),r.addEventListener("pointerleave",y,{passive:!0}),r.addEventListener("wheel",h,{passive:!0}),{state:a,toShader:f,toUV:m,update(){if(o>0&&o<1){let E=1-Math.pow(1-o,1);a.x+=(i.x-a.x)*E,a.y+=(i.y-a.y)*E}else a.x=i.x,a.y=i.y;a.over=i.over,a.clicked=s,s=!1,a.dragX=i.dragX,a.dragY=i.dragY,a.wheel=i.wheel,a.uvX=e.width?a.x/e.width:0,a.uvY=e.height?a.y/e.height:0},dispose(){r.removeEventListener("pointermove",b),r.removeEventListener("pointerdown",g),window.removeEventListener("pointerup",x),window.removeEventListener("pointercancel",x),r.removeEventListener("pointerleave",y),r.removeEventListener("wheel",h)}}}function Wi(e){if(!e)return 0;if(typeof e=="number")return e;if(Array.isArray(e))return e[0]/e[1];if(typeof e=="string"){let t=e.split(/[:/x]/).map(Number);return t.length===2&&t[1]?t[0]/t[1]:Number(e)||0}return 0}function Vi(e={},t=!0){var n,r,o,i,a,s;let c=(n=e.size)!=null?n:e.sizing,l={mode:t?"canvas":"window",width:0,height:0,aspect:Wi(e.aspect),fit:e.fit||"contain",pixelRatio:(o=(r=e.pixelRatio)!=null?r:e.dpr)!=null?o:"auto",maxPixelRatio:(i=e.maxPixelRatio)!=null?i:2,scale:(s=(a=e.scale)!=null?a:e.renderScale)!=null?s:1};return Array.isArray(c)?(l.mode="fixed",l.width=c[0],l.height=c[1]):typeof c=="string"?l.mode=c==="screen"||c==="fullscreen"?"window":c==="element"?"canvas":c:c&&typeof c=="object"&&(l.mode="fixed",l.width=c.width,l.height=c.height,c.fit&&(l.fit=c.fit)),l.mode==="fixed"&&(l.aspect=l.width/l.height),l}function Yi(e,t={},n=!0){let r=Vi(t,n),o=()=>r.pixelRatio==="auto"?Math.min(window.devicePixelRatio||1,r.maxPixelRatio):Number(r.pixelRatio)||1,i=!1;function a(){return r.mode==="window"?{w:window.innerWidth,h:window.innerHeight}:{w:e.clientWidth||window.innerWidth,h:e.clientHeight||window.innerHeight}}function s(){if(r.mode==="fixed")return{w:r.width,h:r.height};let l=a(),u=o()*r.scale,d=l.w,f=l.h;return r.aspect&&(d/f>r.aspect?d=f*r.aspect:f=d/r.aspect),{w:d*u,h:f*u}}function c(){i||(i=!0,r.mode==="window"&&(e.style.cssText+=";display:block;position:fixed;left:0;top:0;width:100%;height:100%;"),(r.mode==="fixed"||r.aspect)&&(e.style.objectFit=r.fit))}return{cfg:r,fit:()=>r.mode==="fixed"||r.aspect?r.fit:"fill",setFixed(l,u){r.mode="fixed",r.width=l,r.height=u,r.aspect=l/u,i=!1},update(){c();let l=s(),u=Math.max(1,Math.round(l.w)),d=Math.max(1,Math.round(l.h));return e.width===u&&e.height===d?!1:(e.width=u,e.height=d,!0)},observe(l){let u=!1,d=()=>{u||(u=!0,requestAnimationFrame(()=>{u=!1,l()}))};window.addEventListener("resize",d);let f=null;return r.mode==="canvas"&&typeof ResizeObserver<"u"&&(f=new ResizeObserver(d),f.observe(e)),()=>{window.removeEventListener("resize",d),f&&f.disconnect()}}}}function $i(e,{enabled:t=!0,margin:n="100px",onChange:r}={}){let o=typeof document>"u"?!0:!document.hidden,i=!0,a=()=>r&&r(o&&i),s=()=>{o=!document.hidden,a()},c=null;return t&&(document.addEventListener("visibilitychange",s),typeof IntersectionObserver<"u"&&(c=new IntersectionObserver(l=>{for(let u of l)i=u.isIntersecting;a()},{rootMargin:n}),c.observe(e))),{get visible(){return o&&i},dispose(){t&&document.removeEventListener("visibilitychange",s),c&&c.disconnect()}}}var Ki={font:'"Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif',mono:'"Geist Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace',bg:"#1f1f1f",bgAlt:"#181818",raised:"#2a2d2e",hover:"#37373d",border:"#3c3c3c",text:"#cccccc",textStrong:"#ececec",label:"#9d9d9d",accent:"#4daafc",number:"#4daafc",string:"#d1977f",red:"#e46962",redSoft:"#4e3534",redText:"#f9dedc",radius:"8px",shadow:"0 1px 0 rgba(255,255,255,.03) inset, 0 16px 40px -16px rgba(0,0,0,.7), 0 4px 14px rgba(0,0,0,.3)"};function Cr(e){return Object.assign({},Ki,e&&typeof e=="object"?e:null)}function Er({visible:e=!1,key:t="F1",position:n="top-left",theme:r}={}){let o=Cr(r),i=document.createElement("div"),[a,s]=n.split("-");i.style.cssText=`position:fixed;${a==="bottom"?"bottom":"top"}:12px;${s==="right"?"right":"left"}:12px;z-index:2147483647;min-width:168px;padding:8px 10px;border:1px solid ${o.border};border-radius:${o.radius};background:${o.bg}e6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:${o.shadow};color:${o.text};font:12px/1.5 ${o.mono};pointer-events:none;display:none`,document.body.appendChild(i);let c=(y,h)=>`<div style="display:flex;justify-content:space-between;gap:14px"><span style="color:${o.label}">${y}</span><span style="color:${o.textStrong}">${h}</span></div>`,l=!1,u=0,d=0,f=0,m=0;function b(y=!0){l=!!y,i.style.display=l?"block":"none",u=d=f=0}let g=()=>b(!l),x=y=>{y.key===t&&(y.preventDefault(),g())};return t&&window.addEventListener("keydown",x),b(e),{show:b,toggle:g,isVisible:()=>l,update(y){if(!l)return;u+=y.rawDt,d+=y.cpuMs,f++;let h=performance.now();if(h-m<250)return;m=h;let E=u/f*1e3;i.innerHTML=`<div style="display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px"><b style="color:${o.accent};font-size:16px;font-weight:600">${(1e3/E).toFixed(0)}<span style="font-size:11px;color:${o.label};font-weight:400"> fps</span></b><span style="color:${o.label}">${E.toFixed(1)} ms</span></div>`+c("cpu",(d/f).toFixed(2)+" ms")+c("frame",y.frame)+c("time",y.time.toFixed(2)+" s")+c("size",`${y.width}\xD7${y.height}`)+c("passes",y.passes),u=d=f=0},dispose(){t&&window.removeEventListener("keydown",x),i.remove()}}}function qi(e,t){let n=Cr(t),r=null;function o(){if(!r)return;let a=e.getBoundingClientRect();Object.assign(r.style,{left:a.left+"px",top:a.top+"px",width:a.width+"px",height:a.height+"px"})}let i=a=>String(a).replace(/&/g,"&amp;").replace(/</g,"&lt;");return{show(a){r||(r=document.createElement("div"),r.style.cssText=`position:fixed;z-index:2147483646;box-sizing:border-box;overflow:auto;padding:16px;background:${n.bgAlt}f2;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:${n.text};font:13px/1.55 ${n.font}`,document.body.appendChild(r),window.addEventListener("resize",o));let s=a.errors||[],c=i(a.message.split(`
76
+ `)[0]),l="";s.length?l=s.map(u=>`<div style="display:grid;grid-template-columns:auto 1fr;gap:4px 12px;padding:10px 12px;border:1px solid ${n.border};border-radius:${n.radius};background:${n.bg};margin-bottom:8px"><span style="color:${n.red};font-family:${n.mono};font-size:12px">line ${u.line}</span><span style="color:${n.textStrong}">${i(u.message)}</span><span></span><code style="color:${n.label};font-family:${n.mono};font-size:12px;white-space:pre-wrap">${i(u.source.trim())}</code></div>`).join(""):a.log&&(l=`<pre style="margin:0;padding:10px 12px;border:1px solid ${n.border};border-radius:${n.radius};background:${n.bg};color:${n.label};font:12px/1.5 ${n.mono};white-space:pre-wrap">${i(a.log)}</pre>`),r.innerHTML=`<div style="display:flex;align-items:center;gap:10px;margin-bottom:12px"><span style="display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:11px;background:${n.redSoft};color:${n.redText};font-size:11.5px;font-weight:500">Shader error</span><b style="color:${n.textStrong};font-weight:600">${c}</b></div>`+l,r.style.display="block",o()},hide(){r&&(r.style.display="none")},dispose(){r&&(r.remove(),window.removeEventListener("resize",o),r=null)}}}function Ji(e,t){function n(a="image/png",s){return t(),e.toDataURL(a,s)}function r(a="image/png",s){return t(),new Promise((c,l)=>e.toBlob(u=>u?c(u):l(new Error("toBlob failed")),a,s))}async function o(a="shadermate.png",s,c){s||(s=/\.jpe?g$/i.test(a)?"image/jpeg":/\.webp$/i.test(a)?"image/webp":"image/png");let l=await r(s,c);vr(l,a)}function i({fps:a=60,mimeType:s,bitsPerSecond:c=8e6,duration:l=0,download:u}={}){if(typeof MediaRecorder>"u"||!e.captureStream)throw new Error("MediaRecorder not supported");let d=e.captureStream(a),f=s||["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm","video/mp4"].find(y=>MediaRecorder.isTypeSupported(y))||"",m=new MediaRecorder(d,{mimeType:f||void 0,videoBitsPerSecond:c}),b=[];m.ondataavailable=y=>{y.data.size&&b.push(y.data)};let g=new Promise(y=>{m.onstop=()=>y(new Blob(b,{type:m.mimeType}))});m.start(100);let x={recorder:m,stop(){return m.state!=="inactive"&&m.stop(),d.getTracks().forEach(y=>y.stop()),g},done:g};if(l>0){let y=new Promise(h=>setTimeout(()=>h(x.stop()),l));return u?y.then(h=>(vr(h,typeof u=="string"?u:"shadermate.webm"),h)):y}return x}return{screenshot:n,toBlob:r,download:o,record:i}}function vr(e,t){let n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function Zi(e,t){var n;if(typeof e=="string"||Array.isArray(e))return{...t||{},passes:e};if(e&&typeof e=="object"&&(e.shader!=null||e.passes!=null||e.src!=null)){let r={...e};return r.passes==null?r.passes={src:(n=r.shader)!=null?n:r.src,uniforms:r.passUniforms,channels:r.channels,pingpong:r.pingpong,float:r.float}:r.channels!=null&&console.warn("[ShaderMate] `channels` only applies to the single-shader form; put channels on each pass instead."),r}throw new H("createShader: pass a shader string, an array of passes, or { shader | passes, ...options }")}function Qi(e){if(e&&typeof e=="object"&&typeof e.getContext=="function")return{canvas:e,given:!0};if(typeof e=="string"){let n=document.getElementById(e);if(!n)try{n=document.querySelector(e)}catch{}if(!n)throw new H(`Canvas not found: "${e}"`);return{canvas:n,given:!0}}let t=document.getElementById(ar);return t?{canvas:t,given:!0}:(t=document.createElement("canvas"),t.id=ar,(document.body||document.documentElement).appendChild(t),{canvas:t,given:!1})}function xt(e,t,n){let r=e[t];nn(r)?r.value=n:e[t]=n}var Jt=(e,t)=>nn(e[t])?e[t].value:e[t];function Ur(e,t){var n,r,o;if(!Zt)throw new H("ShaderMate needs a browser environment (window/document).");let i=Zi(e,t),a=i.autoSetup!==!1,s=Object.assign({},a?Rr:bi,i.inject),c=cr(i.defines),l=typeof i.common=="string"?i.common:"",u=i.dialect||"auto",d=i.samplers||{},f=i.uniforms||{},m=i.includes||{},b=!!i.strictUniforms,g=i.warnMissingUniforms!==!1,x=i.showExpandedOnError!==!1,y=i.errorOverlay===void 0||i.errorOverlay==="auto"?Do():!!i.errorOverlay,h,E,p;i.gl?(p=i.gl,h=p.canvas,E=!0):({canvas:h,given:E}=Qi(i.canvas),p=Yo(h,i));let _=Vo(p),T=$o(p,_),M={isGL2:_,ext:T},S=new No(p),O=!!(_||T.OES_standard_derivatives),L=Oo((n=i.background)!=null?n:i.clearColor)||[0,0,0,0];p.clearColor(L[0],L[1],L[2],L[3]);let X=Bo(),{emit:D,on:Z,off:ne,once:Y}=X,Ke=Ko(p),Fe=Yi(h,i,E),Ee=Hi(h,Fe.fit,i.pointer===!1?{target:"canvas",smooth:0}:typeof i.pointer=="object"?i.pointer:{}),Oe=Xo(),ve=y?qi(h,i.theme):null,ae=null;i.stats&&(ae=Er({visible:i.stats===!0||i.stats==="visible",key:i.statsKey===void 0?"F1":i.statsKey,position:i.statsPosition,theme:i.theme}));let B=[],ee=new Map,_e=[],se=!1,me=!1,Te=null,wn=()=>{},be=performance.now(),xn=0,De=0,ue=i.time||0,W=i.autoplay!==!1&&!i.startPaused&&!i.paused,Ut=(r=i.timeScale)!=null?r:1,qe=i.fixedDelta||0,Je=i.maxFps||i.fps||0,Se=i.loop||0,co=(o=i.maxDelta)!=null?o:.1,gn=!0,Pt=null,yn=60,Ne=[],re=null,Ae=null,Re=!1,fo=$i(h,{enabled:i.pauseWhenHidden!==!1,onChange:w=>{gn=w,w&&(be=performance.now()),D("visibility",w)}});function Lt(w){Pt=w,ve&&ve.show(w),D("error",w),i.onError&&i.onError(w)}function En(){Pt=null,ve&&ve.hide()}let It=async w=>{let v=await fetch(w);if(!v.ok)throw new H(`Failed to fetch ${w}: ${v.status} ${v.statusText}`);return v.text()},uo=async w=>m[w]!=null?m[w]:It(w),Ze=null;async function lo(){if(Ze!==null)return Ze;if(!l)return Ze="";let w=$t(l)?l:await It(l),v=wr(w);for(let A in v.uniforms)A in f||(f[A]=v.uniforms[A]);return Object.assign(d,v.samplers,d),Ze=v.source}async function vn(w,v,A=_e){let k=$t(v)?v:await It(v),C=await lo(),R=wr(k);k=R.source;for(let te in R.uniforms)!(te in w.uniforms)&&!(te in f)&&(w.uniforms[te]=R.uniforms[te]);w.annotatedSamplers=R.samplers;let U=C?C+`
77
77
  #line 1
78
- `+k:k,I=await hi(U,{loader:uo}),z=u==="fragcoord"||u==="auto"&&di(I),F=[],N=A.filter(te=>!te.screen);A.forEach(te=>F.push("u_"+te.name)),N.forEach((te,ke)=>{let Xe="u_pass"+(ke+1);F.includes(Xe)||F.push(Xe)});let j=wi(I,{isGL2:_,defines:[...c,...cr(w.defines)],enableDerivatives:O,inject:s,channelTypes:w.channels.map(Ri),builtinOpts:{fragcoord:z,mouseVec4:z||u==="fragcoord"||Pi(I),scrollFloat:z||u==="fragcoord",samplerNames:F,passCount:N.length}}),$=Tr(p,_?Sr:Ar,j,{label:w.name,showExpandedOnError:x});if($.error)throw $.error;return{program:$.program,source:k,compiled:j,fragcoord:z}}function _n(){for(let w of B){let v=w.cfg;if(v.screen&&!Me)continue;let[A,k]=v.screen?[h.width,h.height]:ai(v.size,h.width,h.height);w.target&&w.target.width===A&&w.target.height===k||(wt(S,w.target),wt(S,w.targetPrev),w.target=mr(p,S,A,k,v,_,T),w.targetPrev=v.pingpong||v.screen&&Me?mr(p,S,A,k,v,_,T):null)}}function Ft(){se||Fe.update()&&(p.viewport(0,0,h.width,h.height),_n(),D("resize",{width:h.width,height:h.height}),!W&&me&&Re())}async function Tn(w){await Promise.all(w.cfg.channels.map(async(v,A)=>{if(!(!v||v.pass!=null))try{w.texChannels[A]=await Kt(p,S,v,R)}catch(k){console.warn(`[ShaderMate] Pass "${w.name}" channel ${A}: ${k.message}`),D("error",k)}})),w.samplers=Oi(w,B,d),await Promise.all(w.samplers.map(async v=>{if(!(v.spec.pass!=null||v.spec.array))try{v.wrap=await Kt(p,S,v.spec,R)}catch(A){console.warn(`[ShaderMate] Pass "${w.name}" sampler ${v.name}: ${A.message}`),D("error",A)}}))}function mo(w){if(typeof w!="string"||!$t(w))return w;let v=ki(w);if(!v)return w;v.common&&(l=l?l+`
79
- `+v.common:v.common);let A=v.passes.find(C=>C.bufferType!=="2d");if(A)throw new H(`Pass "${A.label}" uses a ${A.bufferType} buffer; ShaderMate supports 2D buffers only.`);let k=v.passes.map(C=>C.main?{name:"main",shader:C.src,screen:!0}:{name:C.name,shader:C.src,pingpong:!0,float:!0});return k.some(C=>C.screen)||(k[k.length-1].screen=!0),k}async function Sn(){_e=Go(mo(i.passes));for(let w of _e)w.iterations>1&&!w.screen&&(w.pingpong=!0);for(let w=0;w<_e.length;w++){let v=_e[w],{program:A,source:k,compiled:C,fragcoord:M}=await vn(v,v.src);if(se){p.deleteProgram(A);return}let U={cfg:v,name:v.name,index:w,programId:S.add(A,"program"),uniformInfo:dr(p,A),source:k,compiled:C,fragcoord:M,target:null,targetPrev:null,texChannels:new Array(We).fill(null),samplers:[]};B.push(U),ee.set(U.name,U)}await Promise.all(B.map(Tn)),!se&&(Me=Di(B),Me&&!Ae&&(Ae=ri(p,_,Ke)),!re&&B.some(w=>w.uniformInfo.u_camera_pos||w.uniformInfo.u_camera_dir||w.uniformInfo.u_camera_view)&&(re=Ni(h,typeof i.camera=="object"?i.camera:{})),_n())}function Ot(w,v,A){let k=null;return v.targetPrev?k=A==="prev"||A!=="current"&&v.index>=w.index?v.targetPrev:v.target:v===w?ye("self:"+w.name,`Pass "${w.name}" reads its own output; add pingpong: true.`):v.cfg.screen?ye("screen:"+v.name,`Pass "${w.name}" can't read screen pass "${v.name}" (it has no texture).`):k=v.target,k}function ho(w,v,A=0){let k=w.cfg,C=S.get(w.programId),M=w.uniformInfo,U=Ee.state,I=(P,J)=>{let G=M[P];G&&p.uniform1f(G.loc,J)},z=(P,J)=>{let G=M[P];G&&p.uniform1i(G.loc,J)};if(w.targetPrev){let P=w.targetPrev;w.targetPrev=w.target,w.target=P}let F,N;k.screen&&!Me?(p.bindFramebuffer(p.FRAMEBUFFER,null),F=h.width,N=h.height):(p.bindFramebuffer(p.FRAMEBUFFER,S.get(w.target.fboId)),F=w.target.width,N=w.target.height);let j=k.screen?1:F/h.width,$=k.screen?1:N/h.height;if(p.viewport(0,0,F,N),p.useProgram(C),p.clear(p.COLOR_BUFFER_BIT|(w.target&&w.target.depthId?p.DEPTH_BUFFER_BIT:0)),I("iTime",v.time),I("u_time",v.time),I("iTimeDelta",v.dt),I("u_delta",v.dt),I("u_time_delta",v.dt),z("iFrame",v.frame),z("u_frame",v.frame),I("iFrameRate",v.fps),I("u_fps",v.fps),I("u_refresh_rate",v.refreshRate),I("iSampleRate",44100),M.iResolution&&p.uniform3f(M.iResolution.loc,F,N,1),M.u_resolution&&p.uniform2f(M.u_resolution.loc,F,N),I("u_aspect",F/N),I("u_pixelRatio",v.dpr),M.iDate&&p.uniform4fv(M.iDate.loc,v.date),M.u_date&&p.uniform4fv(M.u_date.loc,v.date),M.iScroll&&p.uniform2f(M.iScroll.loc,v.scrollX,v.scrollY),M.u_scroll&&(M.u_scroll.type===Gi?p.uniform1f(M.u_scroll.loc,U.wheel):p.uniform2f(M.u_scroll.loc,v.scrollX,v.scrollY)),I("u_wheel",U.wheel),M.u_drag&&p.uniform2f(M.u_drag.loc,U.dragX*j,U.dragY*$),z("u_recursion",A),z("u_max_recursion",k.iterations||1),z("u_color_gamut",0),re&&(M.u_camera_pos&&p.uniform3fv(M.u_camera_pos.loc,re.pos),M.u_camera_dir&&p.uniform3fv(M.u_camera_dir.loc,re.dir),M.u_camera_view&&p.uniformMatrix4fv(M.u_camera_view.loc,!1,re.view)),M.iMouse){let P=U.down?1:-1,J=U.clicked?1:-1;p.uniform4f(M.iMouse.loc,U.x*j,U.y*$,U.clickX*j*P,U.clickY*$*J)}if(M.u_mouse)if(M.u_mouse.type===xr){let P=U.down?1:-1;p.uniform4f(M.u_mouse.loc,U.x*j,U.y*$,U.clickX*j*P,U.clickY*$*P)}else p.uniform2f(M.u_mouse.loc,U.x*j,U.y*$);M.u_mouseUV&&p.uniform2f(M.u_mouseUV.loc,U.uvX,U.uvY),I("u_mouseDown",U.down?1:0);let te=[0,0,0,0],ke=new Float32Array(12);for(let P=0;P<We;P++){let J=k.channels[P];if(!J)continue;let G=null,ce=0,Ce=0,In=!1,Fn=v.time;if(J.pass!=null){let fe=ee.get(J.pass),et=fe?Ot(w,fe,J.buffer):null;et&&(G=S.get(et.texId),ce=et.width,Ce=et.height)}else{let fe=w.texChannels[P];fe&&(G=S.get(fe.texId),ce=fe.width,Ce=fe.height,In=!!fe.cubemap,fe.getTime&&(Fn=fe.getTime()))}G&&(p.activeTexture(p.TEXTURE0+P),p.bindTexture(In?p.TEXTURE_CUBE_MAP:p.TEXTURE_2D,G),z("iChannel"+P,P),te[P]=Fn,ke[P*3]=ce,ke[P*3+1]=Ce,ke[P*3+2]=1)}M.iChannelTime&&(M.iChannelTime.type===xr?p.uniform4fv:p.uniform1fv).call(p,M.iChannelTime.loc,te),M.iChannelResolution&&p.uniform3fv(M.iChannelResolution.loc,ke);let Xe=We;for(let P of w.samplers){let J=(G,ce)=>(p.activeTexture(p.TEXTURE0+Xe),p.bindTexture(ce?p.TEXTURE_CUBE_MAP:p.TEXTURE_2D,G),Xe++);if(P.spec.array){let G=P.spec.array.map(ce=>{let Ce=Ot(w,ce,P.spec.buffer);return Ce?J(S.get(Ce.texId),!1):0});p.uniform1iv(P.info.loc,G)}else if(P.spec.pass!=null){let G=ee.get(P.spec.pass),ce=G?Ot(w,G,P.spec.buffer):null;ce&&p.uniform1i(P.info.loc,J(S.get(ce.texId),!1))}else if(P.wrap){p.uniform1i(P.info.loc,J(S.get(P.wrap.texId),!!P.wrap.cubemap)),P.wrap.getTime&&I(P.name+"_time",P.wrap.getTime());let G=M[P.name+"_resolution"];G&&p.uniform2f(G.loc,P.wrap.width,P.wrap.height)}}yr(p,M,f,{strict:!1}),yr(p,M,k.uniforms,{strict:b,warnMissing:g,label:w.name}),Ke.bind(C),Ke.draw()}function Dt(w,{advance:v=W,rawDt:A}={}){let k=performance.now();if(A===void 0&&(A=Math.max(0,(w-be)*.001)),be=w,A>.002&&A<.1&&(Ne.push(A),Ne.length>30&&Ne.shift(),Ne.length>=10)){let F=[...Ne].sort((N,j)=>N-j);yn=Math.round(1/F[F.length>>1])}let C=qe>0?qe:Math.min(A,co);v?(ue+=C*Ut,Se>0&&(ue=(ue%Se+Se)%Se)):C=0,De++;let M=A>0?1/A:0;Oe.update(w),Ee.update();let U={time:ue,frame:De,dt:C,fps:M};D("beforeFrame",U),i.onFrame&&i.onFrame(U);let I=new Date,z={time:ue,frame:De,dt:C,fps:M,dpr:window.devicePixelRatio||1,date:[I.getFullYear(),I.getMonth()+1,I.getDate(),I.getHours()*3600+I.getMinutes()*60+I.getSeconds()+I.getMilliseconds()/1e3],scrollX:window.scrollX||0,scrollY:window.scrollY||0,refreshRate:yn};re&&re.update(A);for(let F of B){for(let N of F.texChannels)N&&N.update&&N.update();for(let N of F.samplers)N.wrap&&N.wrap.update&&N.wrap.update()}for(let F of B){let N=Math.max(1,F.cfg.iterations|0);for(let j=0;j<N;j++)ho(F,z,j);F.cfg.screen&&Me&&Ae&&Ae.draw(S.get(F.target.texId),h.width,h.height)}p.bindFramebuffer(p.FRAMEBUFFER,null),D("afterFrame",U),ae&&ae.update({rawDt:A,cpuMs:performance.now()-k,frame:De,time:ue,width:h.width,height:h.height,passes:B.length})}function An(w){if(Te=requestAnimationFrame(An),!me||!gn){be=w;return}if(!W&&Oe.size===0&&i.renderWhilePaused!==!0){be=w;return}Je>0&&w-xn<1e3/Je-.5||(xn=w,Dt(w))}function Re(){!me||se||Dt(performance.now(),{advance:!1,rawDt:0})}function Mn(){se||Te!=null||(be=performance.now(),Te=requestAnimationFrame(An))}function Rn(){Te!=null&&cancelAnimationFrame(Te),Te=null}function kn(){se||(se=!0,Rn(),wn(),Ee.dispose(),fo.dispose(),Oe.cancel(),ae&&ae.dispose(),ve&&ve.dispose(),re&&re.dispose(),Ae&&Ae.dispose(),h.removeEventListener("webglcontextlost",Cn),h.removeEventListener("webglcontextrestored",Un),po(),Ke.dispose(),D("destroy"),X.clear(),!E&&h.parentNode&&h.parentNode.removeChild(h))}function po(){for(let w of B)S.unref(w.programId),wt(S,w.target),wt(S,w.targetPrev),w.texChannels.forEach(v=>{v&&(v.dispose&&v.dispose(),S.unref(v.texId))}),(w.samplers||[]).forEach(v=>{v.wrap&&(v.wrap.dispose&&v.wrap.dispose(),S.unref(v.wrap.texId))});B.length=0,ee.clear()}function Cn(w){w.preventDefault(),Rn(),me=!1,console.warn("[ShaderMate] WebGL context lost."),D("contextlost")}async function Un(){console.warn("[ShaderMate] WebGL context restored, rebuilding."),S._items.clear(),B.length=0,ee.clear();try{await Sn(),me=!0,Mn(),D("contextrestored")}catch(w){Lt(w)}}h.addEventListener("webglcontextlost",Cn),h.addEventListener("webglcontextrestored",Un);let Qe=Ji(h,Re);function Nt(w,v,A){if(w&&typeof w=="object"){for(let C in w)Nt(C,w[C],v);return V}Oe.cancel(w);let k=!1;for(let C of B)A&&C.name!==A||w in C.cfg.uniforms&&(xt(C.cfg.uniforms,w,v),k=!0);if(!k)if(A){let C=ee.get(A);if(!C)throw new H(`set: unknown pass "${A}"`);xt(C.cfg.uniforms,w,v)}else xt(f,w,v);return!W&&me&&Be(),V}function Pn(w,v){for(let A of B)if(!(v&&A.name!==v)&&w in A.cfg.uniforms)return Jt(A.cfg.uniforms,w);return Jt(f,w)}function bo(w,v,A={}){let k=A.pass,C=()=>{for(let M of B)if((!k||M.name===k)&&w in M.cfg.uniforms)return M.cfg.uniforms;return f};return Oe.tween(w,()=>Jt(C(),w),M=>xt(C(),w,M),v,A)}let Bt=!1;function Be(){Bt||(Bt=!0,requestAnimationFrame(()=>{Bt=!1,W||Re()}))}async function wo(w,v){let A=v?ee.get(v):B.find(k=>k.cfg.screen)||B[0];if(!A)throw new H(`setShader: unknown pass "${v}"`);try{let{program:k,source:C,compiled:M}=await vn(A.cfg,w,_e);if(se){p.deleteProgram(k);return}S.unref(A.programId),A.programId=S.add(k,"program"),A.uniformInfo=dr(p,k),A.cfg.src=w,A.source=C,A.compiled=M,await Tn(A),En(),D("shader",{pass:A.name}),W||Be()}catch(k){throw Lt(k),k}}async function xo(w,v,A){let k=A?ee.get(A):B.find(U=>U.cfg.screen)||B[0];if(!k)throw new H(`setChannel: unknown pass "${A}"`);let C=_r(v,[...ee.keys()],k.name),M=k.texChannels[w];M&&(M.dispose&&M.dispose(),S.unref(M.texId),k.texChannels[w]=null),k.cfg.channels[w]=C,C&&C.pass==null&&(k.texChannels[w]=await Kt(p,S,C,R)),W||Be()}let V={version:Io,canvas:h,gl:p,isWebGL2:_,theme:i.theme,get camera(){return re},uniforms:f,get passes(){return B},get ready(){return Ln},get loaded(){return me},get error(){return Pt},play(){return W||(W=!0,be=performance.now(),D("play")),V},pause(){return W&&(W=!1,D("pause")),V},toggle(){return W?V.pause():V.play()},get playing(){return W},step(w=1){for(let v=0;v<w;v++)Dt(performance.now(),{advance:!0,rawDt:qe||1/60});return V},render:Re,destroy:kn,dispose:kn,get time(){return ue},set time(w){ue=w,W||Be()},get frame(){return De},get timeScale(){return Ut},set timeScale(w){Ut=w},get maxFps(){return Je},set maxFps(w){Je=w||0},get loop(){return Se},set loop(w){Se=w||0},seek(w){return ue=w,W||Be(),V},setFixedDelta(w){return qe=w||0,V},set:Nt,get:Pn,tween:bo,setUniform:Nt,getUniform:Pn,setShader:wo,setChannel:xo,getPass:w=>ee.get(w)||null,getTexture(w){let v=w?ee.get(w):B.find(A=>!A.cfg.screen)||B[0];return v&&v.target?S.get(v.target.texId):null},readPixels({pass:w,x:v=0,y:A=0,width:k,height:C,float:M}={}){let U=w?ee.get(w):null;Re(),U&&U.target?p.bindFramebuffer(p.FRAMEBUFFER,S.get(U.target.fboId)):p.bindFramebuffer(p.FRAMEBUFFER,null);let I=k??(U&&U.target?U.target.width:h.width),z=C??(U&&U.target?U.target.height:h.height),F=new Uint8Array(I*z*4);if(U&&U.target&&U.target.fmt.type!==p.UNSIGNED_BYTE){let j=new Float32Array(I*z*4);if(p.readPixels(v,A,I,z,p.RGBA,p.FLOAT,j),M!==!1)F=j;else for(let $=0;$<j.length;$++)F[$]=Math.max(0,Math.min(255,Math.round(j[$]*255)))}else p.readPixels(v,A,I,z,p.RGBA,p.UNSIGNED_BYTE,F);return p.bindFramebuffer(p.FRAMEBUFFER,null),{data:F,width:I,height:z,float:F instanceof Float32Array}},resize:Ft,setSize(w,v){return Fe.setFixed(w,v),Ft(),V},get width(){return h.width},get height(){return h.height},pointer:Ee.state,domToShader:Ee.toShader,domToUV:Ee.toUV,screenshot:Qe.screenshot,toBlob:Qe.toBlob,download:Qe.download,record:Qe.record,on:Z,off:ne,once:Y,stats:{show:(w=!0)=>{ae||(ae=Er({visible:!1,key:i.statsKey===void 0?"F1":i.statsKey,theme:i.theme})),ae.show(w)},toggle:()=>V.stats.show(!(ae&&ae.isVisible()))}};Fe.update(),p.viewport(0,0,h.width,h.height),wn=Fe.observe(Ft);let Ln=(async()=>(await Sn(),se||(me=!0,En(),D("load",V),i.onReady&&i.onReady(V),Mn(),W||Re()),V))();return Ln.catch(w=>{se||Lt(w)}),V}var Pr=`
78
+ `+k:k,I=await hi(U,{loader:uo}),z=u==="fragcoord"||u==="auto"&&di(I),F=[],N=A.filter(te=>!te.screen);A.forEach(te=>F.push("u_"+te.name)),N.forEach((te,ke)=>{let Xe="u_pass"+(ke+1);F.includes(Xe)||F.push(Xe)});let j=wi(I,{isGL2:_,defines:[...c,...cr(w.defines)],enableDerivatives:O,inject:s,channelTypes:w.channels.map(Mi),builtinOpts:{fragcoord:z,mouseVec4:z||u==="fragcoord"||Pi(I),scrollFloat:z||u==="fragcoord",samplerNames:F,passCount:N.length}}),$=Tr(p,_?Sr:Ar,j,{label:w.name,showExpandedOnError:x});if($.error)throw $.error;return{program:$.program,source:k,compiled:j,fragcoord:z}}function _n(){for(let w of B){let v=w.cfg;if(v.screen&&!Re)continue;let[A,k]=v.screen?[h.width,h.height]:ai(v.size,h.width,h.height);w.target&&w.target.width===A&&w.target.height===k||(wt(S,w.target),wt(S,w.targetPrev),w.target=mr(p,S,A,k,v,_,T),w.targetPrev=v.pingpong||v.screen&&Re?mr(p,S,A,k,v,_,T):null)}}function Ft(){se||Fe.update()&&(p.viewport(0,0,h.width,h.height),_n(),D("resize",{width:h.width,height:h.height}),!W&&me&&Me())}async function Tn(w){await Promise.all(w.cfg.channels.map(async(v,A)=>{if(!(!v||v.pass!=null))try{w.texChannels[A]=await Kt(p,S,v,M)}catch(k){console.warn(`[ShaderMate] Pass "${w.name}" channel ${A}: ${k.message}`),D("error",k)}})),w.samplers=Oi(w,B,d),await Promise.all(w.samplers.map(async v=>{if(!(v.spec.pass!=null||v.spec.array))try{v.wrap=await Kt(p,S,v.spec,M)}catch(A){console.warn(`[ShaderMate] Pass "${w.name}" sampler ${v.name}: ${A.message}`),D("error",A)}}))}function mo(w){if(typeof w!="string"||!$t(w))return w;let v=ki(w);if(!v)return w;v.common&&(l=l?l+`
79
+ `+v.common:v.common);let A=v.passes.find(C=>C.bufferType!=="2d");if(A)throw new H(`Pass "${A.label}" uses a ${A.bufferType} buffer; ShaderMate supports 2D buffers only.`);let k=v.passes.map(C=>C.main?{name:"main",shader:C.src,screen:!0}:{name:C.name,shader:C.src,pingpong:!0,float:!0});return k.some(C=>C.screen)||(k[k.length-1].screen=!0),k}async function Sn(){_e=Go(mo(i.passes));for(let w of _e)w.iterations>1&&!w.screen&&(w.pingpong=!0);for(let w=0;w<_e.length;w++){let v=_e[w],{program:A,source:k,compiled:C,fragcoord:R}=await vn(v,v.src);if(se){p.deleteProgram(A);return}let U={cfg:v,name:v.name,index:w,programId:S.add(A,"program"),uniformInfo:dr(p,A),source:k,compiled:C,fragcoord:R,target:null,targetPrev:null,texChannels:new Array(We).fill(null),samplers:[]};B.push(U),ee.set(U.name,U)}await Promise.all(B.map(Tn)),!se&&(Re=Di(B),Re&&!Ae&&(Ae=ri(p,_,Ke)),!re&&B.some(w=>w.uniformInfo.u_camera_pos||w.uniformInfo.u_camera_dir||w.uniformInfo.u_camera_view)&&(re=Ni(h,typeof i.camera=="object"?i.camera:{})),_n())}function Ot(w,v,A){let k=null;return v.targetPrev?k=A==="prev"||A!=="current"&&v.index>=w.index?v.targetPrev:v.target:v===w?ye("self:"+w.name,`Pass "${w.name}" reads its own output; add pingpong: true.`):v.cfg.screen?ye("screen:"+v.name,`Pass "${w.name}" can't read screen pass "${v.name}" (it has no texture).`):k=v.target,k}function ho(w,v,A=0){let k=w.cfg,C=S.get(w.programId),R=w.uniformInfo,U=Ee.state,I=(P,J)=>{let G=R[P];G&&p.uniform1f(G.loc,J)},z=(P,J)=>{let G=R[P];G&&p.uniform1i(G.loc,J)};if(w.targetPrev){let P=w.targetPrev;w.targetPrev=w.target,w.target=P}let F,N;k.screen&&!Re?(p.bindFramebuffer(p.FRAMEBUFFER,null),F=h.width,N=h.height):(p.bindFramebuffer(p.FRAMEBUFFER,S.get(w.target.fboId)),F=w.target.width,N=w.target.height);let j=k.screen?1:F/h.width,$=k.screen?1:N/h.height;if(p.viewport(0,0,F,N),p.useProgram(C),p.clear(p.COLOR_BUFFER_BIT|(w.target&&w.target.depthId?p.DEPTH_BUFFER_BIT:0)),I("iTime",v.time),I("u_time",v.time),I("iTimeDelta",v.dt),I("u_delta",v.dt),I("u_time_delta",v.dt),z("iFrame",v.frame),z("u_frame",v.frame),I("iFrameRate",v.fps),I("u_fps",v.fps),I("u_refresh_rate",v.refreshRate),I("iSampleRate",44100),R.iResolution&&p.uniform3f(R.iResolution.loc,F,N,1),R.u_resolution&&p.uniform2f(R.u_resolution.loc,F,N),I("u_aspect",F/N),I("u_pixelRatio",v.dpr),R.iDate&&p.uniform4fv(R.iDate.loc,v.date),R.u_date&&p.uniform4fv(R.u_date.loc,v.date),R.iScroll&&p.uniform2f(R.iScroll.loc,v.scrollX,v.scrollY),R.u_scroll&&(R.u_scroll.type===Gi?p.uniform1f(R.u_scroll.loc,U.wheel):p.uniform2f(R.u_scroll.loc,v.scrollX,v.scrollY)),I("u_wheel",U.wheel),R.u_drag&&p.uniform2f(R.u_drag.loc,U.dragX*j,U.dragY*$),z("u_recursion",A),z("u_max_recursion",k.iterations||1),z("u_color_gamut",0),re&&(R.u_camera_pos&&p.uniform3fv(R.u_camera_pos.loc,re.pos),R.u_camera_dir&&p.uniform3fv(R.u_camera_dir.loc,re.dir),R.u_camera_view&&p.uniformMatrix4fv(R.u_camera_view.loc,!1,re.view)),R.iMouse){let P=U.down?1:-1,J=U.clicked?1:-1;p.uniform4f(R.iMouse.loc,U.x*j,U.y*$,U.clickX*j*P,U.clickY*$*J)}if(R.u_mouse)if(R.u_mouse.type===xr){let P=U.down?1:-1;p.uniform4f(R.u_mouse.loc,U.x*j,U.y*$,U.clickX*j*P,U.clickY*$*P)}else p.uniform2f(R.u_mouse.loc,U.x*j,U.y*$);R.u_mouseUV&&p.uniform2f(R.u_mouseUV.loc,U.uvX,U.uvY),I("u_mouseDown",U.down?1:0);let te=[0,0,0,0],ke=new Float32Array(12);for(let P=0;P<We;P++){let J=k.channels[P];if(!J)continue;let G=null,ce=0,Ce=0,In=!1,Fn=v.time;if(J.pass!=null){let fe=ee.get(J.pass),et=fe?Ot(w,fe,J.buffer):null;et&&(G=S.get(et.texId),ce=et.width,Ce=et.height)}else{let fe=w.texChannels[P];fe&&(G=S.get(fe.texId),ce=fe.width,Ce=fe.height,In=!!fe.cubemap,fe.getTime&&(Fn=fe.getTime()))}G&&(p.activeTexture(p.TEXTURE0+P),p.bindTexture(In?p.TEXTURE_CUBE_MAP:p.TEXTURE_2D,G),z("iChannel"+P,P),te[P]=Fn,ke[P*3]=ce,ke[P*3+1]=Ce,ke[P*3+2]=1)}R.iChannelTime&&(R.iChannelTime.type===xr?p.uniform4fv:p.uniform1fv).call(p,R.iChannelTime.loc,te),R.iChannelResolution&&p.uniform3fv(R.iChannelResolution.loc,ke);let Xe=We;for(let P of w.samplers){let J=(G,ce)=>(p.activeTexture(p.TEXTURE0+Xe),p.bindTexture(ce?p.TEXTURE_CUBE_MAP:p.TEXTURE_2D,G),Xe++);if(P.spec.array){let G=P.spec.array.map(ce=>{let Ce=Ot(w,ce,P.spec.buffer);return Ce?J(S.get(Ce.texId),!1):0});p.uniform1iv(P.info.loc,G)}else if(P.spec.pass!=null){let G=ee.get(P.spec.pass),ce=G?Ot(w,G,P.spec.buffer):null;ce&&p.uniform1i(P.info.loc,J(S.get(ce.texId),!1))}else if(P.wrap){p.uniform1i(P.info.loc,J(S.get(P.wrap.texId),!!P.wrap.cubemap)),P.wrap.getTime&&I(P.name+"_time",P.wrap.getTime());let G=R[P.name+"_resolution"];G&&p.uniform2f(G.loc,P.wrap.width,P.wrap.height)}}yr(p,R,f,{strict:!1}),yr(p,R,k.uniforms,{strict:b,warnMissing:g,label:w.name}),Ke.bind(C),Ke.draw()}function Dt(w,{advance:v=W,rawDt:A}={}){let k=performance.now();if(A===void 0&&(A=Math.max(0,(w-be)*.001)),be=w,A>.002&&A<.1&&(Ne.push(A),Ne.length>30&&Ne.shift(),Ne.length>=10)){let F=[...Ne].sort((N,j)=>N-j);yn=Math.round(1/F[F.length>>1])}let C=qe>0?qe:Math.min(A,co);v?(ue+=C*Ut,Se>0&&(ue=(ue%Se+Se)%Se)):C=0,De++;let R=A>0?1/A:0;Oe.update(w),Ee.update();let U={time:ue,frame:De,dt:C,fps:R};D("beforeFrame",U),i.onFrame&&i.onFrame(U);let I=new Date,z={time:ue,frame:De,dt:C,fps:R,dpr:window.devicePixelRatio||1,date:[I.getFullYear(),I.getMonth()+1,I.getDate(),I.getHours()*3600+I.getMinutes()*60+I.getSeconds()+I.getMilliseconds()/1e3],scrollX:window.scrollX||0,scrollY:window.scrollY||0,refreshRate:yn};re&&re.update(A);for(let F of B){for(let N of F.texChannels)N&&N.update&&N.update();for(let N of F.samplers)N.wrap&&N.wrap.update&&N.wrap.update()}for(let F of B){let N=Math.max(1,F.cfg.iterations|0);for(let j=0;j<N;j++)ho(F,z,j);F.cfg.screen&&Re&&Ae&&Ae.draw(S.get(F.target.texId),h.width,h.height)}p.bindFramebuffer(p.FRAMEBUFFER,null),D("afterFrame",U),ae&&ae.update({rawDt:A,cpuMs:performance.now()-k,frame:De,time:ue,width:h.width,height:h.height,passes:B.length})}function An(w){if(Te=requestAnimationFrame(An),!me||!gn){be=w;return}if(!W&&Oe.size===0&&i.renderWhilePaused!==!0){be=w;return}Je>0&&w-xn<1e3/Je-.5||(xn=w,Dt(w))}function Me(){!me||se||Dt(performance.now(),{advance:!1,rawDt:0})}function Rn(){se||Te!=null||(be=performance.now(),Te=requestAnimationFrame(An))}function Mn(){Te!=null&&cancelAnimationFrame(Te),Te=null}function kn(){se||(se=!0,Mn(),wn(),Ee.dispose(),fo.dispose(),Oe.cancel(),ae&&ae.dispose(),ve&&ve.dispose(),re&&re.dispose(),Ae&&Ae.dispose(),h.removeEventListener("webglcontextlost",Cn),h.removeEventListener("webglcontextrestored",Un),po(),Ke.dispose(),D("destroy"),X.clear(),!E&&h.parentNode&&h.parentNode.removeChild(h))}function po(){for(let w of B)S.unref(w.programId),wt(S,w.target),wt(S,w.targetPrev),w.texChannels.forEach(v=>{v&&(v.dispose&&v.dispose(),S.unref(v.texId))}),(w.samplers||[]).forEach(v=>{v.wrap&&(v.wrap.dispose&&v.wrap.dispose(),S.unref(v.wrap.texId))});B.length=0,ee.clear()}function Cn(w){w.preventDefault(),Mn(),me=!1,console.warn("[ShaderMate] WebGL context lost."),D("contextlost")}async function Un(){console.warn("[ShaderMate] WebGL context restored, rebuilding."),S._items.clear(),B.length=0,ee.clear();try{await Sn(),me=!0,Rn(),D("contextrestored")}catch(w){Lt(w)}}h.addEventListener("webglcontextlost",Cn),h.addEventListener("webglcontextrestored",Un);let Qe=Ji(h,Me);function Nt(w,v,A){if(w&&typeof w=="object"){for(let C in w)Nt(C,w[C],v);return V}Oe.cancel(w);let k=!1;for(let C of B)A&&C.name!==A||w in C.cfg.uniforms&&(xt(C.cfg.uniforms,w,v),k=!0);if(!k)if(A){let C=ee.get(A);if(!C)throw new H(`set: unknown pass "${A}"`);xt(C.cfg.uniforms,w,v)}else xt(f,w,v);return!W&&me&&Be(),V}function Pn(w,v){for(let A of B)if(!(v&&A.name!==v)&&w in A.cfg.uniforms)return Jt(A.cfg.uniforms,w);return Jt(f,w)}function bo(w,v,A={}){let k=A.pass,C=()=>{for(let R of B)if((!k||R.name===k)&&w in R.cfg.uniforms)return R.cfg.uniforms;return f};return Oe.tween(w,()=>Jt(C(),w),R=>xt(C(),w,R),v,A)}let Bt=!1;function Be(){Bt||(Bt=!0,requestAnimationFrame(()=>{Bt=!1,W||Me()}))}async function wo(w,v){let A=v?ee.get(v):B.find(k=>k.cfg.screen)||B[0];if(!A)throw new H(`setShader: unknown pass "${v}"`);try{let{program:k,source:C,compiled:R}=await vn(A.cfg,w,_e);if(se){p.deleteProgram(k);return}S.unref(A.programId),A.programId=S.add(k,"program"),A.uniformInfo=dr(p,k),A.cfg.src=w,A.source=C,A.compiled=R,await Tn(A),En(),D("shader",{pass:A.name}),W||Be()}catch(k){throw Lt(k),k}}async function xo(w,v,A){let k=A?ee.get(A):B.find(U=>U.cfg.screen)||B[0];if(!k)throw new H(`setChannel: unknown pass "${A}"`);let C=_r(v,[...ee.keys()],k.name),R=k.texChannels[w];R&&(R.dispose&&R.dispose(),S.unref(R.texId),k.texChannels[w]=null),k.cfg.channels[w]=C,C&&C.pass==null&&(k.texChannels[w]=await Kt(p,S,C,M)),W||Be()}let V={version:Io,canvas:h,gl:p,isWebGL2:_,theme:i.theme,get camera(){return re},uniforms:f,get passes(){return B},get ready(){return Ln},get loaded(){return me},get error(){return Pt},play(){return W||(W=!0,be=performance.now(),D("play")),V},pause(){return W&&(W=!1,D("pause")),V},toggle(){return W?V.pause():V.play()},get playing(){return W},step(w=1){for(let v=0;v<w;v++)Dt(performance.now(),{advance:!0,rawDt:qe||1/60});return V},render:Me,destroy:kn,dispose:kn,get time(){return ue},set time(w){ue=w,W||Be()},get frame(){return De},get timeScale(){return Ut},set timeScale(w){Ut=w},get maxFps(){return Je},set maxFps(w){Je=w||0},get loop(){return Se},set loop(w){Se=w||0},seek(w){return ue=w,W||Be(),V},setFixedDelta(w){return qe=w||0,V},set:Nt,get:Pn,tween:bo,setUniform:Nt,getUniform:Pn,setShader:wo,setChannel:xo,getPass:w=>ee.get(w)||null,getTexture(w){let v=w?ee.get(w):B.find(A=>!A.cfg.screen)||B[0];return v&&v.target?S.get(v.target.texId):null},readPixels({pass:w,x:v=0,y:A=0,width:k,height:C,float:R}={}){let U=w?ee.get(w):null;Me(),U&&U.target?p.bindFramebuffer(p.FRAMEBUFFER,S.get(U.target.fboId)):p.bindFramebuffer(p.FRAMEBUFFER,null);let I=k??(U&&U.target?U.target.width:h.width),z=C??(U&&U.target?U.target.height:h.height),F=new Uint8Array(I*z*4);if(U&&U.target&&U.target.fmt.type!==p.UNSIGNED_BYTE){let j=new Float32Array(I*z*4);if(p.readPixels(v,A,I,z,p.RGBA,p.FLOAT,j),R!==!1)F=j;else for(let $=0;$<j.length;$++)F[$]=Math.max(0,Math.min(255,Math.round(j[$]*255)))}else p.readPixels(v,A,I,z,p.RGBA,p.UNSIGNED_BYTE,F);return p.bindFramebuffer(p.FRAMEBUFFER,null),{data:F,width:I,height:z,float:F instanceof Float32Array}},resize:Ft,setSize(w,v){return Fe.setFixed(w,v),Ft(),V},get width(){return h.width},get height(){return h.height},pointer:Ee.state,domToShader:Ee.toShader,domToUV:Ee.toUV,screenshot:Qe.screenshot,toBlob:Qe.toBlob,download:Qe.download,record:Qe.record,on:Z,off:ne,once:Y,stats:{show:(w=!0)=>{ae||(ae=Er({visible:!1,key:i.statsKey===void 0?"F1":i.statsKey,theme:i.theme})),ae.show(w)},toggle:()=>V.stats.show(!(ae&&ae.isVisible()))}};Fe.update(),p.viewport(0,0,h.width,h.height),wn=Fe.observe(Ft);let Ln=(async()=>(await Sn(),se||(me=!0,En(),D("load",V),i.onReady&&i.onReady(V),Rn(),W||Me()),V))();return Ln.catch(w=>{se||Lt(w)}),V}var Pr=`
80
80
  // 256\xD71, palette colours in x = 0..count-1
81
81
  uniform sampler2D u_palette;
82
82
  uniform int u_count;
@@ -298,7 +298,7 @@ void main() {
298
298
  if (u_outline == 1 ? (!o && other) : (o && !other)) { fragColor = vec4(u_outlineColor, 1.0); return; }
299
299
  }
300
300
  }
301
- `;var Ve=(e,t)=>{let n=document.createElement("canvas");return n.width=e,n.height=t,n};async function Xr(){if(typeof document>"u")throw new Error("No DOM");let e=Ve(1,1).getContext("webgl2");if(!e)throw new Error("WebGL 2 is not available");if(!e.getExtension("EXT_color_buffer_float"))throw new Error("Float render targets are not available");let t=e.getExtension("WEBGL_debug_renderer_info"),n=String(t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER));e.getExtension("WEBGL_lose_context")?.loseContext();let r=Ve(1,1),o=Ve(1,1),i=Ve(256,1),a=Ve(1,1),s=h=>({element:h,filter:"nearest",wrap:"clamp"}),c=Ur({canvas:r,webgl:2,size:[1,1],pixelRatio:1,autoplay:!1,pauseWhenHidden:!1,pointer:!1,errorOverlay:!1,warnMissingUniforms:!1,preserveDrawingBuffer:!0,premultipliedAlpha:!1,antialias:!1,dialect:"shadermate",common:Pr,samplers:{u_palette:s(i),u_matrix:s(a)},uniforms:{u_count:1,u_distance:0,u_resample:0,u_adjust:[0,0,0,1],u_hue:0,u_crop:[0,0,1,1],u_alphaCut:.5,u_mode:0,u_levels:1,u_amount:0,u_skew:1,u_strength:1,u_kn:0,u_kernel:new Float32Array(Vt*3),u_outline:0,u_corners:0,u_outlineColor:[0,0,0]},passes:[{name:"prep",shader:Lr,float:"full",filter:"nearest",channels:[{...s(o),dynamic:!1}]},{name:"quant",shader:Ir,filter:"nearest",channels:["prep"]},{name:"diffuse",shader:Fr,float:"full",filter:"nearest",pingpong:!0,iterations:2,channels:["prep","diffuse"]},{name:"resolve",shader:Or,filter:"nearest",channels:["quant","diffuse"]},{name:"orphan",shader:Dr,filter:"nearest",channels:["resolve"]},{name:"smooth",shader:Nr,filter:"nearest",channels:["orphan"]},{name:"out",shader:Br,screen:!0,channels:["smooth"]}]}),l=null;if(c.on("error",h=>{l=h}),await c.ready,l||c.error)throw c.destroy(),l||c.error;let u=(h,E)=>{for(let p in E)c.set(p,E[p],h)},d=null,f="",m="";async function b(h){if(h.canvas===d&&!h.dirty)return;o.width=h.width,o.height=h.height;let E=o.getContext("2d");E.clearRect(0,0,o.width,o.height),E.drawImage(h.canvas,0,0),await c.setChannel(0,{...s(o),dynamic:!1},"prep"),d=h.canvas}function g(h){let E=h.palette.map(T=>T.join(",")).join(";");if(E===f)return;f=E;let p=i.getContext("2d"),_=p.createImageData(256,1);h.palette.forEach((T,R)=>_.data.set([T[0],T[1],T[2],255],R*4)),p.putImageData(_,0,0)}function x(h){let E=h?`${h.w}x${h.h}:${h.levels}:${h.values.join(",")}`:"none";if(E===m)return;m=E;let p=h||{w:1,h:1,values:[0]};a.width=p.w,a.height=p.h;let _=a.getContext("2d"),T=_.createImageData(p.w,p.h);for(let R=0;R<p.values.length;R++)T.data.set([p.values[R],0,0,255],R*4);_.putImageData(T,0,0)}async function y(h,E){let p=h.settings;await b(E),h.quantize&&g(h),x(h.map),(c.width!==h.width||c.height!==h.height)&&c.setSize(h.width,h.height);let _=h.kind==="diffusion",T=new Array(Vt).fill(null).map((D,Z)=>h.kernel&&h.kernel[Z]||[0,0,0]);c.set({u_count:h.palette.length||1,u_distance:h.distance,u_resample:p.size.resample==="nearest"?1:0,u_adjust:[p.adjust.brightness,p.adjust.contrast,p.adjust.saturation,p.adjust.gamma],u_hue:p.adjust.hue,u_crop:[h.crop.x,h.crop.y,h.crop.w,h.crop.h],u_alphaCut:p.alpha.threshold,u_mode:h.quantize?h.kind==="ordered"?2:1:0,u_levels:h.map?h.map.levels:1,u_amount:h.map?h.spread*p.dither.strength:0,u_skew:h.skew,u_strength:p.dither.strength,u_kn:h.kernel?h.kernel.length:0,u_kernel:new Float32Array(T.flat()),u_outline:{none:0,outer:1,inner:2}[h.outline.mode],u_corners:h.outline.corners?1:0,u_outlineColor:h.outline.color.map(D=>D/255)}),u("diffuse",{u_on:_?1:0}),u("resolve",{u_on:_?1:0}),u("orphan",{u_on:p.cleanup.orphans?1:0}),u("smooth",{u_on:p.cleanup.smooth?1:0}),c.getPass("diffuse").cfg.iterations=_?h.waves:1;let{data:R}=c.readPixels(),S=h.width,O=h.height,L=new Uint8ClampedArray(S*O*4),X=S*4;for(let D=0;D<O;D++)L.set(R.subarray((O-1-D)*X,(O-D)*X),D*X);return L}return{name:"webgl",renderer:n,software:/swiftshader|llvmpipe|softpipe|software|basic render/i.test(n),run:y,shader:c,destroy(){c.destroy()}}}var rn=typeof document<"u",jr=e=>e&&typeof e=="object"&&"data"in e&&"width"in e&&"height"in e&&e.data&&e.data.length===e.width*e.height*4;async function on(e){if(typeof Blob<"u"&&e instanceof Blob){if(typeof createImageBitmap=="function")try{return await createImageBitmap(e)}catch{}e=URL.createObjectURL(e)}if(!rn)throw new Error("Loading images by URL needs a browser; pass { width, height, data } in Node.");let t=new Image;return t.crossOrigin="anonymous",t.decoding="async",t.src=e,await t.decode(),t}function ea(e){return{width:e.naturalWidth||e.videoWidth||e.displayWidth||e.codedWidth||e.width||0,height:e.naturalHeight||e.videoHeight||e.displayHeight||e.codedHeight||e.height||0}}function ta(e){if(e&&!jr(e)&&typeof e=="object"){if(e.canvas&&typeof e.canvas=="object"&&"getContext"in e.canvas)return e.canvas;if(e.elt&&typeof e.elt=="object"&&"getContext"in e.elt)return e.elt}return e}async function Ye(e,t={}){let n=t.maxSize||4096,r=ta(e);if((typeof r=="string"||typeof Blob<"u"&&r instanceof Blob)&&(r=await on(r)),r&&typeof r.complete=="boolean"&&!r.complete&&r.decode&&await r.decode(),jr(r)){let u={width:r.width,height:r.height,data:r.data,canvas:null};return rn&&Object.defineProperty(u,"canvas",{configurable:!0,get(){let d=document.createElement("canvas");d.width=r.width,d.height=r.height;let f=new ImageData(new Uint8ClampedArray(r.data),r.width,r.height);return d.getContext("2d").putImageData(f,0,0),Object.defineProperty(u,"canvas",{value:d}),d}}),u}if(!rn)throw new Error("Unsupported source in a non-browser environment. Pass { width, height, data }.");let{width:o,height:i}=ea(r);if(!o||!i)throw new Error("Source has no size yet (is the image or video loaded?)");let a=Math.min(1,n/Math.max(o,i));o=Math.max(1,Math.round(o*a)),i=Math.max(1,Math.round(i*a));let s=t.canvas||document.createElement("canvas");s.width=o,s.height=i;let c=s.getContext("2d",{willReadFrequently:!0});c.clearRect(0,0,o,i),c.imageSmoothingEnabled=a<1,c.imageSmoothingQuality="high",c.drawImage(r,0,0,o,i);let l=null;return{width:o,height:i,canvas:s,dirty:!0,get data(){return l||(l=c.getImageData(0,0,o,i).data)}}}le();function pe(e,t=1,n={}){t=Math.max(1,Math.round(t));let r=e.width*t,o=e.height*t,i=new Uint8ClampedArray(r*o*4),a=e.data,s=e.width;for(let c=0;c<o;c++){let l=c/t|0;for(let u=0;u<r;u++){let d=(l*s+(u/t|0))*4,f=(c*r+u)*4;i[f]=a[d],i[f+1]=a[d+1],i[f+2]=a[d+2],i[f+3]=a[d+3]}}if(n.grid&&t>=3){let[c,l,u]=oe(n.gridColor||"#000000"),d=n.gridAlpha??.35;for(let f=0;f<o;f++)for(let m=0;m<r;m++){if(m%t&&f%t)continue;let b=(f*r+m)*4,g=i[b+3]/255,x=d+g*(1-d);i[b]=(c*d+i[b]*g*(1-d))/x,i[b+1]=(l*d+i[b+1]*g*(1-d))/x,i[b+2]=(u*d+i[b+2]*g*(1-d))/x,i[b+3]=x*255}}return{width:r,height:o,data:i}}function yt(e,t,n){t=Math.max(1,Math.round(t)),n=Math.max(1,Math.round(n));let r=new Uint8ClampedArray(t*n*4),o=new Int32Array(t);for(let i=0;i<t;i++)o[i]=Math.min(e.width-1,Math.floor((i+.5)*e.width/t));for(let i=0;i<n;i++){let a=Math.min(e.height-1,Math.floor((i+.5)*e.height/n));for(let s=0;s<t;s++){let c=(a*e.width+o[s])*4,l=(i*t+s)*4;r[l]=e.data[c],r[l+1]=e.data[c+1],r[l+2]=e.data[c+2],r[l+3]=e.data[c+3]}}return{width:t,height:n,data:r}}function Et(e,t=1/0){let n=new Set,r=e.data;for(let o=0;o<r.length&&!(r[o+3]!==0&&(n.add(r[o]<<16|r[o+1]<<8|r[o+2]),n.size>t));o+=4);return[...n].map(o=>we([o>>16,o>>8&255,o&255]))}function Gr(e){for(let t=3;t<e.data.length;t+=4)if(e.data[t]<255)return!0;return!1}function zr(e,t=8){let{width:n,height:r,data:o}=e,i=(u,d)=>Math.abs(o[u]-o[d])<=t&&Math.abs(o[u+1]-o[d+1])<=t&&Math.abs(o[u+2]-o[d+2])<=t&&Math.abs(o[u+3]-o[d+3])<=t,a=(u,d)=>d?a(d,u%d):u,s=0,c=Math.max(1,Math.floor(r/64)),l=Math.max(1,Math.floor(n/64));for(let u=0;u<r;u+=c){let d=1;for(let f=1;f<n;f++)if(i((u*n+f)*4,(u*n+f-1)*4))d++;else if(s=a(s,d),d=1,s===1)return 1}for(let u=0;u<n;u+=l){let d=1;for(let f=1;f<r;f++)if(i((f*n+u)*4,((f-1)*n+u)*4))d++;else if(s=a(s,d),d=1,s===1)return 1}return s||1}function vt(e,t=1,n={}){let r=t>1||n.grid?pe(e,t,n):e,o=n.canvas||document.createElement("canvas");return o.width=r.width,o.height=r.height,o.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(r.data),r.width,r.height),0,0),o}function Hr(e,t,n="application/octet-stream"){let r=e instanceof Blob?e:new Blob([e],{type:n}),o=URL.createObjectURL(r),i=document.createElement("a");i.href=o,i.download=t,i.rel="noopener",document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(o),1e4)}var _t=null;function Tt(e,t=0){if(!_t){_t=new Uint32Array(256);for(let n=0;n<256;n++){let r=n;for(let o=0;o<8;o++)r=r&1?3988292384^r>>>1:r>>>1;_t[n]=r>>>0}}t=~t>>>0;for(let n=0;n<e.length;n++)t=_t[(t^e[n])&255]^t>>>8;return~t>>>0}var na=[137,80,78,71,13,10,26,10];async function ra(e){if(typeof CompressionStream=="function"){let n=new CompressionStream("deflate"),r=new Blob([e]).stream().pipeThrough(n);return new Uint8Array(await new Response(r).arrayBuffer())}let{deflateSync:t}=await import("node:zlib");return new Uint8Array(t(e))}function Ie(e,t){let n=new Uint8Array(12+t.length),r=new DataView(n.buffer);r.setUint32(0,t.length);for(let o=0;o<4;o++)n[4+o]=e.charCodeAt(o);return n.set(t,8),r.setUint32(8+t.length,Tt(n.subarray(4,8+t.length))),n}function oa(e){let t=e.data,n=e.width*e.height,r=new Map,o=[],i=new Uint8Array(n);for(let a=0;a<n;a++){let s=a*4,c=t[s+3]===0?-1:(t[s]<<24|t[s+1]<<16|t[s+2]<<8|t[s+3])>>>0,l=r.get(c);if(l===void 0){if(o.length===256)return null;l=o.length,r.set(c,l),o.push(c===-1?[0,0,0,0]:[t[s],t[s+1],t[s+2],t[s+3]])}i[a]=l}return{colors:o,indices:i}}async function $e(e,t={}){t.width&&t.height?e=yt(e,t.width,t.height):(t.scale&&t.scale>1||t.grid)&&(e=pe(e,t.scale||1,t));let{width:n,height:r}=e,o=t.indexed===!1?null:oa(e),i=new Uint8Array(13),a=new DataView(i.buffer);a.setUint32(0,n),a.setUint32(4,r);let s=[new Uint8Array(na)],c;if(o){let f=o.colors.length<=2?1:o.colors.length<=4?2:o.colors.length<=16?4:8;i.set([f,3,0,0,0],8);let m=Math.ceil(n*f/8);c=new Uint8Array((m+1)*r);for(let b=0;b<r;b++){let g=b*(m+1)+1;for(let x=0;x<n;x++){let y=o.indices[b*n+x],h=x*f;c[g+(h>>3)]|=y<<8-f-(h&7)}}if(s.push(Ie("IHDR",i)),s.push(Ie("PLTE",Uint8Array.from(o.colors.flatMap(b=>b.slice(0,3))))),o.colors.some(b=>b[3]<255)){let b=o.colors.length;for(;b>0&&o.colors[b-1][3]===255;)b--;s.push(Ie("tRNS",Uint8Array.from(o.colors.slice(0,b).map(g=>g[3]))))}}else{i.set([8,6,0,0,0],8),c=new Uint8Array((n*4+1)*r);for(let f=0;f<r;f++)c.set(e.data.subarray?e.data.subarray(f*n*4,(f+1)*n*4):Array.prototype.slice.call(e.data,f*n*4,(f+1)*n*4),f*(n*4+1)+1);s.push(Ie("IHDR",i))}s.push(Ie("IDAT",await ra(c))),s.push(Ie("IEND",new Uint8Array(0)));let l=s.reduce((f,m)=>f+m.length,0),u=new Uint8Array(l),d=0;for(let f of s)u.set(f,d),d+=f.length;return u}var fa=e=>typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement,ua=e=>typeof VideoFrame<"u"&&e instanceof VideoFrame;async function Mt(e={}){let t=e.backend||"auto",n=null,r=null;if(t!=="cpu"&&typeof document<"u")try{n=await Xr()}catch(l){if(r=l,t==="webgl")throw l}let o=typeof document<"u"?document.createElement("canvas"):null,i={source:null,frame:null},a=Promise.resolve();async function s(l){if(l===i.source&&i.frame&&!fa(l)&&!ua(l))return i.frame.dirty=!1,i.frame;let u=await Ye(l,{maxSize:e.maxSourceSize,canvas:o});return i={source:l,frame:u},u}async function c(l,u){let d=typeof performance<"u"?performance.now():Date.now(),f=await s(l),m=pt(u,f),b,g="cpu",x=m.kind==="diffusion"&&(e.diffusion==="cpu"||e.diffusion!=="gpu"&&n&&n.software);n&&f.canvas&&!x?(b=await n.run(m,f),g="webgl"):b=bt(m,f);let y=(typeof performance<"u"?performance.now():Date.now())-d;return un(m,b,g,y)}return{get backend(){return n?"webgl":"cpu"},get renderer(){return n?n.renderer:""},get fallbackReason(){return r?String(r.message||r):""},process(l,u={}){let d=a.then(()=>c(l,u));return a=d.catch(()=>{}),d},invalidate(){i={source:null,frame:null}},destroy(){n&&n.destroy(),n=null},get shader(){return n?n.shader:null}}}function un(e,t,n="cpu",r=0){return{width:e.width,height:e.height,data:t,palette:e.paletteHex?e.paletteHex.slice():null,settings:e.settings,kind:e.kind,waves:e.waves,crop:{x:e.crop.x/e.srcWidth,y:e.crop.y/e.srcHeight,w:e.crop.w/e.srcWidth,h:e.crop.h/e.srcHeight},backend:n,ms:r,usedColors(){return Et(this)},toImageData(){return new ImageData(new Uint8ClampedArray(this.data),this.width,this.height)},toCanvas(i=1,a={}){return vt(this,i,a)},toPNG(i={}){return $e(this,i)},async toBlob(i={}){return new Blob([await $e(this,i)],{type:"image/png"})}}}var At=null;async function Jr(e,t){return t===void 0&&e&&typeof e=="object"&&"image"in e&&"width"in e?la(e):(At||(At=Mt()),(await At).process(e,t))}async function la(e){let{image:t,width:n,dither:r="none",strength:o=0,palette:i=null,resolution:a="original"}=e,s={source:"none"};if(Array.isArray(i))s={source:"custom",colors:i};else if(typeof i=="string"){let{fetchLospec:d}=await Promise.resolve().then(()=>(fn(),qr)),f=await d(i);s={source:"custom",colors:f.colors,name:f.name}}let c=ie({size:{width:n},palette:s,dither:{method:at[String(r).toLowerCase()]||"none",strength:o/100},alpha:{threshold:0}});At||(At=Mt());let u=await(await At).process(t,c);if(a==="original"){let d=await Ye(t),f=document.createElement("canvas");f.width=d.width,f.height=d.height;let m=f.getContext("2d");return m.imageSmoothingEnabled=!1,m.drawImage(u.toCanvas(1),0,0,f.width,f.height),f}return u.toCanvas(1)}sn();fn();var ln=[{id:"balanced",name:"Balanced",description:"Endesga 32, Bayer 4\xD74. A good first look at most photos.",settings:{size:{width:96},palette:{source:"builtin",id:"endesga-32"},dither:{method:"bayer4",strength:.6}}},{id:"game-boy",name:"Game Boy",description:"Four greens, 160 px wide, ordered dither.",settings:{size:{width:160},palette:{source:"builtin",id:"game-boy-dmg"},dither:{method:"bayer4",strength:1},adjust:{contrast:.15}}},{id:"pico-8",name:"PICO-8",description:"128 px, the PICO-8 palette, blue-noise dither.",settings:{size:{width:128},palette:{source:"builtin",id:"pico-8"},dither:{method:"bluenoise",strength:.7}}},{id:"one-bit",name:"1-bit Atkinson",description:"Classic Mac look: two colours, Atkinson diffusion.",settings:{size:{width:192},palette:{source:"builtin",id:"1-bit-monitor"},dither:{method:"atkinson",strength:1},adjust:{contrast:.2}}},{id:"faithful",name:"Faithful colour",description:"Palette extracted from the image, Floyd\u2013Steinberg.",settings:{size:{width:128},palette:{source:"extract",count:24},dither:{method:"floyd-steinberg",strength:.75}}},{id:"sprite",name:"Clean sprite",description:"No dither, nearest resample, orphan cleanup and a dark outline. For art with transparency.",settings:{size:{width:48,resample:"nearest"},palette:{source:"extract",count:12},dither:{method:"none"},cleanup:{orphans:!0},outline:{mode:"outer",color:"#1a1c2c"}}},{id:"cga",name:"CGA",description:"16 hard colours with an 8\xD78 Bayer pattern.",settings:{size:{width:160},palette:{source:"builtin",id:"cga-16"},dither:{method:"bayer8",strength:1}}},{id:"newsprint",name:"Newsprint",description:"Grey clustered-dot halftone.",settings:{size:{width:220},palette:{source:"builtin",id:"grayscale-4"},dither:{method:"cluster8",strength:1},adjust:{saturation:-1}}},{id:"soft",name:"Soft painterly",description:"Resurrect 64 with Sierra Lite and a light smooth.",settings:{size:{width:112},palette:{source:"builtin",id:"resurrect-64"},dither:{method:"sierra-lite",strength:.6},cleanup:{smooth:!0}}}],Zr=e=>ln.find(t=>t.id===e)||null;le();le();var mn=class{constructor(){this.buf=new Uint8Array(65536),this.n=0}byte(t){if(this.n===this.buf.length){let n=new Uint8Array(this.buf.length*2);n.set(this.buf),this.buf=n}this.buf[this.n++]=t}bytes(t){for(let n=0;n<t.length;n++)this.byte(t[n])}u16(t){this.byte(t&255),this.byte(t>>8&255)}str(t){for(let n=0;n<t.length;n++)this.byte(t.charCodeAt(n))}result(){return this.buf.slice(0,this.n)}};function da(e,t,n){let r=1<<t,o=r+1,i=t+1,a=o+1,s=new Map,c=0,l=0,u=[],d=[],f=b=>{for(c|=b<<l,l+=i;l>=8;)d.push(c&255),c>>>=8,l-=8,d.length===255&&(u.push(d),d=[])};f(r);let m=e[0];for(let b=1;b<e.length;b++){let g=e[b],x=m*256+g,y=s.get(x);if(y!==void 0){m=y;continue}f(m),a<4096?(s.set(x,a++),a>1<<i&&i<12&&i++):(f(r),s=new Map,i=t+1,a=o+1),m=g}f(m),f(o),l>0&&d.push(c&255),d.length&&u.push(d),n.byte(t);for(let b of u)n.byte(b.length),n.bytes(b);n.byte(0)}var dn=(e,t)=>e[t+3]<128?-1:e[t]<<16|e[t+1]<<8|e[t+2];function Qr(e,t){let n=[...e].filter(s=>s!==-1),r=n.map(s=>[s>>16,s>>8&255,s&255]),o=t?r.length:-1;t&&r.push([0,0,0]);let i=1;for(;1<<i<r.length;)i++;for(;r.length<1<<i;)r.push([0,0,0]);let a=new Map(n.map((s,c)=>[s,c]));return{colors:r,bits:i,tIndex:o,index:a}}function ma(e,t){let n=Le(e,t).map(oe),r=new Uint8ClampedArray(e.data),o=new Map;for(let i=0;i<r.length;i+=4){if(r[i+3]<128)continue;let a=r[i]<<16|r[i+1]<<8|r[i+2],s=o.get(a);if(s===void 0){let c=1/0;s=0;for(let l=0;l<n.length;l++){let u=r[i]-n[l][0],d=r[i+1]-n[l][1],f=r[i+2]-n[l][2],m=u*u*3+d*d*4+f*f*2;m<c&&(c=m,s=l)}o.set(a,s)}r.set(n[s],i)}return{...e,data:r}}function eo(e,t={}){if(!e.length)throw new Error("No frames");let n=Math.max(1,Math.round(t.scale||1)),r=e.map(m=>({...n>1?pe(m,n):m,delay:m.delay??t.delay??100})),o=r[0].width,i=r[0].height,a=!1,s=new Set,c=r.map(m=>{let b=new Set;for(let g=0;g<m.data.length;g+=4){let x=dn(m.data,g);x===-1&&(a=!0),b.add(x),s.add(x)}return b}),l=m=>m.size-(m.has(-1)?1:0),d=l(s)+(a?1:0)<=256?Qr(s,a):null,f=new mn;if(f.str("GIF89a"),f.u16(o),f.u16(i),f.byte(d?240|d.bits-1:0),f.byte(0),f.byte(0),d)for(let m of d.colors)f.bytes(m);return r.length>1&&t.loop!==-1&&(f.byte(33),f.byte(255),f.byte(11),f.str("NETSCAPE2.0"),f.byte(3),f.byte(1),f.u16(t.loop||0),f.byte(0)),r.forEach((m,b)=>{let g=m,x=d,y=c[b];if(!x){let E=a?255:256;if(l(y)>E){g=ma(m,E),y=new Set;for(let p=0;p<g.data.length;p+=4)y.add(dn(g.data,p))}x=Qr(y,y.has(-1))}if(f.byte(33),f.byte(249),f.byte(4),f.byte((a?2:1)<<2|(x.tIndex>=0?1:0)),f.u16(Math.max(2,Math.round(g.delay/10))),f.byte(x.tIndex>=0?x.tIndex:0),f.byte(0),f.byte(44),f.u16(0),f.u16(0),f.u16(o),f.u16(i),f.byte(x===d?0:128|x.bits-1),x!==d)for(let E of x.colors)f.bytes(E);let h=new Uint8Array(o*i);for(let E=0;E<h.length;E++){let p=dn(g.data,E*4);h[E]=p===-1?x.tIndex:x.index.get(p)}da(h,Math.max(2,x.bits),f)}),f.byte(59),f.result()}var to=new TextEncoder;function no(e){let t=[],n=[],r=0,o=new Set;for(let u of e){let d=u.name.replace(/\\/g,"/").replace(/^\/+/,"");if(o.has(d)){let T=/^(.*?)(\.[^.]*)?$/.exec(d),R=2;for(;o.has(`${T[1]}-${R}${T[2]||""}`);)R++;d=`${T[1]}-${R}${T[2]||""}`}o.add(d);let f=to.encode(d),m=typeof u.data=="string"?to.encode(u.data):u.data,b=Tt(m),g=u.date||new Date,x=g.getHours()<<11|g.getMinutes()<<5|g.getSeconds()>>1,y=g.getFullYear()-1980<<9|g.getMonth()+1<<5|g.getDate(),h=new Uint8Array(30+f.length),E=new DataView(h.buffer);E.setUint32(0,67324752,!0),E.setUint16(4,20,!0),E.setUint16(6,2048,!0),E.setUint16(8,0,!0),E.setUint16(10,x,!0),E.setUint16(12,y,!0),E.setUint32(14,b,!0),E.setUint32(18,m.length,!0),E.setUint32(22,m.length,!0),E.setUint16(26,f.length,!0),E.setUint16(28,0,!0),h.set(f,30);let p=new Uint8Array(46+f.length),_=new DataView(p.buffer);_.setUint32(0,33639248,!0),_.setUint16(4,20,!0),_.setUint16(6,20,!0),_.setUint16(8,2048,!0),_.setUint16(10,0,!0),_.setUint16(12,x,!0),_.setUint16(14,y,!0),_.setUint32(16,b,!0),_.setUint32(20,m.length,!0),_.setUint32(24,m.length,!0),_.setUint16(28,f.length,!0),_.setUint32(42,r,!0),p.set(f,46),t.push(h,m),n.push(p),r+=h.length+m.length}let i=n.reduce((u,d)=>u+d.length,0),a=new Uint8Array(22),s=new DataView(a.buffer);s.setUint32(0,101010256,!0),s.setUint16(8,e.length,!0),s.setUint16(10,e.length,!0),s.setUint32(12,i,!0),s.setUint32(16,r,!0);let c=new Uint8Array(r+i+22),l=0;for(let u of[...t,...n,a])c.set(u,l),l+=u.length;return c}var hn=(e,t)=>({width:e,height:t,data:new Uint8ClampedArray(e*t*4)});function ha(e,t,n,r,o=0,i=0,a=t.width,s=t.height){for(let c=0;c<s;c++){let l=((i+c)*t.width+o)*4,u=((r+c)*e.width+n)*4;e.data.set(t.data.subarray?t.data.subarray(l,l+a*4):Array.prototype.slice.call(t.data,l,l+a*4),u)}}function pn(e,t={}){if(!e.length)throw new Error("No frames");let n=Math.max(0,t.padding|0),r=Math.max(...e.map(f=>f.width)),o=Math.max(...e.map(f=>f.height)),i=Math.max(1,Math.min(e.length,t.columns||Math.ceil(Math.sqrt(e.length)))),a=Math.ceil(e.length/i),s=i*r+(i-1)*n,c=a*o+(a-1)*n,l=hn(s,c),u={};e.forEach((f,m)=>{let b=m%i*(r+n),g=Math.floor(m/i)*(o+n);ha(l,f,b,g),u[f.name||`frame-${String(m).padStart(3,"0")}`]={frame:{x:b,y:g,w:f.width,h:f.height},sourceSize:{w:f.width,h:f.height},...f.delay!=null?{duration:Math.round(f.delay)}:{}}});let d={frames:u,meta:{app:"image-to-pixel",image:(t.name||"sheet")+".png",size:{w:s,h:c},scale:"1",columns:i,rows:a,padding:n}};return{image:l,atlas:d}}function ro(e,t={}){let n=Math.max(1,t.tileWidth||8),r=Math.max(1,t.tileHeight||n),o=Math.ceil(e.width/n),i=Math.ceil(e.height/r),a=[],s=new Map,c=[],l=[],u=(b,g)=>{let x=hn(n,r);for(let y=0;y<r;y++)for(let h=0;h<n;h++){let E=b*n+h,p=g*r+y;if(E>=e.width||p>=e.height)continue;let _=(p*e.width+E)*4;x.data.set([e.data[_],e.data[_+1],e.data[_+2],e.data[_+3]],(y*n+h)*4)}return x},d=b=>{let g="";for(let x=0;x<b.data.length;x+=4)g+=b.data[x+3]===0?".":String.fromCharCode(b.data[x]+1,b.data[x+1]+1,b.data[x+2]+1);return g},f=(b,g,x)=>{let y=hn(n,r);for(let h=0;h<r;h++)for(let E=0;E<n;E++){let p=((x?r-1-h:h)*n+(g?n-1-E:E))*4;y.data.set(b.data.subarray(p,p+4),(h*n+E)*4)}return y};for(let b=0;b<i;b++)for(let g=0;g<o;g++){let x=u(g,b),y=s.get(d(x)),h=0;if(y===void 0&&t.flips)for(let[E,p,_]of[[1,0,1],[0,1,2],[1,1,3]]){let T=s.get(d(f(x,E,p)));if(T!==void 0){y=T,h=_;break}}y===void 0&&(y=a.length,a.push(x),s.set(d(x),y)),c.push(y),l.push(h)}return{image:pn(a,{columns:t.columns||Math.min(16,a.length)}).image,map:{width:o,height:i,tileWidth:n,tileHeight:r,tiles:c,...t.flips?{flips:l}:{}},count:a.length}}var pa=(e,t,n=4e3)=>new Promise((r,o)=>{let i=setTimeout(()=>{e.removeEventListener(t,a),o(new Error(`Timed out waiting for "${t}"`))},n),a=()=>{clearTimeout(i),r()};e.addEventListener(t,a,{once:!0})}),ba={1:"loading was aborted",2:"a network error stopped the download",3:"the browser could not decode it",4:"this browser can't play this video's format"};function Rt(e){let t=e.error?e.error.code:0,n=new Error(ba[t]||"the video could not be loaded");return n.code=t,e.error&&e.error.message&&(n.detail=e.error.message),n}var oo=(e,t,n)=>new Promise((r,o)=>{let i=()=>{clearTimeout(c),e.removeEventListener(t,a),e.removeEventListener("error",s)},a=()=>{i(),r()},s=()=>{i(),o(Rt(e))},c=setTimeout(()=>{i(),o(new Error(`no response from the video decoder after ${n/1e3} s`))},n);e.addEventListener(t,a,{once:!0}),e.addEventListener("error",s,{once:!0})});async function kt(e,{timeout:t=6e4}={}){if(e.error)throw Rt(e);return e.readyState<1&&await oo(e,"loadedmetadata",t),e.readyState<2&&await oo(e,"loadeddata",t).catch(n=>{if(n.code)throw n}),e}async function io(e){let t=new Uint8Array(await e.arrayBuffer()),n={avc1:"H.264",avc3:"H.264",hvc1:"H.265 (HEVC)",hev1:"H.265 (HEVC)",av01:"AV1",vp09:"VP9",vp08:"VP8",mp4v:"MPEG-4 Part 2",apcn:"ProRes",apch:"ProRes",apcs:"ProRes",apco:"ProRes",ap4h:"ProRes 4444",dvh1:"Dolby Vision",dvhe:"Dolby Vision"};for(let i=0;i+24<t.length;i++)if(t[i]===115&&t[i+1]===116&&t[i+2]===115&&t[i+3]===100){let a=String.fromCharCode(t[i+16],t[i+17],t[i+18],t[i+19]);if(n[a])return n[a]}let r=new TextDecoder("latin1").decode(t.subarray(0,Math.min(t.length,1<<20))),o=/V_(VP8|VP9|AV1|MPEG4\/ISO\/AVC|MPEGH\/ISO\/HEVC)/.exec(r);return o?{VP8:"VP8",VP9:"VP9",AV1:"AV1","MPEG4/ISO/AVC":"H.264","MPEGH/ISO/HEVC":"H.265 (HEVC)"}[o[1]]:""}async function Ct(e,t){if(t=Math.max(0,Math.min(t,(e.duration||0)-1e-4)),Math.abs(e.currentTime-t)<1e-6&&e.readyState>=2)return;let n="requestVideoFrameCallback"in e?new Promise(o=>{e.requestVideoFrameCallback(()=>o()),setTimeout(o,500)}):null,r=pa(e,"seeked");e.currentTime=t,await r,n&&await n}async function ao(e,t=30){if(!("requestVideoFrameCallback"in e))return t;await kt(e);let n={t:e.currentTime,muted:e.muted,paused:e.paused},r=[];try{e.muted=!0,await new Promise(a=>{let s=setTimeout(a,1200),c=(l,u)=>{r.push(u.mediaTime),r.length>=12?(clearTimeout(s),a()):e.requestVideoFrameCallback(c)};e.requestVideoFrameCallback(c),e.play().catch(()=>{clearTimeout(s),a()})})}finally{e.pause(),e.muted=n.muted,await Ct(e,n.t).catch(()=>{})}let o=[];for(let a=1;a<r.length;a++){let s=r[a]-r[a-1];s>.001&&o.push(s)}if(o.length<3)return t;o.sort((a,s)=>a-s);let i=1/o[Math.floor(o.length/2)];for(let a of[12,15,23.976,24,25,29.97,30,48,50,59.94,60])if(Math.abs(i-a)<.6)return a;return Math.round(i)}function bn({duration:e,fps:t,start:n=0,end:r=e,maxFrames:o=1/0}){let i=[],a=Math.min(o,Math.max(1,Math.floor((r-n)*t+1e-6)));for(let s=0;s<a;s++)i.push(n+(s+.5)/t);return i}async function so(e,t){await kt(e);let n=e.paused;e.pause();let r=bn({duration:e.duration,...t});for(let o=0;o<r.length;o++){if(t.signal&&t.signal.aborted)throw new DOMException("Aborted","AbortError");await Ct(e,r[o]),await t.onFrame({index:o,time:r[o],total:r.length})}return n||e.play().catch(()=>{}),r.length}var wa="3.0.0";return Ao(xa);})();
301
+ `;var Ve=(e,t)=>{let n=document.createElement("canvas");return n.width=e,n.height=t,n};async function Xr(){if(typeof document>"u")throw new Error("No DOM");let e=Ve(1,1).getContext("webgl2");if(!e)throw new Error("WebGL 2 is not available");if(!e.getExtension("EXT_color_buffer_float"))throw new Error("Float render targets are not available");let t=e.getExtension("WEBGL_debug_renderer_info"),n=String(t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER));e.getExtension("WEBGL_lose_context")?.loseContext();let r=Ve(1,1),o=Ve(1,1),i=Ve(256,1),a=Ve(1,1),s=h=>({element:h,filter:"nearest",wrap:"clamp"}),c=Ur({canvas:r,webgl:2,size:[1,1],pixelRatio:1,autoplay:!1,pauseWhenHidden:!1,pointer:!1,errorOverlay:!1,warnMissingUniforms:!1,preserveDrawingBuffer:!0,premultipliedAlpha:!1,antialias:!1,dialect:"shadermate",common:Pr,samplers:{u_palette:s(i),u_matrix:s(a)},uniforms:{u_count:1,u_distance:0,u_resample:0,u_adjust:[0,0,0,1],u_hue:0,u_crop:[0,0,1,1],u_alphaCut:.5,u_mode:0,u_levels:1,u_amount:0,u_skew:1,u_strength:1,u_kn:0,u_kernel:new Float32Array(Vt*3),u_outline:0,u_corners:0,u_outlineColor:[0,0,0]},passes:[{name:"prep",shader:Lr,float:"full",filter:"nearest",channels:[{...s(o),dynamic:!1}]},{name:"quant",shader:Ir,filter:"nearest",channels:["prep"]},{name:"diffuse",shader:Fr,float:"full",filter:"nearest",pingpong:!0,iterations:2,channels:["prep","diffuse"]},{name:"resolve",shader:Or,filter:"nearest",channels:["quant","diffuse"]},{name:"orphan",shader:Dr,filter:"nearest",channels:["resolve"]},{name:"smooth",shader:Nr,filter:"nearest",channels:["orphan"]},{name:"out",shader:Br,screen:!0,channels:["smooth"]}]}),l=null;if(c.on("error",h=>{l=h}),await c.ready,l||c.error)throw c.destroy(),l||c.error;let u=(h,E)=>{for(let p in E)c.set(p,E[p],h)},d=null,f="",m="";async function b(h){if(h.canvas===d&&!h.dirty)return;o.width=h.width,o.height=h.height;let E=o.getContext("2d");E.clearRect(0,0,o.width,o.height),E.drawImage(h.canvas,0,0),await c.setChannel(0,{...s(o),dynamic:!1},"prep"),d=h.canvas}function g(h){let E=h.palette.map(T=>T.join(",")).join(";");if(E===f)return;f=E;let p=i.getContext("2d"),_=p.createImageData(256,1);h.palette.forEach((T,M)=>_.data.set([T[0],T[1],T[2],255],M*4)),p.putImageData(_,0,0)}function x(h){let E=h?`${h.w}x${h.h}:${h.levels}:${h.values.join(",")}`:"none";if(E===m)return;m=E;let p=h||{w:1,h:1,values:[0]};a.width=p.w,a.height=p.h;let _=a.getContext("2d"),T=_.createImageData(p.w,p.h);for(let M=0;M<p.values.length;M++)T.data.set([p.values[M],0,0,255],M*4);_.putImageData(T,0,0)}async function y(h,E){let p=h.settings;await b(E),h.quantize&&g(h),x(h.map),(c.width!==h.width||c.height!==h.height)&&c.setSize(h.width,h.height);let _=h.kind==="diffusion",T=new Array(Vt).fill(null).map((D,Z)=>h.kernel&&h.kernel[Z]||[0,0,0]);c.set({u_count:h.palette.length||1,u_distance:h.distance,u_resample:p.size.resample==="nearest"?1:0,u_adjust:[p.adjust.brightness,p.adjust.contrast,p.adjust.saturation,p.adjust.gamma],u_hue:p.adjust.hue,u_crop:[h.crop.x,h.crop.y,h.crop.w,h.crop.h],u_alphaCut:p.alpha.threshold,u_mode:h.quantize?h.kind==="ordered"?2:1:0,u_levels:h.map?h.map.levels:1,u_amount:h.map?h.spread*p.dither.strength:0,u_skew:h.skew,u_strength:p.dither.strength,u_kn:h.kernel?h.kernel.length:0,u_kernel:new Float32Array(T.flat()),u_outline:{none:0,outer:1,inner:2}[h.outline.mode],u_corners:h.outline.corners?1:0,u_outlineColor:h.outline.color.map(D=>D/255)}),u("diffuse",{u_on:_?1:0}),u("resolve",{u_on:_?1:0}),u("orphan",{u_on:p.cleanup.orphans?1:0}),u("smooth",{u_on:p.cleanup.smooth?1:0}),c.getPass("diffuse").cfg.iterations=_?h.waves:1;let{data:M}=c.readPixels(),S=h.width,O=h.height,L=new Uint8ClampedArray(S*O*4),X=S*4;for(let D=0;D<O;D++)L.set(M.subarray((O-1-D)*X,(O-D)*X),D*X);return L}return{name:"webgl",renderer:n,software:/swiftshader|llvmpipe|softpipe|software|basic render/i.test(n),run:y,shader:c,destroy(){c.destroy()}}}var rn=typeof document<"u",jr=e=>e&&typeof e=="object"&&"data"in e&&"width"in e&&"height"in e&&e.data&&e.data.length===e.width*e.height*4;async function on(e){if(typeof Blob<"u"&&e instanceof Blob){if(typeof createImageBitmap=="function")try{return await createImageBitmap(e)}catch{}e=URL.createObjectURL(e)}if(!rn)throw new Error("Loading images by URL needs a browser; pass { width, height, data } in Node.");let t=new Image;return t.crossOrigin="anonymous",t.decoding="async",t.src=e,await t.decode(),t}function ea(e){return{width:e.naturalWidth||e.videoWidth||e.displayWidth||e.codedWidth||e.width||0,height:e.naturalHeight||e.videoHeight||e.displayHeight||e.codedHeight||e.height||0}}function ta(e){if(e&&!jr(e)&&typeof e=="object"){if(e.canvas&&typeof e.canvas=="object"&&"getContext"in e.canvas)return e.canvas;if(e.elt&&typeof e.elt=="object"&&"getContext"in e.elt)return e.elt}return e}async function Ye(e,t={}){let n=t.maxSize||4096,r=ta(e);if((typeof r=="string"||typeof Blob<"u"&&r instanceof Blob)&&(r=await on(r)),r&&typeof r.complete=="boolean"&&!r.complete&&r.decode&&await r.decode(),jr(r)){let u={width:r.width,height:r.height,data:r.data,canvas:null};return rn&&Object.defineProperty(u,"canvas",{configurable:!0,get(){let d=document.createElement("canvas");d.width=r.width,d.height=r.height;let f=new ImageData(new Uint8ClampedArray(r.data),r.width,r.height);return d.getContext("2d").putImageData(f,0,0),Object.defineProperty(u,"canvas",{value:d}),d}}),u}if(!rn)throw new Error("Unsupported source in a non-browser environment. Pass { width, height, data }.");let{width:o,height:i}=ea(r);if(!o||!i)throw new Error("Source has no size yet (is the image or video loaded?)");let a=Math.min(1,n/Math.max(o,i));o=Math.max(1,Math.round(o*a)),i=Math.max(1,Math.round(i*a));let s=t.canvas||document.createElement("canvas");s.width=o,s.height=i;let c=s.getContext("2d",{willReadFrequently:!0});c.clearRect(0,0,o,i),c.imageSmoothingEnabled=a<1,c.imageSmoothingQuality="high",c.drawImage(r,0,0,o,i);let l=null;return{width:o,height:i,canvas:s,dirty:!0,get data(){return l||(l=c.getImageData(0,0,o,i).data)}}}le();function pe(e,t=1,n={}){t=Math.max(1,Math.round(t));let r=e.width*t,o=e.height*t,i=new Uint8ClampedArray(r*o*4),a=e.data,s=e.width;for(let c=0;c<o;c++){let l=c/t|0;for(let u=0;u<r;u++){let d=(l*s+(u/t|0))*4,f=(c*r+u)*4;i[f]=a[d],i[f+1]=a[d+1],i[f+2]=a[d+2],i[f+3]=a[d+3]}}if(n.grid&&t>=3){let[c,l,u]=oe(n.gridColor||"#000000"),d=n.gridAlpha??.35;for(let f=0;f<o;f++)for(let m=0;m<r;m++){if(m%t&&f%t)continue;let b=(f*r+m)*4,g=i[b+3]/255,x=d+g*(1-d);i[b]=(c*d+i[b]*g*(1-d))/x,i[b+1]=(l*d+i[b+1]*g*(1-d))/x,i[b+2]=(u*d+i[b+2]*g*(1-d))/x,i[b+3]=x*255}}return{width:r,height:o,data:i}}function yt(e,t,n){t=Math.max(1,Math.round(t)),n=Math.max(1,Math.round(n));let r=new Uint8ClampedArray(t*n*4),o=new Int32Array(t);for(let i=0;i<t;i++)o[i]=Math.min(e.width-1,Math.floor((i+.5)*e.width/t));for(let i=0;i<n;i++){let a=Math.min(e.height-1,Math.floor((i+.5)*e.height/n));for(let s=0;s<t;s++){let c=(a*e.width+o[s])*4,l=(i*t+s)*4;r[l]=e.data[c],r[l+1]=e.data[c+1],r[l+2]=e.data[c+2],r[l+3]=e.data[c+3]}}return{width:t,height:n,data:r}}function Et(e,t=1/0){let n=new Set,r=e.data;for(let o=0;o<r.length&&!(r[o+3]!==0&&(n.add(r[o]<<16|r[o+1]<<8|r[o+2]),n.size>t));o+=4);return[...n].map(o=>we([o>>16,o>>8&255,o&255]))}function Gr(e){for(let t=3;t<e.data.length;t+=4)if(e.data[t]<255)return!0;return!1}function zr(e,t=8){let{width:n,height:r,data:o}=e,i=(u,d)=>Math.abs(o[u]-o[d])<=t&&Math.abs(o[u+1]-o[d+1])<=t&&Math.abs(o[u+2]-o[d+2])<=t&&Math.abs(o[u+3]-o[d+3])<=t,a=(u,d)=>d?a(d,u%d):u,s=0,c=Math.max(1,Math.floor(r/64)),l=Math.max(1,Math.floor(n/64));for(let u=0;u<r;u+=c){let d=1;for(let f=1;f<n;f++)if(i((u*n+f)*4,(u*n+f-1)*4))d++;else if(s=a(s,d),d=1,s===1)return 1}for(let u=0;u<n;u+=l){let d=1;for(let f=1;f<r;f++)if(i((f*n+u)*4,((f-1)*n+u)*4))d++;else if(s=a(s,d),d=1,s===1)return 1}return s||1}function vt(e,t=1,n={}){let r=t>1||n.grid?pe(e,t,n):e,o=n.canvas||document.createElement("canvas");return o.width=r.width,o.height=r.height,o.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(r.data),r.width,r.height),0,0),o}function Hr(e,t,n="application/octet-stream"){let r=e instanceof Blob?e:new Blob([e],{type:n}),o=URL.createObjectURL(r),i=document.createElement("a");i.href=o,i.download=t,i.rel="noopener",document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(o),1e4)}var _t=null;function Tt(e,t=0){if(!_t){_t=new Uint32Array(256);for(let n=0;n<256;n++){let r=n;for(let o=0;o<8;o++)r=r&1?3988292384^r>>>1:r>>>1;_t[n]=r>>>0}}t=~t>>>0;for(let n=0;n<e.length;n++)t=_t[(t^e[n])&255]^t>>>8;return~t>>>0}var na=[137,80,78,71,13,10,26,10];async function ra(e){if(typeof CompressionStream=="function"){let n=new CompressionStream("deflate"),r=new Blob([e]).stream().pipeThrough(n);return new Uint8Array(await new Response(r).arrayBuffer())}let{deflateSync:t}=await import("node:zlib");return new Uint8Array(t(e))}function Ie(e,t){let n=new Uint8Array(12+t.length),r=new DataView(n.buffer);r.setUint32(0,t.length);for(let o=0;o<4;o++)n[4+o]=e.charCodeAt(o);return n.set(t,8),r.setUint32(8+t.length,Tt(n.subarray(4,8+t.length))),n}function oa(e){let t=e.data,n=e.width*e.height,r=new Map,o=[],i=new Uint8Array(n);for(let a=0;a<n;a++){let s=a*4,c=t[s+3]===0?-1:(t[s]<<24|t[s+1]<<16|t[s+2]<<8|t[s+3])>>>0,l=r.get(c);if(l===void 0){if(o.length===256)return null;l=o.length,r.set(c,l),o.push(c===-1?[0,0,0,0]:[t[s],t[s+1],t[s+2],t[s+3]])}i[a]=l}return{colors:o,indices:i}}async function $e(e,t={}){t.width&&t.height?e=yt(e,t.width,t.height):(t.scale&&t.scale>1||t.grid)&&(e=pe(e,t.scale||1,t));let{width:n,height:r}=e,o=t.indexed===!1?null:oa(e),i=new Uint8Array(13),a=new DataView(i.buffer);a.setUint32(0,n),a.setUint32(4,r);let s=[new Uint8Array(na)],c;if(o){let f=o.colors.length<=2?1:o.colors.length<=4?2:o.colors.length<=16?4:8;i.set([f,3,0,0,0],8);let m=Math.ceil(n*f/8);c=new Uint8Array((m+1)*r);for(let b=0;b<r;b++){let g=b*(m+1)+1;for(let x=0;x<n;x++){let y=o.indices[b*n+x],h=x*f;c[g+(h>>3)]|=y<<8-f-(h&7)}}if(s.push(Ie("IHDR",i)),s.push(Ie("PLTE",Uint8Array.from(o.colors.flatMap(b=>b.slice(0,3))))),o.colors.some(b=>b[3]<255)){let b=o.colors.length;for(;b>0&&o.colors[b-1][3]===255;)b--;s.push(Ie("tRNS",Uint8Array.from(o.colors.slice(0,b).map(g=>g[3]))))}}else{i.set([8,6,0,0,0],8),c=new Uint8Array((n*4+1)*r);for(let f=0;f<r;f++)c.set(e.data.subarray?e.data.subarray(f*n*4,(f+1)*n*4):Array.prototype.slice.call(e.data,f*n*4,(f+1)*n*4),f*(n*4+1)+1);s.push(Ie("IHDR",i))}s.push(Ie("IDAT",await ra(c))),s.push(Ie("IEND",new Uint8Array(0)));let l=s.reduce((f,m)=>f+m.length,0),u=new Uint8Array(l),d=0;for(let f of s)u.set(f,d),d+=f.length;return u}var fa=e=>typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement,ua=e=>typeof VideoFrame<"u"&&e instanceof VideoFrame;async function Rt(e={}){let t=e.backend||"auto",n=null,r=null;if(t!=="cpu"&&typeof document<"u")try{n=await Xr()}catch(l){if(r=l,t==="webgl")throw l}let o=typeof document<"u"?document.createElement("canvas"):null,i={source:null,frame:null},a=Promise.resolve();async function s(l){if(l===i.source&&i.frame&&!fa(l)&&!ua(l))return i.frame.dirty=!1,i.frame;let u=await Ye(l,{maxSize:e.maxSourceSize,canvas:o});return i={source:l,frame:u},u}async function c(l,u){let d=typeof performance<"u"?performance.now():Date.now(),f=await s(l),m=pt(u,f),b,g="cpu",x=m.kind==="diffusion"&&(e.diffusion==="cpu"||e.diffusion!=="gpu"&&n&&n.software);n&&f.canvas&&!x?(b=await n.run(m,f),g="webgl"):b=bt(m,f);let y=(typeof performance<"u"?performance.now():Date.now())-d;return un(m,b,g,y)}return{get backend(){return n?"webgl":"cpu"},get renderer(){return n?n.renderer:""},get fallbackReason(){return r?String(r.message||r):""},process(l,u={}){let d=a.then(()=>c(l,u));return a=d.catch(()=>{}),d},invalidate(){i={source:null,frame:null}},destroy(){n&&n.destroy(),n=null},get shader(){return n?n.shader:null}}}function un(e,t,n="cpu",r=0){return{width:e.width,height:e.height,data:t,palette:e.paletteHex?e.paletteHex.slice():null,settings:e.settings,kind:e.kind,waves:e.waves,crop:{x:e.crop.x/e.srcWidth,y:e.crop.y/e.srcHeight,w:e.crop.w/e.srcWidth,h:e.crop.h/e.srcHeight},backend:n,ms:r,usedColors(){return Et(this)},toImageData(){return new ImageData(new Uint8ClampedArray(this.data),this.width,this.height)},toCanvas(i=1,a={}){return vt(this,i,a)},toPNG(i={}){return $e(this,i)},async toBlob(i={}){return new Blob([await $e(this,i)],{type:"image/png"})}}}var At=null;async function Jr(e,t){return t===void 0&&e&&typeof e=="object"&&"image"in e&&"width"in e?la(e):(At||(At=Rt()),(await At).process(e,t))}async function la(e){let{image:t,width:n,dither:r="none",strength:o=0,palette:i=null,resolution:a="original"}=e,s={source:"none"};if(Array.isArray(i))s={source:"custom",colors:i};else if(typeof i=="string"){let{fetchLospec:d}=await Promise.resolve().then(()=>(fn(),qr)),f=await d(i);s={source:"custom",colors:f.colors,name:f.name}}let c=ie({size:{width:n},palette:s,dither:{method:at[String(r).toLowerCase()]||"none",strength:o/100},alpha:{threshold:0}});At||(At=Rt());let u=await(await At).process(t,c);if(a==="original"){let d=await Ye(t),f=document.createElement("canvas");f.width=d.width,f.height=d.height;let m=f.getContext("2d");return m.imageSmoothingEnabled=!1,m.drawImage(u.toCanvas(1),0,0,f.width,f.height),f}return u.toCanvas(1)}sn();fn();var ln=[{id:"balanced",name:"Balanced",description:"Endesga 32, Bayer 4\xD74. A good first look at most photos.",settings:{size:{width:96},palette:{source:"builtin",id:"endesga-32"},dither:{method:"bayer4",strength:.6}}},{id:"game-boy",name:"Game Boy",description:"Four greens, 160 px wide, ordered dither.",settings:{size:{width:160},palette:{source:"builtin",id:"game-boy-dmg"},dither:{method:"bayer4",strength:1},adjust:{contrast:.15}}},{id:"pico-8",name:"PICO-8",description:"128 px, the PICO-8 palette, blue-noise dither.",settings:{size:{width:128},palette:{source:"builtin",id:"pico-8"},dither:{method:"bluenoise",strength:.7}}},{id:"one-bit",name:"1-bit Atkinson",description:"Classic Mac look: two colours, Atkinson diffusion.",settings:{size:{width:192},palette:{source:"builtin",id:"1-bit-monitor"},dither:{method:"atkinson",strength:1},adjust:{contrast:.2}}},{id:"faithful",name:"Faithful colour",description:"Palette extracted from the image, Floyd\u2013Steinberg.",settings:{size:{width:128},palette:{source:"extract",count:24},dither:{method:"floyd-steinberg",strength:.75}}},{id:"sprite",name:"Clean sprite",description:"No dither, nearest resample, orphan cleanup and a dark outline. For art with transparency.",settings:{size:{width:48,resample:"nearest"},palette:{source:"extract",count:12},dither:{method:"none"},cleanup:{orphans:!0},outline:{mode:"outer",color:"#1a1c2c"}}},{id:"cga",name:"CGA",description:"16 hard colours with an 8\xD78 Bayer pattern.",settings:{size:{width:160},palette:{source:"builtin",id:"cga-16"},dither:{method:"bayer8",strength:1}}},{id:"newsprint",name:"Newsprint",description:"Grey clustered-dot halftone.",settings:{size:{width:220},palette:{source:"builtin",id:"grayscale-4"},dither:{method:"cluster8",strength:1},adjust:{saturation:-1}}},{id:"soft",name:"Soft painterly",description:"Resurrect 64 with Sierra Lite and a light smooth.",settings:{size:{width:112},palette:{source:"builtin",id:"resurrect-64"},dither:{method:"sierra-lite",strength:.6},cleanup:{smooth:!0}}}],Zr=e=>ln.find(t=>t.id===e)||null;le();le();var mn=class{constructor(){this.buf=new Uint8Array(65536),this.n=0}byte(t){if(this.n===this.buf.length){let n=new Uint8Array(this.buf.length*2);n.set(this.buf),this.buf=n}this.buf[this.n++]=t}bytes(t){for(let n=0;n<t.length;n++)this.byte(t[n])}u16(t){this.byte(t&255),this.byte(t>>8&255)}str(t){for(let n=0;n<t.length;n++)this.byte(t.charCodeAt(n))}result(){return this.buf.slice(0,this.n)}};function da(e,t,n){let r=1<<t,o=r+1,i=t+1,a=o+1,s=new Map,c=0,l=0,u=[],d=[],f=b=>{for(c|=b<<l,l+=i;l>=8;)d.push(c&255),c>>>=8,l-=8,d.length===255&&(u.push(d),d=[])};f(r);let m=e[0];for(let b=1;b<e.length;b++){let g=e[b],x=m*256+g,y=s.get(x);if(y!==void 0){m=y;continue}f(m),a<4096?(s.set(x,a++),a>1<<i&&i<12&&i++):(f(r),s=new Map,i=t+1,a=o+1),m=g}f(m),f(o),l>0&&d.push(c&255),d.length&&u.push(d),n.byte(t);for(let b of u)n.byte(b.length),n.bytes(b);n.byte(0)}var dn=(e,t)=>e[t+3]<128?-1:e[t]<<16|e[t+1]<<8|e[t+2];function Qr(e,t){let n=[...e].filter(s=>s!==-1),r=n.map(s=>[s>>16,s>>8&255,s&255]),o=t?r.length:-1;t&&r.push([0,0,0]);let i=1;for(;1<<i<r.length;)i++;for(;r.length<1<<i;)r.push([0,0,0]);let a=new Map(n.map((s,c)=>[s,c]));return{colors:r,bits:i,tIndex:o,index:a}}function ma(e,t){let n=Le(e,t).map(oe),r=new Uint8ClampedArray(e.data),o=new Map;for(let i=0;i<r.length;i+=4){if(r[i+3]<128)continue;let a=r[i]<<16|r[i+1]<<8|r[i+2],s=o.get(a);if(s===void 0){let c=1/0;s=0;for(let l=0;l<n.length;l++){let u=r[i]-n[l][0],d=r[i+1]-n[l][1],f=r[i+2]-n[l][2],m=u*u*3+d*d*4+f*f*2;m<c&&(c=m,s=l)}o.set(a,s)}r.set(n[s],i)}return{...e,data:r}}function eo(e,t={}){if(!e.length)throw new Error("No frames");let n=Math.max(1,Math.round(t.scale||1)),r=e.map(m=>({...n>1?pe(m,n):m,delay:m.delay??t.delay??100})),o=r[0].width,i=r[0].height,a=!1,s=new Set,c=r.map(m=>{let b=new Set;for(let g=0;g<m.data.length;g+=4){let x=dn(m.data,g);x===-1&&(a=!0),b.add(x),s.add(x)}return b}),l=m=>m.size-(m.has(-1)?1:0),d=l(s)+(a?1:0)<=256?Qr(s,a):null,f=new mn;if(f.str("GIF89a"),f.u16(o),f.u16(i),f.byte(d?240|d.bits-1:0),f.byte(0),f.byte(0),d)for(let m of d.colors)f.bytes(m);return r.length>1&&t.loop!==-1&&(f.byte(33),f.byte(255),f.byte(11),f.str("NETSCAPE2.0"),f.byte(3),f.byte(1),f.u16(t.loop||0),f.byte(0)),r.forEach((m,b)=>{let g=m,x=d,y=c[b];if(!x){let E=a?255:256;if(l(y)>E){g=ma(m,E),y=new Set;for(let p=0;p<g.data.length;p+=4)y.add(dn(g.data,p))}x=Qr(y,y.has(-1))}if(f.byte(33),f.byte(249),f.byte(4),f.byte((a?2:1)<<2|(x.tIndex>=0?1:0)),f.u16(Math.max(2,Math.round(g.delay/10))),f.byte(x.tIndex>=0?x.tIndex:0),f.byte(0),f.byte(44),f.u16(0),f.u16(0),f.u16(o),f.u16(i),f.byte(x===d?0:128|x.bits-1),x!==d)for(let E of x.colors)f.bytes(E);let h=new Uint8Array(o*i);for(let E=0;E<h.length;E++){let p=dn(g.data,E*4);h[E]=p===-1?x.tIndex:x.index.get(p)}da(h,Math.max(2,x.bits),f)}),f.byte(59),f.result()}var to=new TextEncoder;function no(e){let t=[],n=[],r=0,o=new Set;for(let u of e){let d=u.name.replace(/\\/g,"/").replace(/^\/+/,"");if(o.has(d)){let T=/^(.*?)(\.[^.]*)?$/.exec(d),M=2;for(;o.has(`${T[1]}-${M}${T[2]||""}`);)M++;d=`${T[1]}-${M}${T[2]||""}`}o.add(d);let f=to.encode(d),m=typeof u.data=="string"?to.encode(u.data):u.data,b=Tt(m),g=u.date||new Date,x=g.getHours()<<11|g.getMinutes()<<5|g.getSeconds()>>1,y=g.getFullYear()-1980<<9|g.getMonth()+1<<5|g.getDate(),h=new Uint8Array(30+f.length),E=new DataView(h.buffer);E.setUint32(0,67324752,!0),E.setUint16(4,20,!0),E.setUint16(6,2048,!0),E.setUint16(8,0,!0),E.setUint16(10,x,!0),E.setUint16(12,y,!0),E.setUint32(14,b,!0),E.setUint32(18,m.length,!0),E.setUint32(22,m.length,!0),E.setUint16(26,f.length,!0),E.setUint16(28,0,!0),h.set(f,30);let p=new Uint8Array(46+f.length),_=new DataView(p.buffer);_.setUint32(0,33639248,!0),_.setUint16(4,20,!0),_.setUint16(6,20,!0),_.setUint16(8,2048,!0),_.setUint16(10,0,!0),_.setUint16(12,x,!0),_.setUint16(14,y,!0),_.setUint32(16,b,!0),_.setUint32(20,m.length,!0),_.setUint32(24,m.length,!0),_.setUint16(28,f.length,!0),_.setUint32(42,r,!0),p.set(f,46),t.push(h,m),n.push(p),r+=h.length+m.length}let i=n.reduce((u,d)=>u+d.length,0),a=new Uint8Array(22),s=new DataView(a.buffer);s.setUint32(0,101010256,!0),s.setUint16(8,e.length,!0),s.setUint16(10,e.length,!0),s.setUint32(12,i,!0),s.setUint32(16,r,!0);let c=new Uint8Array(r+i+22),l=0;for(let u of[...t,...n,a])c.set(u,l),l+=u.length;return c}var hn=(e,t)=>({width:e,height:t,data:new Uint8ClampedArray(e*t*4)});function ha(e,t,n,r,o=0,i=0,a=t.width,s=t.height){for(let c=0;c<s;c++){let l=((i+c)*t.width+o)*4,u=((r+c)*e.width+n)*4;e.data.set(t.data.subarray?t.data.subarray(l,l+a*4):Array.prototype.slice.call(t.data,l,l+a*4),u)}}function pn(e,t={}){if(!e.length)throw new Error("No frames");let n=Math.max(0,t.padding|0),r=Math.max(...e.map(f=>f.width)),o=Math.max(...e.map(f=>f.height)),i=Math.max(1,Math.min(e.length,t.columns||Math.ceil(Math.sqrt(e.length)))),a=Math.ceil(e.length/i),s=i*r+(i-1)*n,c=a*o+(a-1)*n,l=hn(s,c),u={};e.forEach((f,m)=>{let b=m%i*(r+n),g=Math.floor(m/i)*(o+n);ha(l,f,b,g),u[f.name||`frame-${String(m).padStart(3,"0")}`]={frame:{x:b,y:g,w:f.width,h:f.height},sourceSize:{w:f.width,h:f.height},...f.delay!=null?{duration:Math.round(f.delay)}:{}}});let d={frames:u,meta:{app:"image-to-pixel",image:(t.name||"sheet")+".png",size:{w:s,h:c},scale:"1",columns:i,rows:a,padding:n}};return{image:l,atlas:d}}function ro(e,t={}){let n=Math.max(1,t.tileWidth||8),r=Math.max(1,t.tileHeight||n),o=Math.ceil(e.width/n),i=Math.ceil(e.height/r),a=[],s=new Map,c=[],l=[],u=(b,g)=>{let x=hn(n,r);for(let y=0;y<r;y++)for(let h=0;h<n;h++){let E=b*n+h,p=g*r+y;if(E>=e.width||p>=e.height)continue;let _=(p*e.width+E)*4;x.data.set([e.data[_],e.data[_+1],e.data[_+2],e.data[_+3]],(y*n+h)*4)}return x},d=b=>{let g="";for(let x=0;x<b.data.length;x+=4)g+=b.data[x+3]===0?".":String.fromCharCode(b.data[x]+1,b.data[x+1]+1,b.data[x+2]+1);return g},f=(b,g,x)=>{let y=hn(n,r);for(let h=0;h<r;h++)for(let E=0;E<n;E++){let p=((x?r-1-h:h)*n+(g?n-1-E:E))*4;y.data.set(b.data.subarray(p,p+4),(h*n+E)*4)}return y};for(let b=0;b<i;b++)for(let g=0;g<o;g++){let x=u(g,b),y=s.get(d(x)),h=0;if(y===void 0&&t.flips)for(let[E,p,_]of[[1,0,1],[0,1,2],[1,1,3]]){let T=s.get(d(f(x,E,p)));if(T!==void 0){y=T,h=_;break}}y===void 0&&(y=a.length,a.push(x),s.set(d(x),y)),c.push(y),l.push(h)}return{image:pn(a,{columns:t.columns||Math.min(16,a.length)}).image,map:{width:o,height:i,tileWidth:n,tileHeight:r,tiles:c,...t.flips?{flips:l}:{}},count:a.length}}var pa=(e,t,n=4e3)=>new Promise((r,o)=>{let i=setTimeout(()=>{e.removeEventListener(t,a),o(new Error(`Timed out waiting for "${t}"`))},n),a=()=>{clearTimeout(i),r()};e.addEventListener(t,a,{once:!0})}),ba={1:"loading was aborted",2:"a network error stopped the download",3:"the browser could not decode it",4:"this browser can't play this video's format"};function Mt(e){let t=e.error?e.error.code:0,n=new Error(ba[t]||"the video could not be loaded");return n.code=t,e.error&&e.error.message&&(n.detail=e.error.message),n}var oo=(e,t,n)=>new Promise((r,o)=>{let i=()=>{clearTimeout(c),e.removeEventListener(t,a),e.removeEventListener("error",s)},a=()=>{i(),r()},s=()=>{i(),o(Mt(e))},c=setTimeout(()=>{i(),o(new Error(`no response from the video decoder after ${n/1e3} s`))},n);e.addEventListener(t,a,{once:!0}),e.addEventListener("error",s,{once:!0})});async function kt(e,{timeout:t=6e4}={}){if(e.error)throw Mt(e);return e.readyState<1&&await oo(e,"loadedmetadata",t),e.readyState<2&&await oo(e,"loadeddata",t).catch(n=>{if(n.code)throw n}),e}async function io(e){let t=new Uint8Array(await e.arrayBuffer()),n={avc1:"H.264",avc3:"H.264",hvc1:"H.265 (HEVC)",hev1:"H.265 (HEVC)",av01:"AV1",vp09:"VP9",vp08:"VP8",mp4v:"MPEG-4 Part 2",apcn:"ProRes",apch:"ProRes",apcs:"ProRes",apco:"ProRes",ap4h:"ProRes 4444",dvh1:"Dolby Vision",dvhe:"Dolby Vision"};for(let i=0;i+24<t.length;i++)if(t[i]===115&&t[i+1]===116&&t[i+2]===115&&t[i+3]===100){let a=String.fromCharCode(t[i+16],t[i+17],t[i+18],t[i+19]);if(n[a])return n[a]}let r=new TextDecoder("latin1").decode(t.subarray(0,Math.min(t.length,1<<20))),o=/V_(VP8|VP9|AV1|MPEG4\/ISO\/AVC|MPEGH\/ISO\/HEVC)/.exec(r);return o?{VP8:"VP8",VP9:"VP9",AV1:"AV1","MPEG4/ISO/AVC":"H.264","MPEGH/ISO/HEVC":"H.265 (HEVC)"}[o[1]]:""}async function Ct(e,t){if(t=Math.max(0,Math.min(t,(e.duration||0)-1e-4)),Math.abs(e.currentTime-t)<1e-6&&e.readyState>=2)return;let n="requestVideoFrameCallback"in e?new Promise(o=>{e.requestVideoFrameCallback(()=>o()),setTimeout(o,500)}):null,r=pa(e,"seeked");e.currentTime=t,await r,n&&await n}async function ao(e,t=30){if(!("requestVideoFrameCallback"in e))return t;await kt(e);let n={t:e.currentTime,muted:e.muted,paused:e.paused},r=[];try{e.muted=!0,await new Promise(a=>{let s=setTimeout(a,1200),c=(l,u)=>{r.push(u.mediaTime),r.length>=12?(clearTimeout(s),a()):e.requestVideoFrameCallback(c)};e.requestVideoFrameCallback(c),e.play().catch(()=>{clearTimeout(s),a()})})}finally{e.pause(),e.muted=n.muted,await Ct(e,n.t).catch(()=>{})}let o=[];for(let a=1;a<r.length;a++){let s=r[a]-r[a-1];s>.001&&o.push(s)}if(o.length<3)return t;o.sort((a,s)=>a-s);let i=1/o[Math.floor(o.length/2)];for(let a of[12,15,23.976,24,25,29.97,30,48,50,59.94,60])if(Math.abs(i-a)<.6)return a;return Math.round(i)}function bn({duration:e,fps:t,start:n=0,end:r=e,maxFrames:o=1/0}){let i=[],a=Math.min(o,Math.max(1,Math.floor((r-n)*t+1e-6)));for(let s=0;s<a;s++)i.push(n+(s+.5)/t);return i}async function so(e,t){await kt(e);let n=e.paused;e.pause();let r=bn({duration:e.duration,...t});for(let o=0;o<r.length;o++){if(t.signal&&t.signal.aborted)throw new DOMException("Aborted","AbortError");await Ct(e,r[o]),await t.onFrame({index:o,time:r[o],total:r.length})}return n||e.play().catch(()=>{}),r.length}var wa="3.0.1";return Ao(xa);})();
302
302
  /*! Bundled license information:
303
303
 
304
304
  shadermate/dist/shadermate.esm.js: