From cc2aa552ba17bd5f3028dc0201b5e56b11ed1480 Mon Sep 17 00:00:00 2001 From: 0xa663 <142121896+0xa663@users.noreply.github.com> Date: Thu, 15 Feb 2024 19:27:26 +0100 Subject: [PATCH] Make overlay --- assets/images/icon_128.png | Bin 0 -> 2890 bytes assets/images/icon_48.png | Bin 0 -> 2428 bytes build.js | 104 + dist/user-script.js | 1081 ++++ manifest.template.json | 18 + package-lock.json | 6405 +++++++++++++++++++++++ package.json | 40 + readme.md | 48 + src/2DArray.ts | 25 + src/EventEmitter.ts | 50 + src/UI/Fileinput.ts | 45 + src/UI/Popup.tsx | 234 + src/UI/components/Popup.tsx | 243 + src/UI/components/canvasToCanvasJSX.tsx | 33 + src/UI/components/main.tsx | 121 + src/UI/components/menu.tsx | 113 + src/UI/components/minimap.tsx | 262 + src/UI/components/movableWindow.tsx | 176 + src/UI/components/muralEditor.tsx | 36 + src/UI/components/muralList.tsx | 67 + src/UI/components/muralView.tsx | 217 + src/UI/components/overlay.tsx | 177 + src/UI/importMural.tsx | 482 ++ src/UI/styles.tsx | 72 + src/UI/ui.tsx | 219 + src/coordinates.ts | 192 + src/index.ts | 27 + src/interfaces.ts | 33 + src/palette.ts | 47 + src/patch.d.ts | 42 + src/storage.ts | 41 + src/store.ts | 159 + src/utils.ts | 348 ++ user-script.template.js | 11 + 34 files changed, 11168 insertions(+) create mode 100644 assets/images/icon_128.png create mode 100644 assets/images/icon_48.png create mode 100644 build.js create mode 100644 dist/user-script.js create mode 100755 manifest.template.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 readme.md create mode 100644 src/2DArray.ts create mode 100644 src/EventEmitter.ts create mode 100644 src/UI/Fileinput.ts create mode 100644 src/UI/Popup.tsx create mode 100644 src/UI/components/Popup.tsx create mode 100644 src/UI/components/canvasToCanvasJSX.tsx create mode 100644 src/UI/components/main.tsx create mode 100644 src/UI/components/menu.tsx create mode 100644 src/UI/components/minimap.tsx create mode 100644 src/UI/components/movableWindow.tsx create mode 100644 src/UI/components/muralEditor.tsx create mode 100644 src/UI/components/muralList.tsx create mode 100644 src/UI/components/muralView.tsx create mode 100644 src/UI/components/overlay.tsx create mode 100644 src/UI/importMural.tsx create mode 100644 src/UI/styles.tsx create mode 100644 src/UI/ui.tsx create mode 100644 src/coordinates.ts create mode 100644 src/index.ts create mode 100644 src/interfaces.ts create mode 100644 src/palette.ts create mode 100644 src/patch.d.ts create mode 100644 src/storage.ts create mode 100644 src/store.ts create mode 100644 src/utils.ts create mode 100644 user-script.template.js diff --git a/assets/images/icon_128.png b/assets/images/icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..af3dc49f0c0d208827a1087c11bc2431c0a5a6aa GIT binary patch literal 2890 zcmcImdsGv579J3!D2NY4SE$Cg+WMHxOr9hX5D6|Q0YrQ*3X_=$jCoARL6Dt6fxg!%#%O?^RFwQO~_EY?a8F-N1Kb|(<1+p5QZHs?&{_5Hs4-S6Jt zJ(Ck1`6tg|6NUi*;29n!i($^|?Z*es%zs4OlVaxNt_xdE1HkYx_QMI-RXiR5T(6U{ z%M8op5fY5ja8R655FDdM$DjcqAjqggF%@B8DTqW;D`j`rono^{T*_W5ki&9a2$4jF zrR#}B>5;Kmx(XBH?4UqafKkE_Xb1z!GHTRXT4I#4`*dN;7e+)7EP@ao2qO|$DB+1&jvt$erpJ|%7}-2W zEapziPBIvD5(r97P35HWIFvpSLd0S*1al!S7i171ou)OQMo>#n8DNkRG^QtY29naU z?2M>_T4Rv18KwOxXmo?LTH0X~V;E#abr8aV?I{faag5lWUTHPAGx-U~4g9tUDVPG^P3>gfiOQH-EokYDQkHOc2 z+2|x8dIB|2`dErm4-_hTfQ1zjVlRw8>*J-Q7N=6_>2^_$HG~W`5K=Z5=JG+93&Mg} zgfHPD5(J)UuOQqHl{2k?qXzW-z!Xj@)7}RvmrKI6v;oy(M7T`KW<+sF5|D+@cBnX!$5^+&6 z$W!uQ(4Wi4K?O$OAfL|@A~?)NaiMa6ElN)^n+H|D&T3bMGmJc?KqNwNF^J-b5=4Z2 z6h!?AC5VYdO1?s@L{X)X&B8H>lG1BXrd3D{nn*x8Z6cfXtC|o>P3h$n&UntVH#Eb} zWD!QvO!d+nTVxTD?6^{stiHaJpqRbgrEJVzX98zC9+Piy@BMW4)21d74Cy<4Vo9hrkzgh$#J1-H*=J3EX`tU$t?%7y zb7=t13_JVf;FM)<2In-PWvKPc6doIKZa6dCCxy#`V~xdKB~eL!i~TNS@ruIK&9WIA z=iMScns%?OaZ}70wPHlZ@x>!OR#_%HMg15`WsJ1>Bvt(@*b-c^)5oPi5gcF%zIXe; zDkUbdZ2E0oz=AVBa@AuP$)WOO9||~y}RgTmv8&Q)aRi& zx#TCaURZo3*B?A6eyXvKDu_Or=#h6Ut#`(m#&JKdy9c(I$=!!WZ>jchUB3^2y@71! z)6u~AVL*se!pFe2v1QlHwP&j`mHzbIia!rQAD2J6KmS>0r)yYOo@<=3*VOXFitt@S z&tD-dapxz#yw}k4R7Jrq@{*a=wp(6J9@|PXiD|FWeLoogbsK%N7Ao2h_o6^Jeq-f@ z%!cUnD@E|yJ3%*_ZURpA!<_pU4EE@e?Z{@`v1T6o!u!$=T|-nw%*n#^_&8N}Z_B64 z&C@nZ(`6G|a>wq3izu45>@ zf7AYU-s6}^BqTa;57qs*NwAPFR+F*OBe>OB7?kPLoV~v+_5R&6 z^R!i^z$(`beN`EnHc3~Q@XvsEpwNo_uRNO zJEP4u;*{U?4)a%<*_V3Qqh$~4o5E8T`+vfW%kt5cF^3`|BP%yc63Tl8Jt@2W_u3w> z$oR6fv~=qcclNzk8l_65%FJ9j)%@yYvpzX^PNzG0-=y?3f8X$SUw+>?zjYAX5@$L* zF+6VD!z{ncl3IDDW!IJ?`BzdJvtNumW9=xqz4f~DSGUx{-L1K03%ZZAWl@5B%Nna~ zMTYn1vu3XANj8tPc^)qDt;|8U-uf=*@XA7Zpf_G*&1vk+h11Lzm;d-n80yvEx)Gbi zr(dGt$L4&uHsq9O+N&GpnxnpSUUQXO&G4B$)l=O6xNy$TmjsEZxU?)G*{?iy#<_T^ z-E_^=ow+@$z17?@&Rst|j|2;$k|~hNwe9i@ZEcRRiPZAC)@=^t;5ev?BCCY_+_WA=Yd6%Do5`O z<+(9#)X%rnoD!8y?s&AK4vwF;Db8G8U9^ZfQ%(|x)%C7gS*yB})d~@8Gx$q!6zWygmPHuC{ swGknK%iCTqAU6zl^8d^i#<6GP?yd}+XW_eiX#d&`4~>)^otv=nzr9dL;s5{u literal 0 HcmV?d00001 diff --git a/assets/images/icon_48.png b/assets/images/icon_48.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8a4b35e6eb6f94a573dab9f9cbff3b4fa57bcb GIT binary patch literal 2428 zcmcIkYg7|w8XmA*1hPHbS`}P%I%@I4WG0z}By$L$i8UaB7{WzVmdVT{OieOrW`Lk+ zm(tdHDT-Tbfr6{3XmzdC+InHx)>B!la#*d4Tk55rb-i@u;?dJqQR;pJA=|U3?eb@H z&SbusdA{d;-uHRGca0@`fh;B=27(}2hRJ9JcU-!n!@>WTC7!e3Hr8ueEI?4~)6x|N zH8f6yponvvtxzm9XOT4TmQxIGXXSpk7oZ_1CC%@p=;f>k+gT^)(Ifq>pCB;D=#c`o z88>?kY$<12;bU`GWZUQ!%V`~hq@}_sei9J4S&@SMZkIa^B~}6gr&_!2L~eZ-~|-1j_^phWRNkrjX-ON+UqC`In(?cL*(r^UFb$px&P( z7HpMX7PGPfU*@CP`Q@xfoHi1Sp+kGUWj@zXrVNd-F4hfT0uZJMh4Pm2A}^HkKa)r3 zb0`}xY4EX>$op(O?;0`6GQt8I43aTgcxD0TVfYGRmLw{;hc!|nt4EZ$QibA56j$36 zDpIK+3C$eIL3|i$2CcwQA~iZN&v1^)(Ll{+GQ%T?l!saU$@4)EIad?=$lZs5v1uG++l=m^cBrR~bAa zx$KL@%l#iY31eG35 ze_=nTU!cnWhx$=@|Nm7VEG}J2d7Lbmpco?MgGsYy*c$A=T^suLqq#H!2g6QUhNdid z2+e8M1E_sq3SXUYUv+~N+{_kFHG&Hq!N3OOen7@BCp<`LrA$s$txo_lP z+vMrFXWSiKC4YHr?F!>Q%;}BV@T+BaC--afy2DamdNbvvo}xjrz#j0d`XNFFiQ-rC z;w`iFsTu>9u(o-2?DXh)3wD`hmi+v^AMM}2KQM0nwRziWzepMjw_fhM_uzC?LtWkO zI7?AZ@uh3C_I&#gOS*c~K@{a}?fmW0_s6jlR{vv$Y>M^CEe~72mecjIYYcT|l-HEC zIyt7Q{7PeOWagp16YG0!x2<9u?likkb~H~pcOm7w%D6N8j@2B9v}N6zJ!ez)E`e-{ ze0AFi|0-(Ys*JRiZC3(kVvjohX*luiS@q#Y-I8$~wMfGk?CpbQ*^SQe5yYmJ?z-{& zw<@~=YRB!wg=$VISZlqn&(fIG-W%L z^~@e~cD8+Ux2uI~xOT*=?I~{!gA;0QL>Uj~_7QC>eMKqpaQ(B_+wVQPfB(o1bxKOs zdDWSNQ#K^Zz#w^R>IdvM$4}>9PPL7h-I8EYbXBd*SXVqV!mIs_OeQOAX}8D6$8S93 zFCHjL+8g)A$7@`f1B2^deh{uQpI7Y*lt5771GKMl5FKNi*zscH*Zo+})X9^ddHvKU z*LVA)ejjOHyqWE8PXFeux$U)gPY=F#>QOipeZ*KF_u1!9+;skW-rt~z{8wI)AL6%Gd^!fsC&fM5JHrZ~uGGpN?6coOza9+<(BXS+vdlyTr|=MR)El zuwGhN{>lf3niEPQZ8x`khN{!w`{;gtpa{(>ZmO<;Em516*38)XLY^_ED*9RA;e!{h zFG4o%?D?>oof;SUOjG90^GBBc^`IGeW||)UO8Up~Q)20j;dc@*_SP*~aJ*?}THTVe eNpx4(V8r*pp5z1#`ouyRR0^P<#^}- literal 0 HcmV?d00001 diff --git a/build.js b/build.js new file mode 100644 index 0000000..5df5469 --- /dev/null +++ b/build.js @@ -0,0 +1,104 @@ +/* eslint-disable */ +const esbuild = require("esbuild"); +const chokidar = require("chokidar"); +const { debounce } = require("lodash"); +const copyDir = require("copy-dir"); +const fs = require("fs"); +const path = require("path"); + +const package = require("./package.json"); + +function ensureFolder(path) { + if (!fs.existsSync(path)) { + fs.mkdirSync(path); + } +} + +function deleteFolder(path) { + if (fs.existsSync(path)) { + fs.rmSync(path, {recursive: true}); + } +} + +function readJson(path) { + return JSON.parse(fs.readFileSync(path, "utf-8")); +} + +async function main(dev) { + const buildDir = path.join(process.cwd(), "builds"); + const distDir = path.join(process.cwd(), "dist"); + const buildVersionDir = path.join(buildDir, `${package.name}-v${package.version}`.replace(/ /g, "-")); + const fromAssetsDir = path.join(process.cwd(), "assets"); + const toAssetsDir = path.join(buildVersionDir, "assets"); + const manifestTemplateLocation = path.join(process.cwd(), "manifest.template.json"); + const userScriptTemplateLocation = path.join(process.cwd(), "user-script.template.js"); + const userScriptOutput = path.join(distDir, "user-script.js"); + const manifestLocation = path.join(buildVersionDir, "manifest.json"); + + const scriptInput = path.join(process.cwd(), "src", "index.ts"); + const scriptOutput = path.join(buildVersionDir, "assets", "scripts", "content.js"); + + deleteFolder(distDir); + ensureFolder(buildDir); + ensureFolder(distDir); + deleteFolder(buildVersionDir); + ensureFolder(buildVersionDir); + copyDir.sync(fromAssetsDir, toAssetsDir); + + const common = { + entryPoints: [scriptInput], + bundle: true, + minify: !dev, + platform: "browser", + } + + await esbuild.build({ + ...common, + sourcemap: !dev, + define: { + DEV: JSON.stringify(dev), + ENVIRONMENT: JSON.stringify("browser-extension") + }, + outfile: scriptOutput, + }); + + const manifest = readJson(manifestTemplateLocation); + manifest.version = package.version; + fs.writeFileSync(manifestLocation, JSON.stringify(manifest)) + + await esbuild.build({ + ...common, + define: { + DEV: JSON.stringify(dev), + ENVIRONMENT: JSON.stringify("user-script") + }, + outfile: userScriptOutput, + }); + + const code = fs.readFileSync(userScriptOutput, "utf-8"); + let template = fs.readFileSync(userScriptTemplateLocation, "utf-8"); + const date = new Date(); + const version = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${(date.getDate() + 1).toString().padStart(2, "0")}`; + template = template.replace("$VERSION$", version); + template += code; + fs.writeFileSync(userScriptOutput, template); +} + +const dev = process.argv.includes("--dev"); +main(dev); + +if (dev) { + const fn = debounce(() => { + main(); + console.log("Built"); + }, 1000); + + chokidar.watch("./src").on("unlink", (event, path) => { + fn(); + }).on("unlinkDir", (event, path) => { + fn(); + }).on("change", (event, path) => { + fn(); + }) + console.log("Watching ./src"); +} \ No newline at end of file diff --git a/dist/user-script.js b/dist/user-script.js new file mode 100644 index 0000000..40293aa --- /dev/null +++ b/dist/user-script.js @@ -0,0 +1,1081 @@ +// ==UserScript== +// @name Pixel canvas overlay +// @namespace http://tampermonkey.net/ +// @version 2024-02-16 +// @description Scripts renders pixelated overlays over the tile map! +// @author 0xa663 +// @match https://pixelcanvas.io/* +// @icon https://www.google.com/s2/favicons?sz=64&domain=pixelcanvas.io +// @grant none +// ==/UserScript== + +(()=>{var nL=Object.create;var al=Object.defineProperty;var tL=Object.getOwnPropertyDescriptor;var iL=Object.getOwnPropertyNames;var sL=Object.getPrototypeOf,oL=Object.prototype.hasOwnProperty;var Y1=(e,c)=>()=>(c||e((c={exports:{}}).exports,c),c.exports);var lL=(e,c,a,n)=>{if(c&&typeof c=="object"||typeof c=="function")for(let i of iL(c))!oL.call(e,i)&&i!==a&&al(e,i,{get:()=>c[i],enumerable:!(n=tL(c,i))||n.enumerable});return e};var T2=(e,c,a)=>(a=e!=null?nL(sL(e)):{},lL(c||!e||!e.__esModule?al(a,"default",{value:e,enumerable:!0}):a,e));var Q8=Y1((b0,X8)=>{(function(){var e,c="4.17.21",a=200,n="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",s="Invalid `variable` option passed into `_.template`",l="__lodash_hash_undefined__",u=500,p="__lodash_placeholder__",h=1,z=2,V=4,x=1,S=2,E=1,D=2,Z=4,M=8,H=16,C=32,_=64,F=128,U=256,B=512,J=30,b="...",N=800,A=16,T=1,q=2,Y=3,j=1/0,G=9007199254740991,t2=17976931348623157e292,s2=NaN,i2=4294967295,M2=i2-1,L2=i2>>>1,Y2=[["ary",F],["bind",E],["bindKey",D],["curry",M],["curryRight",H],["flip",B],["partial",C],["partialRight",_],["rearg",U]],c1="[object Arguments]",L1="[object Array]",c3="[object AsyncFunction]",d1="[object Boolean]",z1="[object Date]",e4="[object DOMException]",K2="[object Error]",W1="[object Function]",R3="[object GeneratorFunction]",B2="[object Map]",N6="[object Number]",wa="[object Null]",D3="[object Object]",me="[object Promise]",k6="[object Proxy]",b6="[object RegExp]",P1="[object Set]",m4="[object String]",d0="[object Symbol]",A8="[object Undefined]",c4="[object WeakMap]",Sa="[object WeakSet]",A6="[object ArrayBuffer]",B4="[object DataView]",_8="[object Float32Array]",E8="[object Float64Array]",P8="[object Int8Array]",Na="[object Int16Array]",ka="[object Int32Array]",ba="[object Uint8Array]",Aa="[object Uint8ClampedArray]",_a="[object Uint16Array]",Ea="[object Uint32Array]",yv=/\b__p \+= '';/g,wv=/\b(__p \+=) '' \+/g,Sv=/(__e\(.*?\)|\b__t\)) \+\n'';/g,wi=/&(?:amp|lt|gt|quot|#39);/g,Si=/[&<>"']/g,Nv=RegExp(wi.source),kv=RegExp(Si.source),bv=/<%-([\s\S]+?)%>/g,Av=/<%([\s\S]+?)%>/g,Ni=/<%=([\s\S]+?)%>/g,_v=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ev=/^\w*$/,Pv=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pa=/[\\^$.*+?()[\]{}|]/g,Tv=RegExp(Pa.source),Ta=/^\s+/,Rv=/\s/,Dv=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Fv=/\{\n\/\* \[wrapped with (.+)\] \*/,Ov=/,? & /,Bv=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Iv=/[()=,{}\[\]\/\s]/,Uv=/\\(\\)?/g,Wv=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ki=/\w*$/,Gv=/^[-+]0x[0-9a-f]+$/i,qv=/^0b[01]+$/i,$v=/^\[object .+?Constructor\]$/,jv=/^0o[0-7]+$/i,Yv=/^(?:0|[1-9]\d*)$/,Kv=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,he=/($^)/,Xv=/['\n\r\u2028\u2029\\]/g,ve="\\ud800-\\udfff",Qv="\\u0300-\\u036f",Zv="\\ufe20-\\ufe2f",Jv="\\u20d0-\\u20ff",bi=Qv+Zv+Jv,Ai="\\u2700-\\u27bf",_i="a-z\\xdf-\\xf6\\xf8-\\xff",ed="\\xac\\xb1\\xd7\\xf7",cd="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",ad="\\u2000-\\u206f",rd=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ei="A-Z\\xc0-\\xd6\\xd8-\\xde",Pi="\\ufe0e\\ufe0f",Ti=ed+cd+ad+rd,Ra="['\u2019]",nd="["+ve+"]",Ri="["+Ti+"]",de="["+bi+"]",Di="\\d+",td="["+Ai+"]",Fi="["+_i+"]",Oi="[^"+ve+Ti+Di+Ai+_i+Ei+"]",Da="\\ud83c[\\udffb-\\udfff]",id="(?:"+de+"|"+Da+")",Bi="[^"+ve+"]",Fa="(?:\\ud83c[\\udde6-\\uddff]){2}",Oa="[\\ud800-\\udbff][\\udc00-\\udfff]",z0="["+Ei+"]",Ii="\\u200d",Ui="(?:"+Fi+"|"+Oi+")",sd="(?:"+z0+"|"+Oi+")",Wi="(?:"+Ra+"(?:d|ll|m|re|s|t|ve))?",Gi="(?:"+Ra+"(?:D|LL|M|RE|S|T|VE))?",qi=id+"?",$i="["+Pi+"]?",od="(?:"+Ii+"(?:"+[Bi,Fa,Oa].join("|")+")"+$i+qi+")*",ld="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",fd="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",ji=$i+qi+od,ud="(?:"+[td,Fa,Oa].join("|")+")"+ji,pd="(?:"+[Bi+de+"?",de,Fa,Oa,nd].join("|")+")",md=RegExp(Ra,"g"),hd=RegExp(de,"g"),Ba=RegExp(Da+"(?="+Da+")|"+pd+ji,"g"),vd=RegExp([z0+"?"+Fi+"+"+Wi+"(?="+[Ri,z0,"$"].join("|")+")",sd+"+"+Gi+"(?="+[Ri,z0+Ui,"$"].join("|")+")",z0+"?"+Ui+"+"+Wi,z0+"+"+Gi,fd,ld,Di,ud].join("|"),"g"),dd=RegExp("["+Ii+ve+bi+Pi+"]"),zd=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Hd=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],gd=-1,P2={};P2[_8]=P2[E8]=P2[P8]=P2[Na]=P2[ka]=P2[ba]=P2[Aa]=P2[_a]=P2[Ea]=!0,P2[c1]=P2[L1]=P2[A6]=P2[d1]=P2[B4]=P2[z1]=P2[K2]=P2[W1]=P2[B2]=P2[N6]=P2[D3]=P2[b6]=P2[P1]=P2[m4]=P2[c4]=!1;var A2={};A2[c1]=A2[L1]=A2[A6]=A2[B4]=A2[d1]=A2[z1]=A2[_8]=A2[E8]=A2[P8]=A2[Na]=A2[ka]=A2[B2]=A2[N6]=A2[D3]=A2[b6]=A2[P1]=A2[m4]=A2[d0]=A2[ba]=A2[Aa]=A2[_a]=A2[Ea]=!0,A2[K2]=A2[W1]=A2[c4]=!1;var Vd={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Md={"&":"&","<":"<",">":">",'"':""","'":"'"},Cd={"&":"&","<":"<",">":">",""":'"',"'":"'"},Ld={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},xd=parseFloat,yd=parseInt,Yi=typeof global=="object"&&global&&global.Object===Object&&global,wd=typeof self=="object"&&self&&self.Object===Object&&self,p1=Yi||wd||Function("return this")(),Ia=typeof b0=="object"&&b0&&!b0.nodeType&&b0,_6=Ia&&typeof X8=="object"&&X8&&!X8.nodeType&&X8,Ki=_6&&_6.exports===Ia,Ua=Ki&&Yi.process,d3=function(){try{var y=_6&&_6.require&&_6.require("util").types;return y||Ua&&Ua.binding&&Ua.binding("util")}catch{}}(),Xi=d3&&d3.isArrayBuffer,Qi=d3&&d3.isDate,Zi=d3&&d3.isMap,Ji=d3&&d3.isRegExp,es=d3&&d3.isSet,cs=d3&&d3.isTypedArray;function a3(y,P,k){switch(k.length){case 0:return y.call(P);case 1:return y.call(P,k[0]);case 2:return y.call(P,k[0],k[1]);case 3:return y.call(P,k[0],k[1],k[2])}return y.apply(P,k)}function Sd(y,P,k,K){for(var o2=-1,x2=y==null?0:y.length;++o2-1}function Wa(y,P,k){for(var K=-1,o2=y==null?0:y.length;++K-1;);return k}function ls(y,P){for(var k=y.length;k--&&H0(P,y[k],0)>-1;);return k}function Rd(y,P){for(var k=y.length,K=0;k--;)y[k]===P&&++K;return K}var Dd=ja(Vd),Fd=ja(Md);function Od(y){return"\\"+Ld[y]}function Bd(y,P){return y==null?e:y[P]}function g0(y){return dd.test(y)}function Id(y){return zd.test(y)}function Ud(y){for(var P,k=[];!(P=y.next()).done;)k.push(P.value);return k}function Qa(y){var P=-1,k=Array(y.size);return y.forEach(function(K,o2){k[++P]=[o2,K]}),k}function fs(y,P){return function(k){return y(P(k))}}function W4(y,P){for(var k=-1,K=y.length,o2=0,x2=[];++k-1}function kz(r,t){var o=this.__data__,f=Pe(o,r);return f<0?(++this.size,o.push([r,t])):o[f][1]=t,this}h4.prototype.clear=yz,h4.prototype.delete=wz,h4.prototype.get=Sz,h4.prototype.has=Nz,h4.prototype.set=kz;function v4(r){var t=-1,o=r==null?0:r.length;for(this.clear();++t=t?r:t)),r}function V3(r,t,o,f,m,d){var g,L=t&h,w=t&z,R=t&V;if(o&&(g=m?o(r,f,m,d):o(r)),g!==e)return g;if(!G2(r))return r;var O=l2(r);if(O){if(g=EH(r),!L)return G1(r,g)}else{var I=y1(r),$=I==W1||I==R3;if(X4(r))return $s(r,L);if(I==D3||I==c1||$&&!m){if(g=w||$?{}:uo(r),!L)return w?CH(r,qz(g,r)):MH(r,Cs(g,r))}else{if(!A2[I])return m?r:{};g=PH(r,I,L)}}d||(d=new O3);var e2=d.get(r);if(e2)return e2;d.set(r,g),Io(r)?r.forEach(function(n2){g.add(V3(n2,t,o,n2,r,d))}):Oo(r)&&r.forEach(function(n2,v2){g.set(v2,V3(n2,t,o,v2,r,d))});var r2=R?w?Lr:Cr:w?$1:m1,p2=O?e:r2(r);return z3(p2||r,function(n2,v2){p2&&(v2=n2,n2=r[v2]),I8(g,v2,V3(n2,t,o,v2,r,d))}),g}function $z(r){var t=m1(r);return function(o){return Ls(o,r,t)}}function Ls(r,t,o){var f=o.length;if(r==null)return!f;for(r=N2(r);f--;){var m=o[f],d=t[m],g=r[m];if(g===e&&!(m in r)||!d(g))return!1}return!0}function xs(r,t,o){if(typeof r!="function")throw new H3(i);return Y8(function(){r.apply(e,o)},t)}function U8(r,t,o,f){var m=-1,d=ze,g=!0,L=r.length,w=[],R=t.length;if(!L)return w;o&&(t=I2(t,r3(o))),f?(d=Wa,g=!1):t.length>=a&&(d=T8,g=!1,t=new T6(t));e:for(;++mm?0:m+o),f=f===e||f>m?m:u2(f),f<0&&(f+=m),f=o>f?0:Wo(f);o0&&o(L)?t>1?H1(L,t-1,o,f,m):U4(m,L):f||(m[m.length]=L)}return m}var nr=Zs(),Ss=Zs(!0);function a4(r,t){return r&&nr(r,t,m1)}function tr(r,t){return r&&Ss(r,t,m1)}function Re(r,t){return I4(t,function(o){return V4(r[o])})}function D6(r,t){t=Y4(t,r);for(var o=0,f=t.length;r!=null&&ot}function Kz(r,t){return r!=null&&w2.call(r,t)}function Xz(r,t){return r!=null&&t in N2(r)}function Qz(r,t,o){return r>=x1(t,o)&&r=120&&O.length>=120)?new T6(g&&O):e}O=r[0];var I=-1,$=L[0];e:for(;++I-1;)L!==r&&Se.call(L,w,1),Se.call(r,w,1);return r}function Fs(r,t){for(var o=r?t.length:0,f=o-1;o--;){var m=t[o];if(o==f||m!==d){var d=m;g4(m)?Se.call(r,m,1):vr(r,m)}}return r}function pr(r,t){return r+be(Hs()*(t-r+1))}function fH(r,t,o,f){for(var m=-1,d=o1(ke((t-r)/(o||1)),0),g=k(d);d--;)g[f?d:++m]=r,r+=o;return g}function mr(r,t){var o="";if(!r||t<1||t>G)return o;do t%2&&(o+=r),t=be(t/2),t&&(r+=r);while(t);return o}function m2(r,t){return br(ho(r,t,j1),r+"")}function uH(r){return Ms(k0(r))}function pH(r,t){var o=k0(r);return je(o,R6(t,0,o.length))}function q8(r,t,o,f){if(!G2(r))return r;t=Y4(t,r);for(var m=-1,d=t.length,g=d-1,L=r;L!=null&&++mm?0:m+t),o=o>m?m:o,o<0&&(o+=m),m=t>o?0:o-t>>>0,t>>>=0;for(var d=k(m);++f>>1,g=r[d];g!==null&&!t3(g)&&(o?g<=t:g=a){var R=t?null:wH(r);if(R)return ge(R);g=!1,m=T8,w=new T6}else w=t?[]:L;e:for(;++f=f?r:M3(r,t,o)}var qs=rz||function(r){return p1.clearTimeout(r)};function $s(r,t){if(t)return r.slice();var o=r.length,f=ms?ms(o):new r.constructor(o);return r.copy(f),f}function gr(r){var t=new r.constructor(r.byteLength);return new ye(t).set(new ye(r)),t}function zH(r,t){var o=t?gr(r.buffer):r.buffer;return new r.constructor(o,r.byteOffset,r.byteLength)}function HH(r){var t=new r.constructor(r.source,ki.exec(r));return t.lastIndex=r.lastIndex,t}function gH(r){return B8?N2(B8.call(r)):{}}function js(r,t){var o=t?gr(r.buffer):r.buffer;return new r.constructor(o,r.byteOffset,r.length)}function Ys(r,t){if(r!==t){var o=r!==e,f=r===null,m=r===r,d=t3(r),g=t!==e,L=t===null,w=t===t,R=t3(t);if(!L&&!R&&!d&&r>t||d&&g&&w&&!L&&!R||f&&g&&w||!o&&w||!m)return 1;if(!f&&!d&&!R&&r=L)return w;var R=o[f];return w*(R=="desc"?-1:1)}}return r.index-t.index}function Ks(r,t,o,f){for(var m=-1,d=r.length,g=o.length,L=-1,w=t.length,R=o1(d-g,0),O=k(w+R),I=!f;++L1?o[m-1]:e,g=m>2?o[2]:e;for(d=r.length>3&&typeof d=="function"?(m--,d):e,g&&R1(o[0],o[1],g)&&(d=m<3?e:d,m=1),t=N2(t);++f-1?m[d?t[g]:g]:e}}function co(r){return H4(function(t){var o=t.length,f=o,m=g3.prototype.thru;for(r&&t.reverse();f--;){var d=t[f];if(typeof d!="function")throw new H3(i);if(m&&!g&&qe(d)=="wrapper")var g=new g3([],!0)}for(f=g?f:o;++f1&&g2.reverse(),O&&wL))return!1;var R=d.get(r),O=d.get(t);if(R&&O)return R==t&&O==r;var I=-1,$=!0,e2=o&S?new T6:e;for(d.set(r,t),d.set(t,r);++I1?"& ":"")+t[f],t=t.join(o>2?", ":" "),r.replace(Dv,`{ +/* [wrapped with `+t+`] */ +`)}function RH(r){return l2(r)||B6(r)||!!(ds&&r&&r[ds])}function g4(r,t){var o=typeof r;return t=t??G,!!t&&(o=="number"||o!="symbol"&&Yv.test(r))&&r>-1&&r%1==0&&r0){if(++t>=N)return arguments[0]}else t=0;return r.apply(e,arguments)}}function je(r,t){var o=-1,f=r.length,m=f-1;for(t=t===e?f:t;++o1?r[t-1]:e;return o=typeof o=="function"?(r.pop(),o):e,So(r,o)});function No(r){var t=v(r);return t.__chain__=!0,t}function jg(r,t){return t(r),r}function Ye(r,t){return t(r)}var Yg=H4(function(r){var t=r.length,o=t?r[0]:0,f=this.__wrapped__,m=function(d){return rr(d,r)};return t>1||this.__actions__.length||!(f instanceof z2)||!g4(o)?this.thru(m):(f=f.slice(o,+o+(t?1:0)),f.__actions__.push({func:Ye,args:[m],thisArg:e}),new g3(f,this.__chain__).thru(function(d){return t&&!d.length&&d.push(e),d}))});function Kg(){return No(this)}function Xg(){return new g3(this.value(),this.__chain__)}function Qg(){this.__values__===e&&(this.__values__=Uo(this.value()));var r=this.__index__>=this.__values__.length,t=r?e:this.__values__[this.__index__++];return{done:r,value:t}}function Zg(){return this}function Jg(r){for(var t,o=this;o instanceof Ee;){var f=Mo(o);f.__index__=0,f.__values__=e,t?m.__wrapped__=f:t=f;var m=f;o=o.__wrapped__}return m.__wrapped__=r,t}function eV(){var r=this.__wrapped__;if(r instanceof z2){var t=r;return this.__actions__.length&&(t=new z2(this)),t=t.reverse(),t.__actions__.push({func:Ye,args:[Ar],thisArg:e}),new g3(t,this.__chain__)}return this.thru(Ar)}function cV(){return Ws(this.__wrapped__,this.__actions__)}var aV=Be(function(r,t,o){w2.call(r,o)?++r[o]:d4(r,o,1)});function rV(r,t,o){var f=l2(r)?as:jz;return o&&R1(r,t,o)&&(t=e),f(r,a2(t,3))}function nV(r,t){var o=l2(r)?I4:ws;return o(r,a2(t,3))}var tV=eo(Co),iV=eo(Lo);function sV(r,t){return H1(Ke(r,t),1)}function oV(r,t){return H1(Ke(r,t),j)}function lV(r,t,o){return o=o===e?1:u2(o),H1(Ke(r,t),o)}function ko(r,t){var o=l2(r)?z3:$4;return o(r,a2(t,3))}function bo(r,t){var o=l2(r)?Nd:ys;return o(r,a2(t,3))}var fV=Be(function(r,t,o){w2.call(r,o)?r[o].push(t):d4(r,o,[t])});function uV(r,t,o,f){r=q1(r)?r:k0(r),o=o&&!f?u2(o):0;var m=r.length;return o<0&&(o=o1(m+o,0)),e7(r)?o<=m&&r.indexOf(t,o)>-1:!!m&&H0(r,t,o)>-1}var pV=m2(function(r,t,o){var f=-1,m=typeof t=="function",d=q1(r)?k(r.length):[];return $4(r,function(g){d[++f]=m?a3(t,g,o):W8(g,t,o)}),d}),mV=Be(function(r,t,o){d4(r,o,t)});function Ke(r,t){var o=l2(r)?I2:_s;return o(r,a2(t,3))}function hV(r,t,o,f){return r==null?[]:(l2(t)||(t=t==null?[]:[t]),o=f?e:o,l2(o)||(o=o==null?[]:[o]),Rs(r,t,o))}var vV=Be(function(r,t,o){r[o?0:1].push(t)},function(){return[[],[]]});function dV(r,t,o){var f=l2(r)?Ga:is,m=arguments.length<3;return f(r,a2(t,4),o,m,$4)}function zV(r,t,o){var f=l2(r)?kd:is,m=arguments.length<3;return f(r,a2(t,4),o,m,ys)}function HV(r,t){var o=l2(r)?I4:ws;return o(r,Ze(a2(t,3)))}function gV(r){var t=l2(r)?Ms:uH;return t(r)}function VV(r,t,o){(o?R1(r,t,o):t===e)?t=1:t=u2(t);var f=l2(r)?Uz:pH;return f(r,t)}function MV(r){var t=l2(r)?Wz:hH;return t(r)}function CV(r){if(r==null)return 0;if(q1(r))return e7(r)?V0(r):r.length;var t=y1(r);return t==B2||t==P1?r.size:lr(r).length}function LV(r,t,o){var f=l2(r)?qa:vH;return o&&R1(r,t,o)&&(t=e),f(r,a2(t,3))}var xV=m2(function(r,t){if(r==null)return[];var o=t.length;return o>1&&R1(r,t[0],t[1])?t=[]:o>2&&R1(t[0],t[1],t[2])&&(t=[t[0]]),Rs(r,H1(t,1),[])}),Xe=nz||function(){return p1.Date.now()};function yV(r,t){if(typeof t!="function")throw new H3(i);return r=u2(r),function(){if(--r<1)return t.apply(this,arguments)}}function Ao(r,t,o){return t=o?e:t,t=r&&t==null?r.length:t,z4(r,F,e,e,e,e,t)}function _o(r,t){var o;if(typeof t!="function")throw new H3(i);return r=u2(r),function(){return--r>0&&(o=t.apply(this,arguments)),r<=1&&(t=e),o}}var Er=m2(function(r,t,o){var f=E;if(o.length){var m=W4(o,S0(Er));f|=C}return z4(r,f,t,o,m)}),Eo=m2(function(r,t,o){var f=E|D;if(o.length){var m=W4(o,S0(Eo));f|=C}return z4(t,f,r,o,m)});function Po(r,t,o){t=o?e:t;var f=z4(r,M,e,e,e,e,e,t);return f.placeholder=Po.placeholder,f}function To(r,t,o){t=o?e:t;var f=z4(r,H,e,e,e,e,e,t);return f.placeholder=To.placeholder,f}function Ro(r,t,o){var f,m,d,g,L,w,R=0,O=!1,I=!1,$=!0;if(typeof r!="function")throw new H3(i);t=L3(t)||0,G2(o)&&(O=!!o.leading,I="maxWait"in o,d=I?o1(L3(o.maxWait)||0,t):d,$="trailing"in o?!!o.trailing:$);function e2(r1){var I3=f,C4=m;return f=m=e,R=r1,g=r.apply(C4,I3),g}function r2(r1){return R=r1,L=Y8(v2,t),O?e2(r1):g}function p2(r1){var I3=r1-w,C4=r1-R,cl=t-I3;return I?x1(cl,d-C4):cl}function n2(r1){var I3=r1-w,C4=r1-R;return w===e||I3>=t||I3<0||I&&C4>=d}function v2(){var r1=Xe();if(n2(r1))return g2(r1);L=Y8(v2,p2(r1))}function g2(r1){return L=e,$&&f?e2(r1):(f=m=e,g)}function i3(){L!==e&&qs(L),R=0,f=w=m=L=e}function D1(){return L===e?g:g2(Xe())}function s3(){var r1=Xe(),I3=n2(r1);if(f=arguments,m=this,w=r1,I3){if(L===e)return r2(w);if(I)return qs(L),L=Y8(v2,t),e2(w)}return L===e&&(L=Y8(v2,t)),g}return s3.cancel=i3,s3.flush=D1,s3}var wV=m2(function(r,t){return xs(r,1,t)}),SV=m2(function(r,t,o){return xs(r,L3(t)||0,o)});function NV(r){return z4(r,B)}function Qe(r,t){if(typeof r!="function"||t!=null&&typeof t!="function")throw new H3(i);var o=function(){var f=arguments,m=t?t.apply(this,f):f[0],d=o.cache;if(d.has(m))return d.get(m);var g=r.apply(this,f);return o.cache=d.set(m,g)||d,g};return o.cache=new(Qe.Cache||v4),o}Qe.Cache=v4;function Ze(r){if(typeof r!="function")throw new H3(i);return function(){var t=arguments;switch(t.length){case 0:return!r.call(this);case 1:return!r.call(this,t[0]);case 2:return!r.call(this,t[0],t[1]);case 3:return!r.call(this,t[0],t[1],t[2])}return!r.apply(this,t)}}function kV(r){return _o(2,r)}var bV=dH(function(r,t){t=t.length==1&&l2(t[0])?I2(t[0],r3(a2())):I2(H1(t,1),r3(a2()));var o=t.length;return m2(function(f){for(var m=-1,d=x1(f.length,o);++m=t}),B6=ks(function(){return arguments}())?ks:function(r){return X2(r)&&w2.call(r,"callee")&&!vs.call(r,"callee")},l2=k.isArray,qV=Xi?r3(Xi):Jz;function q1(r){return r!=null&&Je(r.length)&&!V4(r)}function a1(r){return X2(r)&&q1(r)}function $V(r){return r===!0||r===!1||X2(r)&&T1(r)==d1}var X4=iz||qr,jV=Qi?r3(Qi):eH;function YV(r){return X2(r)&&r.nodeType===1&&!K8(r)}function KV(r){if(r==null)return!0;if(q1(r)&&(l2(r)||typeof r=="string"||typeof r.splice=="function"||X4(r)||N0(r)||B6(r)))return!r.length;var t=y1(r);if(t==B2||t==P1)return!r.size;if(j8(r))return!lr(r).length;for(var o in r)if(w2.call(r,o))return!1;return!0}function XV(r,t){return G8(r,t)}function QV(r,t,o){o=typeof o=="function"?o:e;var f=o?o(r,t):e;return f===e?G8(r,t,e,o):!!f}function Tr(r){if(!X2(r))return!1;var t=T1(r);return t==K2||t==e4||typeof r.message=="string"&&typeof r.name=="string"&&!K8(r)}function ZV(r){return typeof r=="number"&&zs(r)}function V4(r){if(!G2(r))return!1;var t=T1(r);return t==W1||t==R3||t==c3||t==k6}function Fo(r){return typeof r=="number"&&r==u2(r)}function Je(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=G}function G2(r){var t=typeof r;return r!=null&&(t=="object"||t=="function")}function X2(r){return r!=null&&typeof r=="object"}var Oo=Zi?r3(Zi):aH;function JV(r,t){return r===t||or(r,t,yr(t))}function eM(r,t,o){return o=typeof o=="function"?o:e,or(r,t,yr(t),o)}function cM(r){return Bo(r)&&r!=+r}function aM(r){if(OH(r))throw new o2(n);return bs(r)}function rM(r){return r===null}function nM(r){return r==null}function Bo(r){return typeof r=="number"||X2(r)&&T1(r)==N6}function K8(r){if(!X2(r)||T1(r)!=D3)return!1;var t=we(r);if(t===null)return!0;var o=w2.call(t,"constructor")&&t.constructor;return typeof o=="function"&&o instanceof o&&Ce.call(o)==ez}var Rr=Ji?r3(Ji):rH;function tM(r){return Fo(r)&&r>=-G&&r<=G}var Io=es?r3(es):nH;function e7(r){return typeof r=="string"||!l2(r)&&X2(r)&&T1(r)==m4}function t3(r){return typeof r=="symbol"||X2(r)&&T1(r)==d0}var N0=cs?r3(cs):tH;function iM(r){return r===e}function sM(r){return X2(r)&&y1(r)==c4}function oM(r){return X2(r)&&T1(r)==Sa}var lM=Ge(fr),fM=Ge(function(r,t){return r<=t});function Uo(r){if(!r)return[];if(q1(r))return e7(r)?F3(r):G1(r);if(R8&&r[R8])return Ud(r[R8]());var t=y1(r),o=t==B2?Qa:t==P1?ge:k0;return o(r)}function M4(r){if(!r)return r===0?r:0;if(r=L3(r),r===j||r===-j){var t=r<0?-1:1;return t*t2}return r===r?r:0}function u2(r){var t=M4(r),o=t%1;return t===t?o?t-o:t:0}function Wo(r){return r?R6(u2(r),0,i2):0}function L3(r){if(typeof r=="number")return r;if(t3(r))return s2;if(G2(r)){var t=typeof r.valueOf=="function"?r.valueOf():r;r=G2(t)?t+"":t}if(typeof r!="string")return r===0?r:+r;r=ss(r);var o=qv.test(r);return o||jv.test(r)?yd(r.slice(2),o?2:8):Gv.test(r)?s2:+r}function Go(r){return r4(r,$1(r))}function uM(r){return r?R6(u2(r),-G,G):r===0?r:0}function y2(r){return r==null?"":n3(r)}var pM=y0(function(r,t){if(j8(t)||q1(t)){r4(t,m1(t),r);return}for(var o in t)w2.call(t,o)&&I8(r,o,t[o])}),qo=y0(function(r,t){r4(t,$1(t),r)}),c7=y0(function(r,t,o,f){r4(t,$1(t),r,f)}),mM=y0(function(r,t,o,f){r4(t,m1(t),r,f)}),hM=H4(rr);function vM(r,t){var o=x0(r);return t==null?o:Cs(o,t)}var dM=m2(function(r,t){r=N2(r);var o=-1,f=t.length,m=f>2?t[2]:e;for(m&&R1(t[0],t[1],m)&&(f=1);++o1),d}),r4(r,Lr(r),o),f&&(o=V3(o,h|z|V,SH));for(var m=t.length;m--;)vr(o,t[m]);return o});function PM(r,t){return jo(r,Ze(a2(t)))}var TM=H4(function(r,t){return r==null?{}:oH(r,t)});function jo(r,t){if(r==null)return{};var o=I2(Lr(r),function(f){return[f]});return t=a2(t),Ds(r,o,function(f,m){return t(f,m[0])})}function RM(r,t,o){t=Y4(t,r);var f=-1,m=t.length;for(m||(m=1,r=e);++ft){var f=r;r=t,t=f}if(o||r%1||t%1){var m=Hs();return x1(r+m*(t-r+xd("1e-"+((m+"").length-1))),t)}return pr(r,t)}var jM=w0(function(r,t,o){return t=t.toLowerCase(),r+(o?Xo(t):t)});function Xo(r){return Or(y2(r).toLowerCase())}function Qo(r){return r=y2(r),r&&r.replace(Kv,Dd).replace(hd,"")}function YM(r,t,o){r=y2(r),t=n3(t);var f=r.length;o=o===e?f:R6(u2(o),0,f);var m=o;return o-=t.length,o>=0&&r.slice(o,m)==t}function KM(r){return r=y2(r),r&&kv.test(r)?r.replace(Si,Fd):r}function XM(r){return r=y2(r),r&&Tv.test(r)?r.replace(Pa,"\\$&"):r}var QM=w0(function(r,t,o){return r+(o?"-":"")+t.toLowerCase()}),ZM=w0(function(r,t,o){return r+(o?" ":"")+t.toLowerCase()}),JM=Js("toLowerCase");function eC(r,t,o){r=y2(r),t=u2(t);var f=t?V0(r):0;if(!t||f>=t)return r;var m=(t-f)/2;return We(be(m),o)+r+We(ke(m),o)}function cC(r,t,o){r=y2(r),t=u2(t);var f=t?V0(r):0;return t&&f>>0,o?(r=y2(r),r&&(typeof t=="string"||t!=null&&!Rr(t))&&(t=n3(t),!t&&g0(r))?K4(F3(r),0,o):r.split(t,o)):[]}var oC=w0(function(r,t,o){return r+(o?" ":"")+Or(t)});function lC(r,t,o){return r=y2(r),o=o==null?0:R6(u2(o),0,r.length),t=n3(t),r.slice(o,o+t.length)==t}function fC(r,t,o){var f=v.templateSettings;o&&R1(r,t,o)&&(t=e),r=y2(r),t=c7({},t,f,io);var m=c7({},t.imports,f.imports,io),d=m1(m),g=Xa(m,d),L,w,R=0,O=t.interpolate||he,I="__p += '",$=Za((t.escape||he).source+"|"+O.source+"|"+(O===Ni?Wv:he).source+"|"+(t.evaluate||he).source+"|$","g"),e2="//# sourceURL="+(w2.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++gd+"]")+` +`;r.replace($,function(n2,v2,g2,i3,D1,s3){return g2||(g2=i3),I+=r.slice(R,s3).replace(Xv,Od),v2&&(L=!0,I+=`' + +__e(`+v2+`) + +'`),D1&&(w=!0,I+=`'; +`+D1+`; +__p += '`),g2&&(I+=`' + +((__t = (`+g2+`)) == null ? '' : __t) + +'`),R=s3+n2.length,n2}),I+=`'; +`;var r2=w2.call(t,"variable")&&t.variable;if(!r2)I=`with (obj) { +`+I+` +} +`;else if(Iv.test(r2))throw new o2(s);I=(w?I.replace(yv,""):I).replace(wv,"$1").replace(Sv,"$1;"),I="function("+(r2||"obj")+`) { +`+(r2?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(L?", __e = _.escape":"")+(w?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+I+`return __p +}`;var p2=Jo(function(){return x2(d,e2+"return "+I).apply(e,g)});if(p2.source=I,Tr(p2))throw p2;return p2}function uC(r){return y2(r).toLowerCase()}function pC(r){return y2(r).toUpperCase()}function mC(r,t,o){if(r=y2(r),r&&(o||t===e))return ss(r);if(!r||!(t=n3(t)))return r;var f=F3(r),m=F3(t),d=os(f,m),g=ls(f,m)+1;return K4(f,d,g).join("")}function hC(r,t,o){if(r=y2(r),r&&(o||t===e))return r.slice(0,us(r)+1);if(!r||!(t=n3(t)))return r;var f=F3(r),m=ls(f,F3(t))+1;return K4(f,0,m).join("")}function vC(r,t,o){if(r=y2(r),r&&(o||t===e))return r.replace(Ta,"");if(!r||!(t=n3(t)))return r;var f=F3(r),m=os(f,F3(t));return K4(f,m).join("")}function dC(r,t){var o=J,f=b;if(G2(t)){var m="separator"in t?t.separator:m;o="length"in t?u2(t.length):o,f="omission"in t?n3(t.omission):f}r=y2(r);var d=r.length;if(g0(r)){var g=F3(r);d=g.length}if(o>=d)return r;var L=o-V0(f);if(L<1)return f;var w=g?K4(g,0,L).join(""):r.slice(0,L);if(m===e)return w+f;if(g&&(L+=w.length-L),Rr(m)){if(r.slice(L).search(m)){var R,O=w;for(m.global||(m=Za(m.source,y2(ki.exec(m))+"g")),m.lastIndex=0;R=m.exec(O);)var I=R.index;w=w.slice(0,I===e?L:I)}}else if(r.indexOf(n3(m),L)!=L){var $=w.lastIndexOf(m);$>-1&&(w=w.slice(0,$))}return w+f}function zC(r){return r=y2(r),r&&Nv.test(r)?r.replace(wi,$d):r}var HC=w0(function(r,t,o){return r+(o?" ":"")+t.toUpperCase()}),Or=Js("toUpperCase");function Zo(r,t,o){return r=y2(r),t=o?e:t,t===e?Id(r)?Kd(r):_d(r):r.match(t)||[]}var Jo=m2(function(r,t){try{return a3(r,e,t)}catch(o){return Tr(o)?o:new o2(o)}}),gC=H4(function(r,t){return z3(t,function(o){o=n4(o),d4(r,o,Er(r[o],r))}),r});function VC(r){var t=r==null?0:r.length,o=a2();return r=t?I2(r,function(f){if(typeof f[1]!="function")throw new H3(i);return[o(f[0]),f[1]]}):[],m2(function(f){for(var m=-1;++mG)return[];var o=i2,f=x1(r,i2);t=a2(t),r-=i2;for(var m=Ka(f,t);++o0||t<0)?new z2(o):(r<0?o=o.takeRight(-r):r&&(o=o.drop(r)),t!==e&&(t=u2(t),o=t<0?o.dropRight(-t):o.take(t-r)),o)},z2.prototype.takeRightWhile=function(r){return this.reverse().takeWhile(r).reverse()},z2.prototype.toArray=function(){return this.take(i2)},a4(z2.prototype,function(r,t){var o=/^(?:filter|find|map|reject)|While$/.test(t),f=/^(?:head|last)$/.test(t),m=v[f?"take"+(t=="last"?"Right":""):t],d=f||/^find/.test(t);m&&(v.prototype[t]=function(){var g=this.__wrapped__,L=f?[1]:arguments,w=g instanceof z2,R=L[0],O=w||l2(g),I=function(v2){var g2=m.apply(v,U4([v2],L));return f&&$?g2[0]:g2};O&&o&&typeof R=="function"&&R.length!=1&&(w=O=!1);var $=this.__chain__,e2=!!this.__actions__.length,r2=d&&!$,p2=w&&!e2;if(!d&&O){g=p2?g:new z2(this);var n2=r.apply(g,L);return n2.__actions__.push({func:Ye,args:[I],thisArg:e}),new g3(n2,$)}return r2&&p2?r.apply(this,L):(n2=this.thru(I),r2?f?n2.value()[0]:n2.value():n2)})}),z3(["pop","push","shift","sort","splice","unshift"],function(r){var t=Ve[r],o=/^(?:push|sort|unshift)$/.test(r)?"tap":"thru",f=/^(?:pop|shift)$/.test(r);v.prototype[r]=function(){var m=arguments;if(f&&!this.__chain__){var d=this.value();return t.apply(l2(d)?d:[],m)}return this[o](function(g){return t.apply(l2(g)?g:[],m)})}}),a4(z2.prototype,function(r,t){var o=v[t];if(o){var f=o.name+"";w2.call(L0,f)||(L0[f]=[]),L0[f].push({name:t,func:o})}}),L0[Ie(e,D).name]=[{name:"wrapper",func:e}],z2.prototype.clone=zz,z2.prototype.reverse=Hz,z2.prototype.value=gz,v.prototype.at=Yg,v.prototype.chain=Kg,v.prototype.commit=Xg,v.prototype.next=Qg,v.prototype.plant=Jg,v.prototype.reverse=eV,v.prototype.toJSON=v.prototype.valueOf=v.prototype.value=cV,v.prototype.first=v.prototype.head,R8&&(v.prototype[R8]=Zg),v},G4=Xd();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(p1._=G4,define(function(){return G4})):_6?((_6.exports=G4)._=G4,Ia._=G4):p1._=G4}).call(b0)});var vl=Y1(H2=>{"use strict";var r5=Symbol.for("react.element"),pL=Symbol.for("react.portal"),mL=Symbol.for("react.fragment"),hL=Symbol.for("react.strict_mode"),vL=Symbol.for("react.profiler"),dL=Symbol.for("react.provider"),zL=Symbol.for("react.context"),HL=Symbol.for("react.forward_ref"),gL=Symbol.for("react.suspense"),VL=Symbol.for("react.memo"),ML=Symbol.for("react.lazy"),tl=Symbol.iterator;function CL(e){return e===null||typeof e!="object"?null:(e=tl&&e[tl]||e["@@iterator"],typeof e=="function"?e:null)}var ol={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ll=Object.assign,fl={};function R0(e,c,a){this.props=e,this.context=c,this.refs=fl,this.updater=a||ol}R0.prototype.isReactComponent={};R0.prototype.setState=function(e,c){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,c,"setState")};R0.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function ul(){}ul.prototype=R0.prototype;function rn(e,c,a){this.props=e,this.context=c,this.refs=fl,this.updater=a||ol}var nn=rn.prototype=new ul;nn.constructor=rn;ll(nn,R0.prototype);nn.isPureReactComponent=!0;var il=Array.isArray,pl=Object.prototype.hasOwnProperty,tn={current:null},ml={key:!0,ref:!0,__self:!0,__source:!0};function hl(e,c,a){var n,i={},s=null,l=null;if(c!=null)for(n in c.ref!==void 0&&(l=c.ref),c.key!==void 0&&(s=""+c.key),c)pl.call(c,n)&&!ml.hasOwnProperty(n)&&(i[n]=c[n]);var u=arguments.length-2;if(u===1)i.children=a;else if(1{"use strict";dl.exports=vl()});var bf=Y1((fk,kf)=>{"use strict";var ty="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";kf.exports=ty});var Pf=Y1((uk,Ef)=>{"use strict";var iy=bf();function Af(){}function _f(){}_f.resetWarningCache=Af;Ef.exports=function(){function e(n,i,s,l,u,p){if(p!==iy){var h=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw h.name="Invariant Violation",h}}e.isRequired=e;function c(){return e}var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:c,element:e,elementType:e,instanceOf:c,node:e,objectOf:c,oneOf:c,oneOfType:c,shape:c,exact:c,checkPropTypes:_f,resetWarningCache:Af};return a.PropTypes=a,a}});var Rf=Y1((hk,Tf)=>{Tf.exports=Pf()();var pk,mk});var Wf=Y1((Ck,Uf)=>{Uf.exports=function(c,a,n,i){var s=n?n.call(i,c,a):void 0;if(s!==void 0)return!!s;if(c===a)return!0;if(typeof c!="object"||!c||typeof a!="object"||!a)return!1;var l=Object.keys(c),u=Object.keys(a);if(l.length!==u.length)return!1;for(var p=Object.prototype.hasOwnProperty.bind(a),h=0;h{"use strict";function l9(e,c){var a=e.length;e.push(c);e:for(;0>>1,i=e[n];if(0>>1;nK7(u,a))pK7(h,u)?(e[n]=h,e[p]=a,n=p):(e[n]=u,e[l]=a,n=l);else if(pK7(h,a))e[n]=h,e[p]=a,n=p;else break e}}return c}function K7(e,c){var a=e.sortIndex-c.sortIndex;return a!==0?a:e.id-c.id}typeof performance=="object"&&typeof performance.now=="function"?(Fu=performance,_2.unstable_now=function(){return Fu.now()}):(i9=Date,Ou=i9.now(),_2.unstable_now=function(){return i9.now()-Ou});var Fu,i9,Ou,s4=[],t6=[],nw=1,S3=null,S1=3,Z7=!1,e0=!1,L5=!1,Uu=typeof setTimeout=="function"?setTimeout:null,Wu=typeof clearTimeout=="function"?clearTimeout:null,Bu=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function f9(e){for(var c=G3(t6);c!==null;){if(c.callback===null)Q7(t6);else if(c.startTime<=e)Q7(t6),c.sortIndex=c.expirationTime,l9(s4,c);else break;c=G3(t6)}}function u9(e){if(L5=!1,f9(e),!e0)if(G3(s4)!==null)e0=!0,m9(p9);else{var c=G3(t6);c!==null&&h9(u9,c.startTime-e)}}function p9(e,c){e0=!1,L5&&(L5=!1,Wu(x5),x5=-1),Z7=!0;var a=S1;try{for(f9(c),S3=G3(s4);S3!==null&&(!(S3.expirationTime>c)||e&&!$u());){var n=S3.callback;if(typeof n=="function"){S3.callback=null,S1=S3.priorityLevel;var i=n(S3.expirationTime<=c);c=_2.unstable_now(),typeof i=="function"?S3.callback=i:S3===G3(s4)&&Q7(s4),f9(c)}else Q7(s4);S3=G3(s4)}if(S3!==null)var s=!0;else{var l=G3(t6);l!==null&&h9(u9,l.startTime-c),s=!1}return s}finally{S3=null,S1=a,Z7=!1}}var J7=!1,X7=null,x5=-1,Gu=5,qu=-1;function $u(){return!(_2.unstable_now()-que||125n?(e.sortIndex=a,l9(t6,e),G3(s4)===null&&e===G3(t6)&&(L5?(Wu(x5),x5=-1):L5=!0,h9(u9,a-n))):(e.sortIndex=i,l9(s4,e),e0||Z7||(e0=!0,m9(p9))),e};_2.unstable_shouldYield=$u;_2.unstable_wrapCallback=function(e){var c=S1;return function(){var a=S1;S1=c;try{return e.apply(this,arguments)}finally{S1=a}}}});var Ku=Y1((ub,Yu)=>{"use strict";Yu.exports=ju()});var cv=Y1(v3=>{"use strict";var am=g1(),m3=Ku();function W(e){for(var c="https://reactjs.org/docs/error-decoder.html?invariant="+e,a=1;a"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),D9=Object.prototype.hasOwnProperty,tw=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Xu={},Qu={};function iw(e){return D9.call(Qu,e)?!0:D9.call(Xu,e)?!1:tw.test(e)?Qu[e]=!0:(Xu[e]=!0,!1)}function sw(e,c,a,n){if(a!==null&&a.type===0)return!1;switch(typeof c){case"function":case"symbol":return!0;case"boolean":return n?!1:a!==null?!a.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function ow(e,c,a,n){if(c===null||typeof c>"u"||sw(e,c,a,n))return!0;if(n)return!1;if(a!==null)switch(a.type){case 3:return!c;case 4:return c===!1;case 5:return isNaN(c);case 6:return isNaN(c)||1>c}return!1}function U1(e,c,a,n,i,s,l){this.acceptsBooleans=c===2||c===3||c===4,this.attributeName=n,this.attributeNamespace=i,this.mustUseProperty=a,this.propertyName=e,this.type=c,this.sanitizeURL=s,this.removeEmptyString=l}var C1={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){C1[e]=new U1(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var c=e[0];C1[c]=new U1(c,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){C1[e]=new U1(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){C1[e]=new U1(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){C1[e]=new U1(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){C1[e]=new U1(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){C1[e]=new U1(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){C1[e]=new U1(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){C1[e]=new U1(e,5,!1,e.toLowerCase(),null,!1,!1)});var kt=/[\-:]([a-z])/g;function bt(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var c=e.replace(kt,bt);C1[c]=new U1(c,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var c=e.replace(kt,bt);C1[c]=new U1(c,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var c=e.replace(kt,bt);C1[c]=new U1(c,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){C1[e]=new U1(e,1,!1,e.toLowerCase(),null,!1,!1)});C1.xlinkHref=new U1("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){C1[e]=new U1(e,1,!1,e.toLowerCase(),null,!0,!0)});function At(e,c,a,n){var i=C1.hasOwnProperty(c)?C1[c]:null;(i!==null?i.type!==0:n||!(2u||i[l]!==s[u]){var p=` +`+i[l].replace(" at new "," at ");return e.displayName&&p.includes("")&&(p=p.replace("",e.displayName)),p}while(1<=l&&0<=u);break}}}finally{d9=!1,Error.prepareStackTrace=a}return(e=e?e.displayName||e.name:"")?E5(e):""}function lw(e){switch(e.tag){case 5:return E5(e.type);case 16:return E5("Lazy");case 13:return E5("Suspense");case 19:return E5("SuspenseList");case 0:case 2:case 15:return e=z9(e.type,!1),e;case 11:return e=z9(e.type.render,!1),e;case 1:return e=z9(e.type,!0),e;default:return""}}function I9(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case r8:return"Fragment";case a8:return"Portal";case F9:return"Profiler";case _t:return"StrictMode";case O9:return"Suspense";case B9:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case tm:return(e.displayName||"Context")+".Consumer";case nm:return(e._context.displayName||"Context")+".Provider";case Et:var c=e.render;return e=e.displayName,e||(e=c.displayName||c.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Pt:return c=e.displayName||null,c!==null?c:I9(e.type)||"Memo";case s6:c=e._payload,e=e._init;try{return I9(e(c))}catch{}}return null}function fw(e){var c=e.type;switch(e.tag){case 24:return"Cache";case 9:return(c.displayName||"Context")+".Consumer";case 10:return(c._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=c.render,e=e.displayName||e.name||"",c.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return c;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return I9(c);case 8:return c===_t?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof c=="function")return c.displayName||c.name||null;if(typeof c=="string")return c}return null}function M6(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function sm(e){var c=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(c==="checkbox"||c==="radio")}function uw(e){var c=sm(e)?"checked":"value",a=Object.getOwnPropertyDescriptor(e.constructor.prototype,c),n=""+e[c];if(!e.hasOwnProperty(c)&&typeof a<"u"&&typeof a.get=="function"&&typeof a.set=="function"){var i=a.get,s=a.set;return Object.defineProperty(e,c,{configurable:!0,get:function(){return i.call(this)},set:function(l){n=""+l,s.call(this,l)}}),Object.defineProperty(e,c,{enumerable:a.enumerable}),{getValue:function(){return n},setValue:function(l){n=""+l},stopTracking:function(){e._valueTracker=null,delete e[c]}}}}function cc(e){e._valueTracker||(e._valueTracker=uw(e))}function om(e){if(!e)return!1;var c=e._valueTracker;if(!c)return!0;var a=c.getValue(),n="";return e&&(n=sm(e)?e.checked?"true":"false":e.value),e=n,e!==a?(c.setValue(e),!0):!1}function kc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function U9(e,c){var a=c.checked;return j2({},c,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:a??e._wrapperState.initialChecked})}function Ju(e,c){var a=c.defaultValue==null?"":c.defaultValue,n=c.checked!=null?c.checked:c.defaultChecked;a=M6(c.value!=null?c.value:a),e._wrapperState={initialChecked:n,initialValue:a,controlled:c.type==="checkbox"||c.type==="radio"?c.checked!=null:c.value!=null}}function lm(e,c){c=c.checked,c!=null&&At(e,"checked",c,!1)}function W9(e,c){lm(e,c);var a=M6(c.value),n=c.type;if(a!=null)n==="number"?(a===0&&e.value===""||e.value!=a)&&(e.value=""+a):e.value!==""+a&&(e.value=""+a);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}c.hasOwnProperty("value")?G9(e,c.type,a):c.hasOwnProperty("defaultValue")&&G9(e,c.type,M6(c.defaultValue)),c.checked==null&&c.defaultChecked!=null&&(e.defaultChecked=!!c.defaultChecked)}function ep(e,c,a){if(c.hasOwnProperty("value")||c.hasOwnProperty("defaultValue")){var n=c.type;if(!(n!=="submit"&&n!=="reset"||c.value!==void 0&&c.value!==null))return;c=""+e._wrapperState.initialValue,a||c===e.value||(e.value=c),e.defaultValue=c}a=e.name,a!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,a!==""&&(e.name=a)}function G9(e,c,a){(c!=="number"||kc(e.ownerDocument)!==e)&&(a==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+a&&(e.defaultValue=""+a))}var P5=Array.isArray;function h8(e,c,a,n){if(e=e.options,c){c={};for(var i=0;i"+c.valueOf().toString()+"",c=ac.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;c.firstChild;)e.appendChild(c.firstChild)}});function j5(e,c){if(c){var a=e.firstChild;if(a&&a===e.lastChild&&a.nodeType===3){a.nodeValue=c;return}}e.textContent=c}var D5={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},pw=["Webkit","ms","Moz","O"];Object.keys(D5).forEach(function(e){pw.forEach(function(c){c=c+e.charAt(0).toUpperCase()+e.substring(1),D5[c]=D5[e]})});function mm(e,c,a){return c==null||typeof c=="boolean"||c===""?"":a||typeof c!="number"||c===0||D5.hasOwnProperty(e)&&D5[e]?(""+c).trim():c+"px"}function hm(e,c){e=e.style;for(var a in c)if(c.hasOwnProperty(a)){var n=a.indexOf("--")===0,i=mm(a,c[a],n);a==="float"&&(a="cssFloat"),n?e.setProperty(a,i):e[a]=i}}var mw=j2({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function j9(e,c){if(c){if(mw[e]&&(c.children!=null||c.dangerouslySetInnerHTML!=null))throw Error(W(137,e));if(c.dangerouslySetInnerHTML!=null){if(c.children!=null)throw Error(W(60));if(typeof c.dangerouslySetInnerHTML!="object"||!("__html"in c.dangerouslySetInnerHTML))throw Error(W(61))}if(c.style!=null&&typeof c.style!="object")throw Error(W(62))}}function Y9(e,c){if(e.indexOf("-")===-1)return typeof c.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var K9=null;function Tt(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var X9=null,v8=null,d8=null;function rp(e){if(e=ue(e)){if(typeof X9!="function")throw Error(W(280));var c=e.stateNode;c&&(c=ra(c),X9(e.stateNode,e.type,c))}}function vm(e){v8?d8?d8.push(e):d8=[e]:v8=e}function dm(){if(v8){var e=v8,c=d8;if(d8=v8=null,rp(e),c)for(e=0;e>>=0,e===0?32:31-(xw(e)/yw|0)|0}var rc=64,nc=4194304;function T5(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Ec(e,c){var a=e.pendingLanes;if(a===0)return 0;var n=0,i=e.suspendedLanes,s=e.pingedLanes,l=a&268435455;if(l!==0){var u=l&~i;u!==0?n=T5(u):(s&=l,s!==0&&(n=T5(s)))}else l=a&~i,l!==0?n=T5(l):s!==0&&(n=T5(s));if(n===0)return 0;if(c!==0&&c!==n&&!(c&i)&&(i=n&-n,s=c&-c,i>=s||i===16&&(s&4194240)!==0))return c;if(n&4&&(n|=a&16),c=e.entangledLanes,c!==0)for(e=e.entanglements,c&=n;0a;a++)c.push(e);return c}function le(e,c,a){e.pendingLanes|=c,c!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,c=31-K3(c),e[c]=a}function kw(e,c){var a=e.pendingLanes&~c;e.pendingLanes=c,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=c,e.mutableReadLanes&=c,e.entangledLanes&=c,c=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=O5),pp=" ",mp=!1;function Rm(e,c){switch(e){case"keyup":return rS.indexOf(c.keyCode)!==-1;case"keydown":return c.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Dm(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var n8=!1;function tS(e,c){switch(e){case"compositionend":return Dm(c);case"keypress":return c.which!==32?null:(mp=!0,pp);case"textInput":return e=c.data,e===pp&&mp?null:e;default:return null}}function iS(e,c){if(n8)return e==="compositionend"||!Wt&&Rm(e,c)?(e=Pm(),Vc=Bt=u6=null,n8=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(c.ctrlKey||c.altKey||c.metaKey)||c.ctrlKey&&c.altKey){if(c.char&&1=c)return{node:a,offset:c-e};e=n}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=dp(a)}}function Im(e,c){return e&&c?e===c?!0:e&&e.nodeType===3?!1:c&&c.nodeType===3?Im(e,c.parentNode):"contains"in e?e.contains(c):e.compareDocumentPosition?!!(e.compareDocumentPosition(c)&16):!1:!1}function Um(){for(var e=window,c=kc();c instanceof e.HTMLIFrameElement;){try{var a=typeof c.contentWindow.location.href=="string"}catch{a=!1}if(a)e=c.contentWindow;else break;c=kc(e.document)}return c}function Gt(e){var c=e&&e.nodeName&&e.nodeName.toLowerCase();return c&&(c==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||c==="textarea"||e.contentEditable==="true")}function vS(e){var c=Um(),a=e.focusedElem,n=e.selectionRange;if(c!==a&&a&&a.ownerDocument&&Im(a.ownerDocument.documentElement,a)){if(n!==null&&Gt(a)){if(c=n.start,e=n.end,e===void 0&&(e=c),"selectionStart"in a)a.selectionStart=c,a.selectionEnd=Math.min(e,a.value.length);else if(e=(c=a.ownerDocument||document)&&c.defaultView||window,e.getSelection){e=e.getSelection();var i=a.textContent.length,s=Math.min(n.start,i);n=n.end===void 0?s:Math.min(n.end,i),!e.extend&&s>n&&(i=n,n=s,s=i),i=zp(a,s);var l=zp(a,n);i&&l&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==l.node||e.focusOffset!==l.offset)&&(c=c.createRange(),c.setStart(i.node,i.offset),e.removeAllRanges(),s>n?(e.addRange(c),e.extend(l.node,l.offset)):(c.setEnd(l.node,l.offset),e.addRange(c)))}}for(c=[],e=a;e=e.parentNode;)e.nodeType===1&&c.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof a.focus=="function"&&a.focus(),a=0;a=document.documentMode,t8=null,at=null,I5=null,rt=!1;function Hp(e,c,a){var n=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;rt||t8==null||t8!==kc(n)||(n=t8,"selectionStart"in n&&Gt(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),I5&&J5(I5,n)||(I5=n,n=Rc(at,"onSelect"),0o8||(e.current=lt[o8],lt[o8]=null,o8--)}function E2(e,c){o8++,lt[o8]=e.current,e.current=c}var C6={},A1=x6(C6),Z1=x6(!1),o0=C6;function M8(e,c){var a=e.type.contextTypes;if(!a)return C6;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===c)return n.__reactInternalMemoizedMaskedChildContext;var i={},s;for(s in a)i[s]=c[s];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=c,e.__reactInternalMemoizedMaskedChildContext=i),i}function J1(e){return e=e.childContextTypes,e!=null}function Fc(){O2(Z1),O2(A1)}function Sp(e,c,a){if(A1.current!==C6)throw Error(W(168));E2(A1,c),E2(Z1,a)}function Qm(e,c,a){var n=e.stateNode;if(c=c.childContextTypes,typeof n.getChildContext!="function")return a;n=n.getChildContext();for(var i in n)if(!(i in c))throw Error(W(108,fw(e)||"Unknown",i));return j2({},a,n)}function Oc(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||C6,o0=A1.current,E2(A1,e),E2(Z1,Z1.current),!0}function Np(e,c,a){var n=e.stateNode;if(!n)throw Error(W(169));a?(e=Qm(e,c,o0),n.__reactInternalMemoizedMergedChildContext=e,O2(Z1),O2(A1),E2(A1,e)):O2(Z1),E2(Z1,a)}var A4=null,na=!1,N9=!1;function Zm(e){A4===null?A4=[e]:A4.push(e)}function yS(e){na=!0,Zm(e)}function y6(){if(!N9&&A4!==null){N9=!0;var e=0,c=S2;try{var a=A4;for(S2=1;e>=l,i-=l,_4=1<<32-K3(c)+i|a<J?(b=B,B=null):b=B.sibling;var N=x(M,B,C[J],_);if(N===null){B===null&&(B=b);break}e&&B&&N.alternate===null&&c(M,B),H=s(N,H,J),U===null?F=N:U.sibling=N,U=N,B=b}if(J===C.length)return a(M,B),U2&&c0(M,J),F;if(B===null){for(;JJ?(b=B,B=null):b=B.sibling;var A=x(M,B,N.value,_);if(A===null){B===null&&(B=b);break}e&&B&&A.alternate===null&&c(M,B),H=s(A,H,J),U===null?F=A:U.sibling=A,U=A,B=b}if(N.done)return a(M,B),U2&&c0(M,J),F;if(B===null){for(;!N.done;J++,N=C.next())N=V(M,N.value,_),N!==null&&(H=s(N,H,J),U===null?F=N:U.sibling=N,U=N);return U2&&c0(M,J),F}for(B=n(M,B);!N.done;J++,N=C.next())N=S(B,M,J,N.value,_),N!==null&&(e&&N.alternate!==null&&B.delete(N.key===null?J:N.key),H=s(N,H,J),U===null?F=N:U.sibling=N,U=N);return e&&B.forEach(function(T){return c(M,T)}),U2&&c0(M,J),F}function Z(M,H,C,_){if(typeof C=="object"&&C!==null&&C.type===r8&&C.key===null&&(C=C.props.children),typeof C=="object"&&C!==null){switch(C.$$typeof){case ec:e:{for(var F=C.key,U=H;U!==null;){if(U.key===F){if(F=C.type,F===r8){if(U.tag===7){a(M,U.sibling),H=i(U,C.props.children),H.return=M,M=H;break e}}else if(U.elementType===F||typeof F=="object"&&F!==null&&F.$$typeof===s6&&Tp(F)===U.type){a(M,U.sibling),H=i(U,C.props),H.ref=k5(M,U,C),H.return=M,M=H;break e}a(M,U);break}else c(M,U);U=U.sibling}C.type===r8?(H=s0(C.props.children,M.mode,_,C.key),H.return=M,M=H):(_=Nc(C.type,C.key,C.props,null,M.mode,_),_.ref=k5(M,H,C),_.return=M,M=_)}return l(M);case a8:e:{for(U=C.key;H!==null;){if(H.key===U)if(H.tag===4&&H.stateNode.containerInfo===C.containerInfo&&H.stateNode.implementation===C.implementation){a(M,H.sibling),H=i(H,C.children||[]),H.return=M,M=H;break e}else{a(M,H);break}else c(M,H);H=H.sibling}H=R9(C,M.mode,_),H.return=M,M=H}return l(M);case s6:return U=C._init,Z(M,H,U(C._payload),_)}if(P5(C))return E(M,H,C,_);if(y5(C))return D(M,H,C,_);vc(M,C)}return typeof C=="string"&&C!==""||typeof C=="number"?(C=""+C,H!==null&&H.tag===6?(a(M,H.sibling),H=i(H,C),H.return=M,M=H):(a(M,H),H=T9(C,M.mode,_),H.return=M,M=H),l(M)):a(M,H)}return Z}var L8=ih(!0),sh=ih(!1),pe={},p4=x6(pe),re=x6(pe),ne=x6(pe);function t0(e){if(e===pe)throw Error(W(174));return e}function Jt(e,c){switch(E2(ne,c),E2(re,e),E2(p4,pe),e=c.nodeType,e){case 9:case 11:c=(c=c.documentElement)?c.namespaceURI:$9(null,"");break;default:e=e===8?c.parentNode:c,c=e.namespaceURI||null,e=e.tagName,c=$9(c,e)}O2(p4),E2(p4,c)}function x8(){O2(p4),O2(re),O2(ne)}function oh(e){t0(ne.current);var c=t0(p4.current),a=$9(c,e.type);c!==a&&(E2(re,e),E2(p4,a))}function ei(e){re.current===e&&(O2(p4),O2(re))}var q2=x6(0);function qc(e){for(var c=e;c!==null;){if(c.tag===13){var a=c.memoizedState;if(a!==null&&(a=a.dehydrated,a===null||a.data==="$?"||a.data==="$!"))return c}else if(c.tag===19&&c.memoizedProps.revealOrder!==void 0){if(c.flags&128)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===e)break;for(;c.sibling===null;){if(c.return===null||c.return===e)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var k9=[];function ci(){for(var e=0;ea?a:4,e(!0);var n=b9.transition;b9.transition={};try{e(!1),c()}finally{S2=a,b9.transition=n}}function xh(){return E3().memoizedState}function kS(e,c,a){var n=g6(e);if(a={lane:n,action:a,hasEagerState:!1,eagerState:null,next:null},yh(e))wh(c,a);else if(a=ah(e,c,a,n),a!==null){var i=I1();X3(a,e,n,i),Sh(a,c,n)}}function bS(e,c,a){var n=g6(e),i={lane:n,action:a,hasEagerState:!1,eagerState:null,next:null};if(yh(e))wh(c,i);else{var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=c.lastRenderedReducer,s!==null))try{var l=c.lastRenderedState,u=s(l,a);if(i.hasEagerState=!0,i.eagerState=u,Q3(u,l)){var p=c.interleaved;p===null?(i.next=i,Qt(c)):(i.next=p.next,p.next=i),c.interleaved=i;return}}catch{}finally{}a=ah(e,c,i,n),a!==null&&(i=I1(),X3(a,e,n,i),Sh(a,c,n))}}function yh(e){var c=e.alternate;return e===$2||c!==null&&c===$2}function wh(e,c){U5=$c=!0;var a=e.pending;a===null?c.next=c:(c.next=a.next,a.next=c),e.pending=c}function Sh(e,c,a){if(a&4194240){var n=c.lanes;n&=e.pendingLanes,a|=n,c.lanes=a,Dt(e,a)}}var jc={readContext:_3,useCallback:N1,useContext:N1,useEffect:N1,useImperativeHandle:N1,useInsertionEffect:N1,useLayoutEffect:N1,useMemo:N1,useReducer:N1,useRef:N1,useState:N1,useDebugValue:N1,useDeferredValue:N1,useTransition:N1,useMutableSource:N1,useSyncExternalStore:N1,useId:N1,unstable_isNewReconciler:!1},AS={readContext:_3,useCallback:function(e,c){return l4().memoizedState=[e,c===void 0?null:c],e},useContext:_3,useEffect:Dp,useImperativeHandle:function(e,c,a){return a=a!=null?a.concat([e]):null,xc(4194308,4,gh.bind(null,c,e),a)},useLayoutEffect:function(e,c){return xc(4194308,4,e,c)},useInsertionEffect:function(e,c){return xc(4,2,e,c)},useMemo:function(e,c){var a=l4();return c=c===void 0?null:c,e=e(),a.memoizedState=[e,c],e},useReducer:function(e,c,a){var n=l4();return c=a!==void 0?a(c):c,n.memoizedState=n.baseState=c,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:c},n.queue=e,e=e.dispatch=kS.bind(null,$2,e),[n.memoizedState,e]},useRef:function(e){var c=l4();return e={current:e},c.memoizedState=e},useState:Rp,useDebugValue:ii,useDeferredValue:function(e){return l4().memoizedState=e},useTransition:function(){var e=Rp(!1),c=e[0];return e=NS.bind(null,e[1]),l4().memoizedState=e,[c,e]},useMutableSource:function(){},useSyncExternalStore:function(e,c,a){var n=$2,i=l4();if(U2){if(a===void 0)throw Error(W(407));a=a()}else{if(a=c(),v1===null)throw Error(W(349));f0&30||uh(n,c,a)}i.memoizedState=a;var s={value:a,getSnapshot:c};return i.queue=s,Dp(mh.bind(null,n,s,e),[e]),n.flags|=2048,se(9,ph.bind(null,n,s,a,c),void 0,null),a},useId:function(){var e=l4(),c=v1.identifierPrefix;if(U2){var a=E4,n=_4;a=(n&~(1<<32-K3(n)-1)).toString(32)+a,c=":"+c+"R"+a,a=te++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=l.createElement(a,{is:n.is}):(e=l.createElement(a),a==="select"&&(l=e,n.multiple?l.multiple=!0:n.size&&(l.size=n.size))):e=l.createElementNS(e,a),e[f4]=c,e[ae]=n,Rh(e,c,!1,!1),c.stateNode=e;e:{switch(l=Y9(a,n),a){case"dialog":F2("cancel",e),F2("close",e),i=n;break;case"iframe":case"object":case"embed":F2("load",e),i=n;break;case"video":case"audio":for(i=0;iw8&&(c.flags|=128,n=!0,b5(s,!1),c.lanes=4194304)}else{if(!n)if(e=qc(l),e!==null){if(c.flags|=128,n=!0,a=e.updateQueue,a!==null&&(c.updateQueue=a,c.flags|=4),b5(s,!0),s.tail===null&&s.tailMode==="hidden"&&!l.alternate&&!U2)return k1(c),null}else 2*n1()-s.renderingStartTime>w8&&a!==1073741824&&(c.flags|=128,n=!0,b5(s,!1),c.lanes=4194304);s.isBackwards?(l.sibling=c.child,c.child=l):(a=s.last,a!==null?a.sibling=l:c.child=l,s.last=l)}return s.tail!==null?(c=s.tail,s.rendering=c,s.tail=c.sibling,s.renderingStartTime=n1(),c.sibling=null,a=q2.current,E2(q2,n?a&1|2:a&1),c):(k1(c),null);case 22:case 23:return pi(),n=c.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(c.flags|=8192),n&&c.mode&1?f3&1073741824&&(k1(c),c.subtreeFlags&6&&(c.flags|=8192)):k1(c),null;case 24:return null;case 25:return null}throw Error(W(156,c.tag))}function OS(e,c){switch($t(c),c.tag){case 1:return J1(c.type)&&Fc(),e=c.flags,e&65536?(c.flags=e&-65537|128,c):null;case 3:return x8(),O2(Z1),O2(A1),ci(),e=c.flags,e&65536&&!(e&128)?(c.flags=e&-65537|128,c):null;case 5:return ei(c),null;case 13:if(O2(q2),e=c.memoizedState,e!==null&&e.dehydrated!==null){if(c.alternate===null)throw Error(W(340));C8()}return e=c.flags,e&65536?(c.flags=e&-65537|128,c):null;case 19:return O2(q2),null;case 4:return x8(),null;case 10:return Xt(c.type._context),null;case 22:case 23:return pi(),null;case 24:return null;default:return null}}var zc=!1,b1=!1,BS=typeof WeakSet=="function"?WeakSet:Set,Q=null;function p8(e,c){var a=e.ref;if(a!==null)if(typeof a=="function")try{a(null)}catch(n){e1(e,c,n)}else a.current=null}function Mt(e,c,a){try{a()}catch(n){e1(e,c,n)}}var $p=!1;function IS(e,c){if(nt=Pc,e=Um(),Gt(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var n=a.getSelection&&a.getSelection();if(n&&n.rangeCount!==0){a=n.anchorNode;var i=n.anchorOffset,s=n.focusNode;n=n.focusOffset;try{a.nodeType,s.nodeType}catch{a=null;break e}var l=0,u=-1,p=-1,h=0,z=0,V=e,x=null;c:for(;;){for(var S;V!==a||i!==0&&V.nodeType!==3||(u=l+i),V!==s||n!==0&&V.nodeType!==3||(p=l+n),V.nodeType===3&&(l+=V.nodeValue.length),(S=V.firstChild)!==null;)x=V,V=S;for(;;){if(V===e)break c;if(x===a&&++h===i&&(u=l),x===s&&++z===n&&(p=l),(S=V.nextSibling)!==null)break;V=x,x=V.parentNode}V=S}a=u===-1||p===-1?null:{start:u,end:p}}else a=null}a=a||{start:0,end:0}}else a=null;for(tt={focusedElem:e,selectionRange:a},Pc=!1,Q=c;Q!==null;)if(c=Q,e=c.child,(c.subtreeFlags&1028)!==0&&e!==null)e.return=c,Q=e;else for(;Q!==null;){c=Q;try{var E=c.alternate;if(c.flags&1024)switch(c.tag){case 0:case 11:case 15:break;case 1:if(E!==null){var D=E.memoizedProps,Z=E.memoizedState,M=c.stateNode,H=M.getSnapshotBeforeUpdate(c.elementType===c.type?D:$3(c.type,D),Z);M.__reactInternalSnapshotBeforeUpdate=H}break;case 3:var C=c.stateNode.containerInfo;C.nodeType===1?C.textContent="":C.nodeType===9&&C.documentElement&&C.removeChild(C.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(W(163))}}catch(_){e1(c,c.return,_)}if(e=c.sibling,e!==null){e.return=c.return,Q=e;break}Q=c.return}return E=$p,$p=!1,E}function W5(e,c,a){var n=c.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var i=n=n.next;do{if((i.tag&e)===e){var s=i.destroy;i.destroy=void 0,s!==void 0&&Mt(c,a,s)}i=i.next}while(i!==n)}}function sa(e,c){if(c=c.updateQueue,c=c!==null?c.lastEffect:null,c!==null){var a=c=c.next;do{if((a.tag&e)===e){var n=a.create;a.destroy=n()}a=a.next}while(a!==c)}}function Ct(e){var c=e.ref;if(c!==null){var a=e.stateNode;switch(e.tag){case 5:e=a;break;default:e=a}typeof c=="function"?c(e):c.current=e}}function Oh(e){var c=e.alternate;c!==null&&(e.alternate=null,Oh(c)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(c=e.stateNode,c!==null&&(delete c[f4],delete c[ae],delete c[ot],delete c[LS],delete c[xS])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Bh(e){return e.tag===5||e.tag===3||e.tag===4}function jp(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Bh(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Lt(e,c,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,c?a.nodeType===8?a.parentNode.insertBefore(e,c):a.insertBefore(e,c):(a.nodeType===8?(c=a.parentNode,c.insertBefore(e,a)):(c=a,c.appendChild(e)),a=a._reactRootContainer,a!=null||c.onclick!==null||(c.onclick=Dc));else if(n!==4&&(e=e.child,e!==null))for(Lt(e,c,a),e=e.sibling;e!==null;)Lt(e,c,a),e=e.sibling}function xt(e,c,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,c?a.insertBefore(e,c):a.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(xt(e,c,a),e=e.sibling;e!==null;)xt(e,c,a),e=e.sibling}var V1=null,j3=!1;function i6(e,c,a){for(a=a.child;a!==null;)Ih(e,c,a),a=a.sibling}function Ih(e,c,a){if(u4&&typeof u4.onCommitFiberUnmount=="function")try{u4.onCommitFiberUnmount(Jc,a)}catch{}switch(a.tag){case 5:b1||p8(a,c);case 6:var n=V1,i=j3;V1=null,i6(e,c,a),V1=n,j3=i,V1!==null&&(j3?(e=V1,a=a.stateNode,e.nodeType===8?e.parentNode.removeChild(a):e.removeChild(a)):V1.removeChild(a.stateNode));break;case 18:V1!==null&&(j3?(e=V1,a=a.stateNode,e.nodeType===8?S9(e.parentNode,a):e.nodeType===1&&S9(e,a),Q5(e)):S9(V1,a.stateNode));break;case 4:n=V1,i=j3,V1=a.stateNode.containerInfo,j3=!0,i6(e,c,a),V1=n,j3=i;break;case 0:case 11:case 14:case 15:if(!b1&&(n=a.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){i=n=n.next;do{var s=i,l=s.destroy;s=s.tag,l!==void 0&&(s&2||s&4)&&Mt(a,c,l),i=i.next}while(i!==n)}i6(e,c,a);break;case 1:if(!b1&&(p8(a,c),n=a.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=a.memoizedProps,n.state=a.memoizedState,n.componentWillUnmount()}catch(u){e1(a,c,u)}i6(e,c,a);break;case 21:i6(e,c,a);break;case 22:a.mode&1?(b1=(n=b1)||a.memoizedState!==null,i6(e,c,a),b1=n):i6(e,c,a);break;default:i6(e,c,a)}}function Yp(e){var c=e.updateQueue;if(c!==null){e.updateQueue=null;var a=e.stateNode;a===null&&(a=e.stateNode=new BS),c.forEach(function(n){var i=XS.bind(null,e,n);a.has(n)||(a.add(n),n.then(i,i))})}}function q3(e,c){var a=c.deletions;if(a!==null)for(var n=0;ni&&(i=l),n&=~s}if(n=i,n=n1()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*WS(n/1960))-n,10e?16:e,p6===null)var n=!1;else{if(e=p6,p6=null,Xc=0,V2&6)throw Error(W(331));var i=V2;for(V2|=4,Q=e.current;Q!==null;){var s=Q,l=s.child;if(Q.flags&16){var u=s.deletions;if(u!==null){for(var p=0;pn1()-fi?i0(e,0):li|=a),e3(e,c)}function Kh(e,c){c===0&&(e.mode&1?(c=nc,nc<<=1,!(nc&130023424)&&(nc=4194304)):c=1);var a=I1();e=D4(e,c),e!==null&&(le(e,c,a),e3(e,a))}function KS(e){var c=e.memoizedState,a=0;c!==null&&(a=c.retryLane),Kh(e,a)}function XS(e,c){var a=0;switch(e.tag){case 13:var n=e.stateNode,i=e.memoizedState;i!==null&&(a=i.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(W(314))}n!==null&&n.delete(c),Kh(e,a)}var Xh;Xh=function(e,c,a){if(e!==null)if(e.memoizedProps!==c.pendingProps||Z1.current)Q1=!0;else{if(!(e.lanes&a)&&!(c.flags&128))return Q1=!1,DS(e,c,a);Q1=!!(e.flags&131072)}else Q1=!1,U2&&c.flags&1048576&&Jm(c,Ic,c.index);switch(c.lanes=0,c.tag){case 2:var n=c.type;yc(e,c),e=c.pendingProps;var i=M8(c,A1.current);H8(c,a),i=ri(null,c,n,e,i,a);var s=ni();return c.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(c.tag=1,c.memoizedState=null,c.updateQueue=null,J1(n)?(s=!0,Oc(c)):s=!1,c.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Zt(c),i.updater=ta,c.stateNode=i,i._reactInternals=c,ht(c,n,e,a),c=zt(null,c,n,!0,s,a)):(c.tag=0,U2&&s&&qt(c),B1(null,c,i,a),c=c.child),c;case 16:n=c.elementType;e:{switch(yc(e,c),e=c.pendingProps,i=n._init,n=i(n._payload),c.type=n,i=c.tag=ZS(n),e=$3(n,e),i){case 0:c=dt(null,c,n,e,a);break e;case 1:c=Wp(null,c,n,e,a);break e;case 11:c=Ip(null,c,n,e,a);break e;case 14:c=Up(null,c,n,$3(n.type,e),a);break e}throw Error(W(306,n,""))}return c;case 0:return n=c.type,i=c.pendingProps,i=c.elementType===n?i:$3(n,i),dt(e,c,n,i,a);case 1:return n=c.type,i=c.pendingProps,i=c.elementType===n?i:$3(n,i),Wp(e,c,n,i,a);case 3:e:{if(Eh(c),e===null)throw Error(W(387));n=c.pendingProps,s=c.memoizedState,i=s.element,rh(e,c),Gc(c,n,null,a);var l=c.memoizedState;if(n=l.element,s.isDehydrated)if(s={element:n,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},c.updateQueue.baseState=s,c.memoizedState=s,c.flags&256){i=y8(Error(W(423)),c),c=Gp(e,c,n,a,i);break e}else if(n!==i){i=y8(Error(W(424)),c),c=Gp(e,c,n,a,i);break e}else for(u3=d6(c.stateNode.containerInfo.firstChild),p3=c,U2=!0,Y3=null,a=sh(c,null,n,a),c.child=a;a;)a.flags=a.flags&-3|4096,a=a.sibling;else{if(C8(),n===i){c=F4(e,c,a);break e}B1(e,c,n,a)}c=c.child}return c;case 5:return oh(c),e===null&&ut(c),n=c.type,i=c.pendingProps,s=e!==null?e.memoizedProps:null,l=i.children,it(n,i)?l=null:s!==null&&it(n,s)&&(c.flags|=32),_h(e,c),B1(e,c,l,a),c.child;case 6:return e===null&&ut(c),null;case 13:return Ph(e,c,a);case 4:return Jt(c,c.stateNode.containerInfo),n=c.pendingProps,e===null?c.child=L8(c,null,n,a):B1(e,c,n,a),c.child;case 11:return n=c.type,i=c.pendingProps,i=c.elementType===n?i:$3(n,i),Ip(e,c,n,i,a);case 7:return B1(e,c,c.pendingProps,a),c.child;case 8:return B1(e,c,c.pendingProps.children,a),c.child;case 12:return B1(e,c,c.pendingProps.children,a),c.child;case 10:e:{if(n=c.type._context,i=c.pendingProps,s=c.memoizedProps,l=i.value,E2(Uc,n._currentValue),n._currentValue=l,s!==null)if(Q3(s.value,l)){if(s.children===i.children&&!Z1.current){c=F4(e,c,a);break e}}else for(s=c.child,s!==null&&(s.return=c);s!==null;){var u=s.dependencies;if(u!==null){l=s.child;for(var p=u.firstContext;p!==null;){if(p.context===n){if(s.tag===1){p=P4(-1,a&-a),p.tag=2;var h=s.updateQueue;if(h!==null){h=h.shared;var z=h.pending;z===null?p.next=p:(p.next=z.next,z.next=p),h.pending=p}}s.lanes|=a,p=s.alternate,p!==null&&(p.lanes|=a),pt(s.return,a,c),u.lanes|=a;break}p=p.next}}else if(s.tag===10)l=s.type===c.type?null:s.child;else if(s.tag===18){if(l=s.return,l===null)throw Error(W(341));l.lanes|=a,u=l.alternate,u!==null&&(u.lanes|=a),pt(l,a,c),l=s.sibling}else l=s.child;if(l!==null)l.return=s;else for(l=s;l!==null;){if(l===c){l=null;break}if(s=l.sibling,s!==null){s.return=l.return,l=s;break}l=l.return}s=l}B1(e,c,i.children,a),c=c.child}return c;case 9:return i=c.type,n=c.pendingProps.children,H8(c,a),i=_3(i),n=n(i),c.flags|=1,B1(e,c,n,a),c.child;case 14:return n=c.type,i=$3(n,c.pendingProps),i=$3(n.type,i),Up(e,c,n,i,a);case 15:return bh(e,c,c.type,c.pendingProps,a);case 17:return n=c.type,i=c.pendingProps,i=c.elementType===n?i:$3(n,i),yc(e,c),c.tag=1,J1(n)?(e=!0,Oc(c)):e=!1,H8(c,a),th(c,n,i),ht(c,n,i,a),zt(null,c,n,!0,e,a);case 19:return Th(e,c,a);case 22:return Ah(e,c,a)}throw Error(W(156,c.tag))};function Qh(e,c){return Lm(e,c)}function QS(e,c,a,n){this.tag=e,this.key=a,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=c,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function b3(e,c,a,n){return new QS(e,c,a,n)}function hi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function ZS(e){if(typeof e=="function")return hi(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Et)return 11;if(e===Pt)return 14}return 2}function V6(e,c){var a=e.alternate;return a===null?(a=b3(e.tag,c,e.key,e.mode),a.elementType=e.elementType,a.type=e.type,a.stateNode=e.stateNode,a.alternate=e,e.alternate=a):(a.pendingProps=c,a.type=e.type,a.flags=0,a.subtreeFlags=0,a.deletions=null),a.flags=e.flags&14680064,a.childLanes=e.childLanes,a.lanes=e.lanes,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,c=e.dependencies,a.dependencies=c===null?null:{lanes:c.lanes,firstContext:c.firstContext},a.sibling=e.sibling,a.index=e.index,a.ref=e.ref,a}function Nc(e,c,a,n,i,s){var l=2;if(n=e,typeof e=="function")hi(e)&&(l=1);else if(typeof e=="string")l=5;else e:switch(e){case r8:return s0(a.children,i,s,c);case _t:l=8,i|=8;break;case F9:return e=b3(12,a,c,i|2),e.elementType=F9,e.lanes=s,e;case O9:return e=b3(13,a,c,i),e.elementType=O9,e.lanes=s,e;case B9:return e=b3(19,a,c,i),e.elementType=B9,e.lanes=s,e;case im:return la(a,i,s,c);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case nm:l=10;break e;case tm:l=9;break e;case Et:l=11;break e;case Pt:l=14;break e;case s6:l=16,n=null;break e}throw Error(W(130,e==null?e:typeof e,""))}return c=b3(l,a,c,i),c.elementType=e,c.type=n,c.lanes=s,c}function s0(e,c,a,n){return e=b3(7,e,n,c),e.lanes=a,e}function la(e,c,a,n){return e=b3(22,e,n,c),e.elementType=im,e.lanes=a,e.stateNode={isHidden:!1},e}function T9(e,c,a){return e=b3(6,e,null,c),e.lanes=a,e}function R9(e,c,a){return c=b3(4,e.children!==null?e.children:[],e.key,c),c.lanes=a,c.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},c}function JS(e,c,a,n,i){this.tag=c,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=g9(0),this.expirationTimes=g9(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=g9(0),this.identifierPrefix=n,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function vi(e,c,a,n,i,s,l,u,p){return e=new JS(e,c,a,u,p),c===1?(c=1,s===!0&&(c|=8)):c=0,s=b3(3,null,null,c),e.current=s,s.stateNode=e,s.memoizedState={element:n,isDehydrated:a,cache:null,transitions:null,pendingSuspenseBoundaries:null},Zt(s),e}function eN(e,c,a){var n=3{"use strict";function av(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(av)}catch(e){console.error(e)}}av(),rv.exports=cv()});var Vi=Y1(gi=>{"use strict";var tv=nv();gi.createRoot=tv.createRoot,gi.hydrateRoot=tv.hydrateRoot;var hb});var ov=Y1((sv,ha)=>{(function(){function e(b){if(b=b||{},this.method=b.method||2,this.colors=b.colors||256,this.initColors=b.initColors||4096,this.initDist=b.initDist||.01,this.distIncr=b.distIncr||.005,this.hueGroups=b.hueGroups||10,this.satGroups=b.satGroups||10,this.lumGroups=b.lumGroups||10,this.minHueCols=b.minHueCols||0,this.hueStats=this.minHueCols?new c(this.hueGroups,this.minHueCols):null,this.boxSize=b.boxSize||[64,64],this.boxPxls=b.boxPxls||2,this.palLocked=!1,this.dithKern=b.dithKern||null,this.dithSerp=b.dithSerp||!1,this.dithDelta=b.dithDelta||0,this.histogram={},this.idxrgb=b.palette?b.palette.slice(0):[],this.idxi32=[],this.i32idx={},this.i32rgb={},this.useCache=b.useCache!==!1,this.cacheFreq=b.cacheFreq||10,this.reIndex=b.reIndex||this.idxrgb.length==0,this.colorDist=b.colorDist=="manhattan"?x:z,this.idxrgb.length>0){var N=this;this.idxrgb.forEach(function(A,T){var q=(-16777216|A[2]<<16|A[1]<<8|A[0])>>>0;N.idxi32[T]=q,N.i32idx[q]=T,N.i32rgb[q]=A})}}e.prototype.sample=function(N,A){if(this.palLocked)throw"Cannot sample additional images, palette already assembled.";var T=F(N,A);switch(this.method){case 1:this.colorStats1D(T.buf32);break;case 2:this.colorStats2D(T.buf32,T.width);break}},e.prototype.reduce=function(N,A,T,q){if(this.palLocked||this.buildPal(),T=T||this.dithKern,q=typeof q<"u"?q:this.dithSerp,A=A||1,T)var Y=this.dither(N,T,q);else for(var j=F(N),G=j.buf32,t2=G.length,Y=new Uint32Array(t2),s2=0;s2>8,e4=(c3&16711680)>>16,K2=this.nearestColor(c3),W1=K2&255,R3=(K2&65280)>>8,B2=(K2&16711680)>>16;if(j[L1]=255<<24|B2<<16|R3<<8|W1,this.dithDelta){var N6=this.colorDist([d1,z1,e4],[W1,R3,B2]);if(N6=0&&P1+Y2=0&&m4+M2>8,B4=(j[c4]&16711680)>>16,_8=Math.max(0,Math.min(255,Sa+wa*A8)),E8=Math.max(0,Math.min(255,A6+D3*A8)),P8=Math.max(0,Math.min(255,B4+me*A8));j[c4]=255<<24|P8<<16|E8<<8|_8}}}}return j},e.prototype.buildPal=function(N){if(!(this.palLocked||this.idxrgb.length>0&&this.idxrgb.length<=this.colors)){var A=this.histogram,T=J(A,!0);if(T.length==0)throw"Nothing has been sampled, palette cannot be built.";switch(this.method){case 1:for(var q=this.initColors,Y=T[q-1],j=A[Y],s2=T.slice(0,q),G=q,t2=T.length;Gthis.colors){for(var A=N.length,T={},q=0,Y,j=!1,G=0;G>8,(K2&16711680)>>16]}),A=t2.length,s2=A,i2=this.initDist;if(s2>this.colors){for(;s2>this.colors;){for(var M2=[],G=0;Gthis.colors*3?this.initDist:this.distIncr}if(s2>24&&(this.hueStats&&this.hueStats.check(q),q in A?A[q]++:A[q]=1)},e.prototype.colorStats2D=function(N,A){var T=this.boxSize[0],q=this.boxSize[1],Y=T*q,j=U(A,N.length/A,T,q),G=this.histogram,t2=this;j.forEach(function(s2){var i2=Math.max(Math.round(s2.w*s2.h/Y)*t2.boxPxls,2),M2={},L2;B(s2,A,function(Y2){L2=N[Y2],(L2&4278190080)>>24&&(t2.hueStats&&t2.hueStats.check(L2),L2 in G?G[L2]++:L2 in M2?++M2[L2]>=i2&&(G[L2]=M2[L2]):M2[L2]=1)})}),this.hueStats&&this.hueStats.inject(G)},e.prototype.sortPal=function(){var N=this;this.idxi32.sort(function(A,T){var q=N.i32idx[A],Y=N.i32idx[T],j=N.idxrgb[q],G=N.idxrgb[Y],t2=S(j[0],j[1],j[2]),s2=S(G[0],G[1],G[2]),i2=j[0]==j[1]&&j[1]==j[2]?-1:E(t2.h,N.hueGroups),M2=G[0]==G[1]&&G[1]==G[2]?-1:E(s2.h,N.hueGroups),L2=M2-i2;if(L2)return-L2;var Y2=+s2.l.toFixed(2)-+t2.l.toFixed(2);if(Y2)return-Y2;var c1=+s2.s.toFixed(2)-+t2.s.toFixed(2);if(c1)return-c1}),this.idxi32.forEach(function(A,T){N.idxrgb[T]=N.i32rgb[A],N.i32idx[A]=T})},e.prototype.nearestColor=function(N){var A=this.nearestIndex(N);return A===null?0:this.idxi32[A]},e.prototype.nearestIndex=function(N){if(!((N&4278190080)>>24))return null;if(this.useCache&&""+N in this.i32idx)return this.i32idx[N];for(var A=1e3,T,q=[N&255,(N&65280)>>8,(N&16711680)>>16],Y=this.idxrgb.length,j=0;j=this.cacheFreq;T=N[A++])this.i32idx[T]=this.nearestIndex(T)};function c(b,N){this.numGroups=b,this.minCols=N,this.stats={};for(var A=-1;A>8,q=(N&16711680)>>16,Y=A==T&&T==q?-1:E(S(A,T,q).h,this.numGroups),j=this.stats[Y],G=this.minCols;j.num++,!(j.num>G)&&(j.num==G&&this.groupsFull++,j.num<=G&&this.stats[Y].cols.push(N))},c.prototype.inject=function(N){for(var A=-1;A.5?t2/(2-T-q):t2/(T+q),T){case b:Y=(N-A)/t2+(N=1-T||b<=T)return 0;for(var q=1;q=Y-T&&b<=Y+T)return q}}function D(b){return b}function Z(b){return b}function M(b){return Object.prototype.toString.call(b).slice(8,-1)}var H=_()?Array.prototype.sort:C;function C(b){var N=M(this[0]);if(N=="Number"||N=="String"){for(var A={},T=this.length,q,Y=0;Y{(function(e,c){typeof define=="function"&&define.amd?define([],c):typeof Li<"u"?c():(c(),e.FileSaver={})})(Li,function(){"use strict";function e(u,p){return typeof p>"u"?p={autoBom:!1}:typeof p!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),p={autoBom:!p}),p.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(u.type)?new Blob(["\uFEFF",u],{type:u.type}):u}function c(u,p,h){var z=new XMLHttpRequest;z.open("GET",u),z.responseType="blob",z.onload=function(){l(z.response,p,h)},z.onerror=function(){console.error("could not download file")},z.send()}function a(u){var p=new XMLHttpRequest;p.open("HEAD",u,!1);try{p.send()}catch{}return 200<=p.status&&299>=p.status}function n(u){try{u.dispatchEvent(new MouseEvent("click"))}catch{var p=document.createEvent("MouseEvents");p.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),u.dispatchEvent(p)}}var i=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:void 0,s=i.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),l=i.saveAs||(typeof window!="object"||window!==i?function(){}:"download"in HTMLAnchorElement.prototype&&!s?function(u,p,h){var z=i.URL||i.webkitURL,V=document.createElement("a");p=p||u.name||"download",V.download=p,V.rel="noopener",typeof u=="string"?(V.href=u,V.origin===location.origin?n(V):a(V.href)?c(u,p,h):n(V,V.target="_blank")):(V.href=z.createObjectURL(u),setTimeout(function(){z.revokeObjectURL(V.href)},4e4),setTimeout(function(){n(V)},0))}:"msSaveOrOpenBlob"in navigator?function(u,p,h){if(p=p||u.name||"download",typeof u!="string")navigator.msSaveOrOpenBlob(e(u,h),p);else if(a(u))c(u,p,h);else{var z=document.createElement("a");z.href=u,z.target="_blank",setTimeout(function(){n(z)})}}:function(u,p,h,z){if(z=z||open("","_blank"),z&&(z.document.title=z.document.body.innerText="downloading..."),typeof u=="string")return c(u,p,h);var V=u.type==="application/octet-stream",x=/constructor/i.test(i.HTMLElement)||i.safari,S=/CriOS\/[\d]+/.test(navigator.userAgent);if((S||V&&x||s)&&typeof FileReader<"u"){var E=new FileReader;E.onloadend=function(){var M=E.result;M=S?M:M.replace(/^data:[^;]*;/,"data:attachment/file;"),z?z.location.href=M:location=M,z=null},E.readAsDataURL(u)}else{var D=i.URL||i.webkitURL,Z=D.createObjectURL(u);z?z.location=Z:location.href=Z,z=null,setTimeout(function(){D.revokeObjectURL(Z)},4e4)}});i.saveAs=l.saveAs=l,typeof xi<"u"&&(xi.exports=l)})});var A0=T2(Q8()),x3=512;function a7(e,c){return e.indexOf(c)===-1?(e.push(c),!0):!1}function Z8(e,c){let a=e.indexOf(c);return a!==-1?(e.splice(a,1),!0):!1}function Yr(e,c,a){return{r:e,g:c,b:a}}function I6(e,c){return e>c?e-c:c-e}function $r(e,c=2){return e.toString(16).padStart(c,"0")}function rl(e,c,a){return"#"+$r(e)+$r(c)+$r(a)}function r7(){return new Promise(e=>requestAnimationFrame(e))}function n7(e){let c=e.lastIndexOf(".");return c===-1?{text:e,ex:""}:{text:e.slice(0,c),ex:e.slice(c+1)}}function Kr(e){return new Promise((c,a)=>{let n=new FileReader;n.addEventListener("load",()=>{c(n.result)}),n.addEventListener("error",i=>{a(i)}),n.readAsText(e)})}function Xr(e){return new Promise((c,a)=>{let n=new FileReader;n.addEventListener("load",()=>{c(n.result)}),n.addEventListener("error",i=>{a(i)}),n.readAsDataURL(e)})}function Qr(e,c){return new Promise((a,n)=>{let i=new Image;i.alt=e,i.addEventListener("load",()=>a(i)),i.addEventListener("error",s=>{n(s)}),c.startsWith("data:image")||c.startsWith("blob")?i.src=c:i.src=`data:image/${n7(e)};base64,${c}`})}function _0(e){return e.length}function E0(e){return e[0]&&e[0].length||0}function U6(e){return _0(e.pixels)}function W6(e){return E0(e.pixels)}function Zr(e,c,a){let n=e5();n.width=c,n.height=a;let i=n.getContext("2d");return i.imageSmoothingEnabled=!1,i.drawImage(e,0,0,c,a),fL(n,e.alt)}function fL(e,c){return new Promise((a,n)=>{let i=e.toDataURL("image/png"),s=new Image;s.addEventListener("load",()=>a(s)),s.addEventListener("error",l=>n(l)),c&&(s.alt=c),s.src=i})}function Jr(e){if(typeof e=="object"){let c=(0,A0.clone)(e);if(Array.isArray(c))throw new Error("Should not be an array");{if(typeof c.x!="number")throw new Error("X is not a number");if(typeof c.y!="number")throw new Error("Y is not a number");if(!(0,A0.isInteger)(c.x))throw new Error("X is not an integer");if(!(0,A0.isInteger)(c.y))throw new Error("Y is not an integer");if(typeof c.name!="string")throw new Error("Missing name");if(c.name.length<=1)throw new Error("Name to short");if(c.name.length>=64)throw new Error("Name to long");if(typeof c.pixels!="object")throw new Error("Pixels are not an object");if(!Array.isArray(c.pixels))throw new Error("Pixels are not an array");let a=0;for(let s=0;s2e3)throw new Error("Height to big");if(i>2e3)throw new Error("Width to big")}}else throw new Error("Not an object")}function J8(e){return e.getContext("2d").getImageData(0,0,e.width,e.height)}function t7(e,c){let{height:a,width:n}=e,i=[];for(let s=0;s-1){p++;let S=a[x];if(!S)throw new Error(`Unknown color at ${x}`);i.fillStyle=S,i.fillRect(h*n,z*n,n,n)}}return p}function e5(){let e=document.createElement("canvas");return e.setAttribute("overlay","true"),e}function c5(e,c){let a=document.createElement("canvas");a.width=E0(e),a.height=_0(e);let n=cn(a,e,c);return{canvas:a,pixels:n}}var jr;try{let e=navigator.language||navigator.userLanguage;jr=new Intl.NumberFormat(e)}catch{}function nl(e){return jr?jr.format(e):e.toString()}function P0(e,c){c(parseInt(e.target.value,10))}var T0=class{listeners=new Map;on(c,a){let n=this.listeners.get(c)||[];a7(n,a),this.listeners.set(c,n)}off(c,a){let n=this.listeners.get(c)||[];Z8(n,a),n.length||this.listeners.delete(c)}emit(c,...a){let n=this.listeners.get(c);if(n)for(let i=0;ia.textContent&&a.textContent.match(/^\(\s*-?\d+\s*,\s*-?\d+\s*\)$/));for(let a of c)a.children.length===0&&(this.cords=a,this.frame=requestAnimationFrame(this.observe));await r7()}}stop(){this.frame&&cancelAnimationFrame(this.frame)}get centerCanvas(){let c=window.innerWidth/2,a=window.innerHeight/2,n=[...document.getElementsByTagName("canvas")].filter(i=>i.classList.contains("leaflet-tile")).map(i=>{let s=i.getBoundingClientRect();return{canvas:i,bounds:{width:s.width,height:s.height,top:s.top,bottom:s.bottom,left:s.left,right:s.right}}}).find(i=>c>i.bounds.left&&ci.bounds.top&&as&&as&&a>l?n.bounds.left+=p:(n.bounds.left+=u,n.bounds.top+=p)),n.bounds.bottom=n.bounds.top+u,n.bounds.right=n.bounds.left+p,null}n.bounds.width/=i,n.bounds.height/=i,n.bounds.right=n.bounds.left+n.bounds.width,n.bounds.bottom=n.bounds.bottom+n.bounds.height}return n}get pixelSize(){return Math.pow(2,this.uScale)}screenToGrid(c,a){let n=this.centerCanvas;if(!n)return null;this.getCordsFromUrl();let i=Math.floor(this.ux/x3)*x3,s=Math.floor(this.uy/x3)*x3,l=(c-n.bounds.left)/this.pixelSize+i,u=(a-n.bounds.top)/this.pixelSize+s;return{x:l,y:u}}gridToScreen(c,a){let n=this.centerCanvas;if(!n)return null;let i=Math.floor(this.ux/x3)*x3,s=Math.floor(this.uy/x3)*x3,l=c-i,u=a-s,p=n.bounds.left+l*this.pixelSize,h=n.bounds.top+u*this.pixelSize;return{x:p,y:h}}getCordsFromUrl(){let a=location.pathname.split("/").filter(n=>n)[0];if(a){let n=a.match(/-?\d+/g).map(i=>parseInt(i));if(typeof n[0]=="number"&&typeof n[1]=="number"&&typeof n[2]=="number")return this._ux=n[0],this._uy=n[1],this._uScale=n[2],n}return null}parse(){let c=this.cords.textContent.match(/-?\d+/g).map(a=>parseInt(a));this._x=c[0],this._y=c[1]}observe=()=>{let c=this._x,a=this._y;this.parse(),(c!==this._x||a!==this._y)&&this.emitter.emit(0,this._x,this._y);let n=this._ux,i=this._uy,s=this._uScale;this.getCordsFromUrl(),(n!==this._ux||i!==this._uy||s!==this._uScale)&&this.emitter.emit(1,this._ux,this._uy,this._uScale),this.frame=requestAnimationFrame(this.observe)};get x(){return this._x}get y(){return this._y}get ux(){return this._ux}get uy(){return this._uy}get uScale(){return this._uScale}};var s7=class{buttons=[];palette=[];hex=[];init(){let c=[...document.getElementsByTagName("button")].filter(h=>h.style.backgroundColor);if(c.length<2)return null;let a=new Map,n=new Map,i=c.map(h=>{let{width:z,height:V}=h.getBoundingClientRect(),x=a.get(z)||0,S=n.get(V)||0;return x++,S++,a.set(z,x),n.set(V,S),{btn:h,width:z,height:V}}),s=Array.from(a).sort((h,z)=>h[1]h[1]h.width===s&&h.height===l);this.buttons=u.map(h=>h.btn),this.buttons[0].parentElement.parentElement.style.zIndex="10";let p=u.map(h=>{let z=h.btn.style.backgroundColor.match(/\d+/g);return{r:parseInt(z[0]),g:parseInt(z[1]),b:parseInt(z[2])}});return this.palette=p,this.hex=p.map(h=>rl(h.r,h.g,h.b)),p}};var a5=class{input=document.createElement("input");constructor(){this.input.type="file"}allowMultiple(c){this.input.multiple=c}setAcceptType(c){c?this.input.accept=c.map(a=>`.${a}`).join(", "):this.input.accept=""}show(){return new Promise((c,a)=>{let n=["mousemove","touchend"],i=()=>{s(),a(new Error("Not selected"))},s=()=>{n.forEach(u=>window.removeEventListener(u,i))},l=setTimeout(()=>{n.forEach(u=>window.addEventListener(u,()=>i))},100);this.input.addEventListener("change",()=>{clearTimeout(l),s(),this.input.files?c(this.input.files):a(new Error("Missing file"))}),this.input.click()})}};var Mv=T2(g1());var J3=T2(g1());var u7=class{constructor(c,a){this.storage=c;this.palette=a}STORAGE_KEY_MURAL="_murals";STORAGE_KEY_SELECTED="_mural";_murals=[];_selected;emitter=new T0;_overlayIndices=[];_phantomOverlay=-1;_overlayModify;async load(){this._murals=await this.storage.getItem(this.STORAGE_KEY_MURAL)||[];for(let a of this._murals){let{canvas:n,pixels:i}=c5(a.pixels,this.palette.hex);a.ref=n,a.pixelCount=i}let c=await this.storage.getItem(this.STORAGE_KEY_SELECTED)??-1;this.select(this._murals[c])}updateMural(c){this.save(),this.emit(3)}unload(){this.save()}add(c){let a=c,{canvas:n,pixels:i}=c5(c.pixels,this.palette.hex);a.ref=n,a.pixelCount=i,this._murals.push(a),this.emit(7),this.save()}remove(c){Z8(this._murals,c),this.emit(2),this.save()}addOverlay(c){let a=this._murals.indexOf(c);a!==-1&&(a7(this._overlayIndices,a),this._phantomOverlay===a&&(this._phantomOverlay=-1)),this.emit(5),this.save()}removeOverlay(c){let a=this._murals.indexOf(c);a!==-1&&Z8(this._overlayIndices,a),this.emit(5),this.save()}setOverlayModify(c){this._overlayModify=c;let a=c.cb;c.cb=(n,i,s,l)=>{a(n,i,s,l),this._overlayModify=void 0,this.emit(5)},this.emit(5)}hasOverlay(c){let a=this._murals.indexOf(c);return this._overlayIndices.includes(a)}select(c){c?this._selected={m:c,h:U6(c),w:W6(c)}:this._selected=void 0,this.emit(4),this.save()}async save(){await this.storage.setItem(this.STORAGE_KEY_MURAL,this._murals.map(a=>({name:a.name,pixels:a.pixels,x:a.x,y:a.y})));let c=this._selected?.m?this._murals.indexOf(this._selected?.m):-1;await this.storage.setItem(this.STORAGE_KEY_SELECTED,c)}addPhantomOverlay(c){let a=this._murals.indexOf(c);a!==this._phantomOverlay&&!this._overlayIndices.includes(a)&&(this._phantomOverlay=a,this.emit(6))}removePhantomOverlay(){this._phantomOverlay!==-1&&(this._phantomOverlay=-1,this.emit(6))}get murals(){return this._murals}get overlays(){return this._overlayIndices}get phantomOverlay(){return this._phantomOverlay}get overlayModify(){return this._overlayModify}get selected(){return this._selected}on(c,a){this.emitter.on(c,a)}off(c,a){this.emitter.off(c,a)}emit(c){this.emitter.emit(c,this),this.emitter.emit(7,this)}};var zl={prefix:"fas",iconName:"pen-to-square",icon:[512,512,["edit"],"f044","M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z"]};var Hl={prefix:"fas",iconName:"caret-up",icon:[320,512,[],"f0d8","M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"]};var gl={prefix:"fas",iconName:"layer-group",icon:[576,512,[],"f5fd","M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z"]};var SL={prefix:"fas",iconName:"location-crosshairs",icon:[512,512,["location"],"f601","M256 0c17.7 0 32 14.3 32 32V66.7C368.4 80.1 431.9 143.6 445.3 224H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H445.3C431.9 368.4 368.4 431.9 288 445.3V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.3C143.6 431.9 80.1 368.4 66.7 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H66.7C80.1 143.6 143.6 80.1 224 66.7V32c0-17.7 14.3-32 32-32zM128 256a128 128 0 1 0 256 0 128 128 0 1 0 -256 0zm128-80a80 80 0 1 1 0 160 80 80 0 1 1 0-160z"]},Vl=SL;var Ml={prefix:"fas",iconName:"trash",icon:[448,512,[],"f1f8","M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"]};var Cl={prefix:"fas",iconName:"crosshairs",icon:[512,512,[],"f05b","M256 0c17.7 0 32 14.3 32 32V42.4c93.7 13.9 167.7 88 181.6 181.6H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H469.6c-13.9 93.7-88 167.7-181.6 181.6V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V469.6C130.3 455.7 56.3 381.7 42.4 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H42.4C56.3 130.3 130.3 56.3 224 42.4V32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6V384c0-17.7 14.3-32 32-32s32 14.3 32 32v20.6c58.3-12.5 104.1-58.4 116.6-116.6H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h20.6C392.1 165.7 346.3 119.9 288 107.4V128c0 17.7-14.3 32-32 32s-32-14.3-32-32V107.4C165.7 119.9 119.9 165.7 107.4 224H128c17.7 0 32 14.3 32 32s-14.3 32-32 32H107.4zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"]};var Ll={prefix:"fas",iconName:"caret-down",icon:[320,512,[],"f0d7","M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"]};var xl={prefix:"fas",iconName:"download",icon:[512,512,[],"f019","M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"]};var yl={prefix:"fas",iconName:"upload",icon:[512,512,[],"f093","M288 109.3V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3l-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352H192c0 35.3 28.7 64 64 64s64-28.7 64-64H448c35.3 0 64 28.7 64 64v32c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V416c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z"]};var wl={prefix:"fas",iconName:"magnifying-glass-plus",icon:[512,512,["search-plus"],"f00e","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"]};var Sl={prefix:"fas",iconName:"magnifying-glass-minus",icon:[512,512,["search-minus"],"f010","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z"]};function Nl(e,c){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);c&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),a.push.apply(a,n)}return a}function X(e){for(var c=1;ce.length)&&(c=e.length);for(var a=0,n=new Array(c);a-1;i--){var s=a[i],l=(s.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(l)>-1&&(n=s)}return D2.head.insertBefore(c,n),e}}var QL="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function u5(){for(var e=12,c="";e-- >0;)c+=QL[Math.random()*62|0];return c}function I0(e){for(var c=[],a=(e||[]).length>>>0;a--;)c[a]=e[a];return c}function Nn(e){return e.classList?I0(e.classList):(e.getAttribute("class")||"").split(" ").filter(function(c){return c})}function pf(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function ZL(e){return Object.keys(e||{}).reduce(function(c,a){return c+"".concat(a,'="').concat(pf(e[a]),'" ')},"").trim()}function w7(e){return Object.keys(e||{}).reduce(function(c,a){return c+"".concat(a,": ").concat(e[a].trim(),";")},"")}function kn(e){return e.size!==t4.size||e.x!==t4.x||e.y!==t4.y||e.rotate!==t4.rotate||e.flipX||e.flipY}function JL(e){var c=e.transform,a=e.containerWidth,n=e.iconWidth,i={transform:"translate(".concat(a/2," 256)")},s="translate(".concat(c.x*32,", ").concat(c.y*32,") "),l="scale(".concat(c.size/16*(c.flipX?-1:1),", ").concat(c.size/16*(c.flipY?-1:1),") "),u="rotate(".concat(c.rotate," 0 0)"),p={transform:"".concat(s," ").concat(l," ").concat(u)},h={transform:"translate(".concat(n/2*-1," -256)")};return{outer:i,inner:p,path:h}}function ex(e){var c=e.transform,a=e.width,n=a===void 0?mn:a,i=e.height,s=i===void 0?mn:i,l=e.startCentered,u=l===void 0?!1:l,p="";return u&&nf?p+="translate(".concat(c.x/Q4-n/2,"em, ").concat(c.y/Q4-s/2,"em) "):u?p+="translate(calc(-50% + ".concat(c.x/Q4,"em), calc(-50% + ").concat(c.y/Q4,"em)) "):p+="translate(".concat(c.x/Q4,"em, ").concat(c.y/Q4,"em) "),p+="scale(".concat(c.size/Q4*(c.flipX?-1:1),", ").concat(c.size/Q4*(c.flipY?-1:1),") "),p+="rotate(".concat(c.rotate,"deg) "),p}var cx=`:root, :host { + --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid"; + --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Regular"; + --fa-font-light: normal 300 1em/1 "Font Awesome 6 Light"; + --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Thin"; + --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone"; + --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp"; + --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp"; + --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp"; + --fa-font-sharp-thin: normal 100 1em/1 "Font Awesome 6 Sharp"; + --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; +} + +svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa { + overflow: visible; + box-sizing: content-box; +} + +.svg-inline--fa { + display: var(--fa-display, inline-block); + height: 1em; + overflow: visible; + vertical-align: -0.125em; +} +.svg-inline--fa.fa-2xs { + vertical-align: 0.1em; +} +.svg-inline--fa.fa-xs { + vertical-align: 0em; +} +.svg-inline--fa.fa-sm { + vertical-align: -0.0714285705em; +} +.svg-inline--fa.fa-lg { + vertical-align: -0.2em; +} +.svg-inline--fa.fa-xl { + vertical-align: -0.25em; +} +.svg-inline--fa.fa-2xl { + vertical-align: -0.3125em; +} +.svg-inline--fa.fa-pull-left { + margin-right: var(--fa-pull-margin, 0.3em); + width: auto; +} +.svg-inline--fa.fa-pull-right { + margin-left: var(--fa-pull-margin, 0.3em); + width: auto; +} +.svg-inline--fa.fa-li { + width: var(--fa-li-width, 2em); + top: 0.25em; +} +.svg-inline--fa.fa-fw { + width: var(--fa-fw-width, 1.25em); +} + +.fa-layers svg.svg-inline--fa { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; +} + +.fa-layers-counter, .fa-layers-text { + display: inline-block; + position: absolute; + text-align: center; +} + +.fa-layers { + display: inline-block; + height: 1em; + position: relative; + text-align: center; + vertical-align: -0.125em; + width: 1em; +} +.fa-layers svg.svg-inline--fa { + -webkit-transform-origin: center center; + transform-origin: center center; +} + +.fa-layers-text { + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + -webkit-transform-origin: center center; + transform-origin: center center; +} + +.fa-layers-counter { + background-color: var(--fa-counter-background-color, #ff253a); + border-radius: var(--fa-counter-border-radius, 1em); + box-sizing: border-box; + color: var(--fa-inverse, #fff); + line-height: var(--fa-counter-line-height, 1); + max-width: var(--fa-counter-max-width, 5em); + min-width: var(--fa-counter-min-width, 1.5em); + overflow: hidden; + padding: var(--fa-counter-padding, 0.25em 0.5em); + right: var(--fa-right, 0); + text-overflow: ellipsis; + top: var(--fa-top, 0); + -webkit-transform: scale(var(--fa-counter-scale, 0.25)); + transform: scale(var(--fa-counter-scale, 0.25)); + -webkit-transform-origin: top right; + transform-origin: top right; +} + +.fa-layers-bottom-right { + bottom: var(--fa-bottom, 0); + right: var(--fa-right, 0); + top: auto; + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: bottom right; + transform-origin: bottom right; +} + +.fa-layers-bottom-left { + bottom: var(--fa-bottom, 0); + left: var(--fa-left, 0); + right: auto; + top: auto; + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: bottom left; + transform-origin: bottom left; +} + +.fa-layers-top-right { + top: var(--fa-top, 0); + right: var(--fa-right, 0); + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: top right; + transform-origin: top right; +} + +.fa-layers-top-left { + left: var(--fa-left, 0); + right: auto; + top: var(--fa-top, 0); + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: top left; + transform-origin: top left; +} + +.fa-1x { + font-size: 1em; +} + +.fa-2x { + font-size: 2em; +} + +.fa-3x { + font-size: 3em; +} + +.fa-4x { + font-size: 4em; +} + +.fa-5x { + font-size: 5em; +} + +.fa-6x { + font-size: 6em; +} + +.fa-7x { + font-size: 7em; +} + +.fa-8x { + font-size: 8em; +} + +.fa-9x { + font-size: 9em; +} + +.fa-10x { + font-size: 10em; +} + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; +} + +.fa-xs { + font-size: 0.75em; + line-height: 0.0833333337em; + vertical-align: 0.125em; +} + +.fa-sm { + font-size: 0.875em; + line-height: 0.0714285718em; + vertical-align: 0.0535714295em; +} + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; +} + +.fa-xl { + font-size: 1.5em; + line-height: 0.0416666682em; + vertical-align: -0.125em; +} + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; +} + +.fa-fw { + text-align: center; + width: 1.25em; +} + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; +} +.fa-ul > li { + position: relative; +} + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; +} + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); +} + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); +} + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); +} + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); +} + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); +} + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); +} + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); +} + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); +} + +.fa-spin-reverse { + --fa-animation-direction: reverse; +} + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); +} + +@media (prefers-reduced-motion: reduce) { + .fa-beat, +.fa-bounce, +.fa-fade, +.fa-beat-fade, +.fa-flip, +.fa-pulse, +.fa-shake, +.fa-spin, +.fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; + } +} +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); + } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); + } +} +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); + } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); + } +} +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } +} +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } +} +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); + } +} +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); + } +} +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); + } +} +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); + } +} +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + } +} +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + } +} +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); + } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); + } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); + } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); + } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); + } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); + } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); + } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); + } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); + } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); + } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); + } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); + } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); + } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); + } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); +} + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); +} + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); +} + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); +} + +.fa-stack { + display: inline-block; + vertical-align: middle; + height: 2em; + position: relative; + width: 2.5em; +} + +.fa-stack-1x, +.fa-stack-2x { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; + z-index: var(--fa-stack-z-index, auto); +} + +.svg-inline--fa.fa-stack-1x { + height: 1em; + width: 1.25em; +} +.svg-inline--fa.fa-stack-2x { + height: 2em; + width: 2.5em; +} + +.fa-inverse { + color: var(--fa-inverse, #fff); +} + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.svg-inline--fa .fa-primary { + fill: var(--fa-primary-color, currentColor); + opacity: var(--fa-primary-opacity, 1); +} + +.svg-inline--fa .fa-secondary { + fill: var(--fa-secondary-color, currentColor); + opacity: var(--fa-secondary-opacity, 0.4); +} + +.svg-inline--fa.fa-swap-opacity .fa-primary { + opacity: var(--fa-secondary-opacity, 0.4); +} + +.svg-inline--fa.fa-swap-opacity .fa-secondary { + opacity: var(--fa-primary-opacity, 1); +} + +.svg-inline--fa mask .fa-primary, +.svg-inline--fa mask .fa-secondary { + fill: black; +} + +.fad.fa-inverse, +.fa-duotone.fa-inverse { + color: var(--fa-inverse, #fff); +}`;function mf(){var e=tf,c=sf,a=c2.cssPrefix,n=c2.replacementClass,i=cx;if(a!==e||n!==c){var s=new RegExp("\\.".concat(e,"\\-"),"g"),l=new RegExp("\\--".concat(e,"\\-"),"g"),u=new RegExp("\\.".concat(c),"g");i=i.replace(s,".".concat(a,"-")).replace(l,"--".concat(a,"-")).replace(u,".".concat(n))}return i}var Rl=!1;function on(){c2.autoAddCss&&!Rl&&(XL(mf()),Rl=!0)}var ax={mixout:function(){return{dom:{css:mf,insertCss:on}}},hooks:function(){return{beforeDOMElementCreation:function(){on()},beforeI2svg:function(){on()}}}},x4=Z4||{};x4[L4]||(x4[L4]={});x4[L4].styles||(x4[L4].styles={});x4[L4].hooks||(x4[L4].hooks={});x4[L4].shims||(x4[L4].shims=[]);var U3=x4[L4],hf=[],rx=function e(){D2.removeEventListener("DOMContentLoaded",e),x7=1,hf.map(function(c){return c()})},x7=!1;w4&&(x7=(D2.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(D2.readyState),x7||D2.addEventListener("DOMContentLoaded",rx));function nx(e){w4&&(x7?setTimeout(e,0):hf.push(e))}function h5(e){var c=e.tag,a=e.attributes,n=a===void 0?{}:a,i=e.children,s=i===void 0?[]:i;return typeof e=="string"?pf(e):"<".concat(c," ").concat(ZL(n),">").concat(s.map(h5).join(""),"")}function Dl(e,c,a){if(e&&e[c]&&e[c][a])return{prefix:c,iconName:a,icon:e[c][a]}}var tx=function(c,a){return function(n,i,s,l){return c.call(a,n,i,s,l)}},ln=function(c,a,n,i){var s=Object.keys(c),l=s.length,u=i!==void 0?tx(a,i):a,p,h,z;for(n===void 0?(p=1,z=c[s[0]]):(p=0,z=n);p=55296&&i<=56319&&a=55296&&n<=56319&&a>c+1&&(i=e.charCodeAt(c+1),i>=56320&&i<=57343)?(n-55296)*1024+i-56320+65536:n}function Fl(e){return Object.keys(e).reduce(function(c,a){var n=e[a],i=!!n.icon;return i?c[n.iconName]=n.icon:c[a]=n,c},{})}function dn(e,c){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=a.skipHooks,i=n===void 0?!1:n,s=Fl(c);typeof U3.hooks.addPack=="function"&&!i?U3.hooks.addPack(e,Fl(c)):U3.styles[e]=X(X({},U3.styles[e]||{}),s),e==="fas"&&dn("fa",c)}var H7,g7,V7,D0=U3.styles,ox=U3.shims,lx=(H7={},l1(H7,R2,Object.values(l5[R2])),l1(H7,Q2,Object.values(l5[Q2])),H7),bn=null,vf={},df={},zf={},Hf={},gf={},fx=(g7={},l1(g7,R2,Object.keys(s5[R2])),l1(g7,Q2,Object.keys(s5[Q2])),g7);function ux(e){return~$L.indexOf(e)}function px(e,c){var a=c.split("-"),n=a[0],i=a.slice(1).join("-");return n===e&&i!==""&&!ux(i)?i:null}var Vf=function(){var c=function(s){return ln(D0,function(l,u,p){return l[p]=ln(u,s,{}),l},{})};vf=c(function(i,s,l){if(s[3]&&(i[s[3]]=l),s[2]){var u=s[2].filter(function(p){return typeof p=="number"});u.forEach(function(p){i[p.toString(16)]=l})}return i}),df=c(function(i,s,l){if(i[l]=l,s[2]){var u=s[2].filter(function(p){return typeof p=="string"});u.forEach(function(p){i[p]=l})}return i}),gf=c(function(i,s,l){var u=s[2];return i[l]=l,u.forEach(function(p){i[p]=l}),i});var a="far"in D0||c2.autoFetchSvg,n=ln(ox,function(i,s){var l=s[0],u=s[1],p=s[2];return u==="far"&&!a&&(u="fas"),typeof l=="string"&&(i.names[l]={prefix:u,iconName:p}),typeof l=="number"&&(i.unicodes[l.toString(16)]={prefix:u,iconName:p}),i},{names:{},unicodes:{}});zf=n.names,Hf=n.unicodes,bn=S7(c2.styleDefault,{family:c2.familyDefault})};KL(function(e){bn=S7(e.styleDefault,{family:c2.familyDefault})});Vf();function An(e,c){return(vf[e]||{})[c]}function mx(e,c){return(df[e]||{})[c]}function q6(e,c){return(gf[e]||{})[c]}function Mf(e){return zf[e]||{prefix:null,iconName:null}}function hx(e){var c=Hf[e],a=An("fas",e);return c||(a?{prefix:"fas",iconName:a}:null)||{prefix:null,iconName:null}}function J4(){return bn}var _n=function(){return{prefix:null,iconName:null,rest:[]}};function S7(e){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=c.family,n=a===void 0?R2:a,i=s5[n][e],s=o5[n][e]||o5[n][i],l=e in U3.styles?e:null;return s||l||null}var Ol=(V7={},l1(V7,R2,Object.keys(l5[R2])),l1(V7,Q2,Object.keys(l5[Q2])),V7);function N7(e){var c,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=a.skipLookups,i=n===void 0?!1:n,s=(c={},l1(c,R2,"".concat(c2.cssPrefix,"-").concat(R2)),l1(c,Q2,"".concat(c2.cssPrefix,"-").concat(Q2)),c),l=null,u=R2;(e.includes(s[R2])||e.some(function(h){return Ol[R2].includes(h)}))&&(u=R2),(e.includes(s[Q2])||e.some(function(h){return Ol[Q2].includes(h)}))&&(u=Q2);var p=e.reduce(function(h,z){var V=px(c2.cssPrefix,z);if(D0[z]?(z=lx[u].includes(z)?BL[u][z]:z,l=z,h.prefix=z):fx[u].indexOf(z)>-1?(l=z,h.prefix=S7(z,{family:u})):V?h.iconName=V:z!==c2.replacementClass&&z!==s[R2]&&z!==s[Q2]&&h.rest.push(z),!i&&h.prefix&&h.iconName){var x=l==="fa"?Mf(h.iconName):{},S=q6(h.prefix,h.iconName);x.prefix&&(l=null),h.iconName=x.iconName||S||h.iconName,h.prefix=x.prefix||h.prefix,h.prefix==="far"&&!D0.far&&D0.fas&&!c2.autoFetchSvg&&(h.prefix="fas")}return h},_n());return(e.includes("fa-brands")||e.includes("fab"))&&(p.prefix="fab"),(e.includes("fa-duotone")||e.includes("fad"))&&(p.prefix="fad"),!p.prefix&&u===Q2&&(D0.fass||c2.autoFetchSvg)&&(p.prefix="fass",p.iconName=q6(p.prefix,p.iconName)||p.iconName),(p.prefix==="fa"||l==="fa")&&(p.prefix=J4()||"fas"),p}var vx=function(){function e(){NL(this,e),this.definitions={}}return kL(e,[{key:"add",value:function(){for(var a=this,n=arguments.length,i=new Array(n),s=0;s0&&z.forEach(function(V){typeof V=="string"&&(a[u][V]=h)}),a[u][p]=h}),a}}]),e}(),Bl=[],F0={},O0={},dx=Object.keys(O0);function zx(e,c){var a=c.mixoutsTo;return Bl=e,F0={},Object.keys(O0).forEach(function(n){dx.indexOf(n)===-1&&delete O0[n]}),Bl.forEach(function(n){var i=n.mixout?n.mixout():{};if(Object.keys(i).forEach(function(l){typeof i[l]=="function"&&(a[l]=i[l]),L7(i[l])==="object"&&Object.keys(i[l]).forEach(function(u){a[l]||(a[l]={}),a[l][u]=i[l][u]})}),n.hooks){var s=n.hooks();Object.keys(s).forEach(function(l){F0[l]||(F0[l]=[]),F0[l].push(s[l])})}n.provides&&n.provides(O0)}),a}function zn(e,c){for(var a=arguments.length,n=new Array(a>2?a-2:0),i=2;i1?c-1:0),n=1;n0&&arguments[0]!==void 0?arguments[0]:{};return w4?(j6("beforeI2svg",c),y4("pseudoElements2svg",c),y4("i2svg",c)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},a=c.autoReplaceSvgRoot;c2.autoReplaceSvg===!1&&(c2.autoReplaceSvg=!0),c2.observeMutations=!0,nx(function(){Mx({autoReplaceSvgRoot:a}),j6("watch",c)})}},Vx={icon:function(c){if(c===null)return null;if(L7(c)==="object"&&c.prefix&&c.iconName)return{prefix:c.prefix,iconName:q6(c.prefix,c.iconName)||c.iconName};if(Array.isArray(c)&&c.length===2){var a=c[1].indexOf("fa-")===0?c[1].slice(3):c[1],n=S7(c[0]);return{prefix:n,iconName:q6(n,a)||a}}if(typeof c=="string"&&(c.indexOf("".concat(c2.cssPrefix,"-"))>-1||c.match(IL))){var i=N7(c.split(" "),{skipLookups:!0});return{prefix:i.prefix||J4(),iconName:q6(i.prefix,i.iconName)||i.iconName}}if(typeof c=="string"){var s=J4();return{prefix:s,iconName:q6(s,c)||c}}}},o3={noAuto:Hx,config:c2,dom:gx,parse:Vx,library:Cf,findIconDefinition:Hn,toHtml:h5},Mx=function(){var c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},a=c.autoReplaceSvgRoot,n=a===void 0?D2:a;(Object.keys(U3.styles).length>0||c2.autoFetchSvg)&&w4&&c2.autoReplaceSvg&&o3.dom.i2svg({node:n})};function k7(e,c){return Object.defineProperty(e,"abstract",{get:c}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map(function(n){return h5(n)})}}),Object.defineProperty(e,"node",{get:function(){if(w4){var n=D2.createElement("div");return n.innerHTML=e.html,n.children}}}),e}function Cx(e){var c=e.children,a=e.main,n=e.mask,i=e.attributes,s=e.styles,l=e.transform;if(kn(l)&&a.found&&!n.found){var u=a.width,p=a.height,h={x:u/p/2,y:.5};i.style=w7(X(X({},s),{},{"transform-origin":"".concat(h.x+l.x/16,"em ").concat(h.y+l.y/16,"em")}))}return[{tag:"svg",attributes:i,children:c}]}function Lx(e){var c=e.prefix,a=e.iconName,n=e.children,i=e.attributes,s=e.symbol,l=s===!0?"".concat(c,"-").concat(c2.cssPrefix,"-").concat(a):s;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:X(X({},i),{},{id:l}),children:n}]}]}function En(e){var c=e.icons,a=c.main,n=c.mask,i=e.prefix,s=e.iconName,l=e.transform,u=e.symbol,p=e.title,h=e.maskId,z=e.titleId,V=e.extra,x=e.watchable,S=x===void 0?!1:x,E=n.found?n:a,D=E.width,Z=E.height,M=i==="fak",H=[c2.replacementClass,s?"".concat(c2.cssPrefix,"-").concat(s):""].filter(function(b){return V.classes.indexOf(b)===-1}).filter(function(b){return b!==""||!!b}).concat(V.classes).join(" "),C={children:[],attributes:X(X({},V.attributes),{},{"data-prefix":i,"data-icon":s,class:H,role:V.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(D," ").concat(Z)})},_=M&&!~V.classes.indexOf("fa-fw")?{width:"".concat(D/Z*16*.0625,"em")}:{};S&&(C.attributes[$6]=""),p&&(C.children.push({tag:"title",attributes:{id:C.attributes["aria-labelledby"]||"title-".concat(z||u5())},children:[p]}),delete C.attributes.title);var F=X(X({},C),{},{prefix:i,iconName:s,main:a,mask:n,maskId:h,transform:l,symbol:u,styles:X(X({},_),V.styles)}),U=n.found&&a.found?y4("generateAbstractMask",F)||{children:[],attributes:{}}:y4("generateAbstractIcon",F)||{children:[],attributes:{}},B=U.children,J=U.attributes;return F.children=B,F.attributes=J,u?Lx(F):Cx(F)}function Il(e){var c=e.content,a=e.width,n=e.height,i=e.transform,s=e.title,l=e.extra,u=e.watchable,p=u===void 0?!1:u,h=X(X(X({},l.attributes),s?{title:s}:{}),{},{class:l.classes.join(" ")});p&&(h[$6]="");var z=X({},l.styles);kn(i)&&(z.transform=ex({transform:i,startCentered:!0,width:a,height:n}),z["-webkit-transform"]=z.transform);var V=w7(z);V.length>0&&(h.style=V);var x=[];return x.push({tag:"span",attributes:h,children:[c]}),s&&x.push({tag:"span",attributes:{class:"sr-only"},children:[s]}),x}function xx(e){var c=e.content,a=e.title,n=e.extra,i=X(X(X({},n.attributes),a?{title:a}:{}),{},{class:n.classes.join(" ")}),s=w7(n.styles);s.length>0&&(i.style=s);var l=[];return l.push({tag:"span",attributes:i,children:[c]}),a&&l.push({tag:"span",attributes:{class:"sr-only"},children:[a]}),l}var fn=U3.styles;function gn(e){var c=e[0],a=e[1],n=e.slice(4),i=Ln(n,1),s=i[0],l=null;return Array.isArray(s)?l={tag:"g",attributes:{class:"".concat(c2.cssPrefix,"-").concat(G6.GROUP)},children:[{tag:"path",attributes:{class:"".concat(c2.cssPrefix,"-").concat(G6.SECONDARY),fill:"currentColor",d:s[0]}},{tag:"path",attributes:{class:"".concat(c2.cssPrefix,"-").concat(G6.PRIMARY),fill:"currentColor",d:s[1]}}]}:l={tag:"path",attributes:{fill:"currentColor",d:s}},{found:!0,width:c,height:a,icon:l}}var yx={found:!1,width:512,height:512};function wx(e,c){!of&&!c2.showMissingIcons&&e&&console.error('Icon with name "'.concat(e,'" and prefix "').concat(c,'" is missing.'))}function Vn(e,c){var a=c;return c==="fa"&&c2.styleDefault!==null&&(c=J4()),new Promise(function(n,i){var s={found:!1,width:512,height:512,icon:y4("missingIconAbstract")||{}};if(a==="fa"){var l=Mf(e)||{};e=l.iconName||e,c=l.prefix||c}if(e&&c&&fn[c]&&fn[c][e]){var u=fn[c][e];return n(gn(u))}wx(e,c),n(X(X({},yx),{},{icon:c2.showMissingIcons&&e?y4("missingIconAbstract")||{}:{}}))})}var Ul=function(){},Mn=c2.measurePerformance&&p7&&p7.mark&&p7.measure?p7:{mark:Ul,measure:Ul},n5='FA "6.5.1"',Sx=function(c){return Mn.mark("".concat(n5," ").concat(c," begins")),function(){return Lf(c)}},Lf=function(c){Mn.mark("".concat(n5," ").concat(c," ends")),Mn.measure("".concat(n5," ").concat(c),"".concat(n5," ").concat(c," begins"),"".concat(n5," ").concat(c," ends"))},Pn={begin:Sx,end:Lf},M7=function(){};function Wl(e){var c=e.getAttribute?e.getAttribute($6):null;return typeof c=="string"}function Nx(e){var c=e.getAttribute?e.getAttribute(yn):null,a=e.getAttribute?e.getAttribute(wn):null;return c&&a}function kx(e){return e&&e.classList&&e.classList.contains&&e.classList.contains(c2.replacementClass)}function bx(){if(c2.autoReplaceSvg===!0)return C7.replace;var e=C7[c2.autoReplaceSvg];return e||C7.replace}function Ax(e){return D2.createElementNS("http://www.w3.org/2000/svg",e)}function _x(e){return D2.createElement(e)}function xf(e){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=c.ceFn,n=a===void 0?e.tag==="svg"?Ax:_x:a;if(typeof e=="string")return D2.createTextNode(e);var i=n(e.tag);Object.keys(e.attributes||[]).forEach(function(l){i.setAttribute(l,e.attributes[l])});var s=e.children||[];return s.forEach(function(l){i.appendChild(xf(l,{ceFn:n}))}),i}function Ex(e){var c=" ".concat(e.outerHTML," ");return c="".concat(c,"Font Awesome fontawesome.com "),c}var C7={replace:function(c){var a=c[0];if(a.parentNode)if(c[1].forEach(function(i){a.parentNode.insertBefore(xf(i),a)}),a.getAttribute($6)===null&&c2.keepOriginalSource){var n=D2.createComment(Ex(a));a.parentNode.replaceChild(n,a)}else a.remove()},nest:function(c){var a=c[0],n=c[1];if(~Nn(a).indexOf(c2.replacementClass))return C7.replace(c);var i=new RegExp("".concat(c2.cssPrefix,"-.*"));if(delete n[0].attributes.id,n[0].attributes.class){var s=n[0].attributes.class.split(" ").reduce(function(u,p){return p===c2.replacementClass||p.match(i)?u.toSvg.push(p):u.toNode.push(p),u},{toNode:[],toSvg:[]});n[0].attributes.class=s.toSvg.join(" "),s.toNode.length===0?a.removeAttribute("class"):a.setAttribute("class",s.toNode.join(" "))}var l=n.map(function(u){return h5(u)}).join(` +`);a.setAttribute($6,""),a.innerHTML=l}};function Gl(e){e()}function yf(e,c){var a=typeof c=="function"?c:M7;if(e.length===0)a();else{var n=Gl;c2.mutateApproach===FL&&(n=Z4.requestAnimationFrame||Gl),n(function(){var i=bx(),s=Pn.begin("mutate");e.map(i),s(),a()})}}var Tn=!1;function wf(){Tn=!0}function Cn(){Tn=!1}var y7=null;function ql(e){if(El&&c2.observeMutations){var c=e.treeCallback,a=c===void 0?M7:c,n=e.nodeCallback,i=n===void 0?M7:n,s=e.pseudoElementsCallback,l=s===void 0?M7:s,u=e.observeMutationsRoot,p=u===void 0?D2:u;y7=new El(function(h){if(!Tn){var z=J4();I0(h).forEach(function(V){if(V.type==="childList"&&V.addedNodes.length>0&&!Wl(V.addedNodes[0])&&(c2.searchPseudoElements&&l(V.target),a(V.target)),V.type==="attributes"&&V.target.parentNode&&c2.searchPseudoElements&&l(V.target.parentNode),V.type==="attributes"&&Wl(V.target)&&~qL.indexOf(V.attributeName))if(V.attributeName==="class"&&Nx(V.target)){var x=N7(Nn(V.target)),S=x.prefix,E=x.iconName;V.target.setAttribute(yn,S||z),E&&V.target.setAttribute(wn,E)}else kx(V.target)&&i(V.target)})}}),w4&&y7.observe(p,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function Px(){y7&&y7.disconnect()}function Tx(e){var c=e.getAttribute("style"),a=[];return c&&(a=c.split(";").reduce(function(n,i){var s=i.split(":"),l=s[0],u=s.slice(1);return l&&u.length>0&&(n[l]=u.join(":").trim()),n},{})),a}function Rx(e){var c=e.getAttribute("data-prefix"),a=e.getAttribute("data-icon"),n=e.innerText!==void 0?e.innerText.trim():"",i=N7(Nn(e));return i.prefix||(i.prefix=J4()),c&&a&&(i.prefix=c,i.iconName=a),i.iconName&&i.prefix||(i.prefix&&n.length>0&&(i.iconName=mx(i.prefix,e.innerText)||An(i.prefix,vn(e.innerText))),!i.iconName&&c2.autoFetchSvg&&e.firstChild&&e.firstChild.nodeType===Node.TEXT_NODE&&(i.iconName=e.firstChild.data)),i}function Dx(e){var c=I0(e.attributes).reduce(function(i,s){return i.name!=="class"&&i.name!=="style"&&(i[s.name]=s.value),i},{}),a=e.getAttribute("title"),n=e.getAttribute("data-fa-title-id");return c2.autoA11y&&(a?c["aria-labelledby"]="".concat(c2.replacementClass,"-title-").concat(n||u5()):(c["aria-hidden"]="true",c.focusable="false")),c}function Fx(){return{iconName:null,title:null,titleId:null,prefix:null,transform:t4,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}}}function $l(e){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{styleParser:!0},a=Rx(e),n=a.iconName,i=a.prefix,s=a.rest,l=Dx(e),u=zn("parseNodeAttributes",{},e),p=c.styleParser?Tx(e):[];return X({iconName:n,title:e.getAttribute("title"),titleId:e.getAttribute("data-fa-title-id"),prefix:i,transform:t4,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:s,styles:p,attributes:l}},u)}var Ox=U3.styles;function Sf(e){var c=c2.autoReplaceSvg==="nest"?$l(e,{styleParser:!1}):$l(e);return~c.extra.classes.indexOf(lf)?y4("generateLayersText",e,c):y4("generateSvgReplacementMutation",e,c)}var e6=new Set;Sn.map(function(e){e6.add("fa-".concat(e))});Object.keys(s5[R2]).map(e6.add.bind(e6));Object.keys(s5[Q2]).map(e6.add.bind(e6));e6=p5(e6);function jl(e){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(!w4)return Promise.resolve();var a=D2.documentElement.classList,n=function(V){return a.add("".concat(Pl,"-").concat(V))},i=function(V){return a.remove("".concat(Pl,"-").concat(V))},s=c2.autoFetchSvg?e6:Sn.map(function(z){return"fa-".concat(z)}).concat(Object.keys(Ox));s.includes("fa")||s.push("fa");var l=[".".concat(lf,":not([").concat($6,"])")].concat(s.map(function(z){return".".concat(z,":not([").concat($6,"])")})).join(", ");if(l.length===0)return Promise.resolve();var u=[];try{u=I0(e.querySelectorAll(l))}catch{}if(u.length>0)n("pending"),i("complete");else return Promise.resolve();var p=Pn.begin("onTree"),h=u.reduce(function(z,V){try{var x=Sf(V);x&&z.push(x)}catch(S){of||S.name==="MissingIcon"&&console.error(S)}return z},[]);return new Promise(function(z,V){Promise.all(h).then(function(x){yf(x,function(){n("active"),n("complete"),i("pending"),typeof c=="function"&&c(),p(),z()})}).catch(function(x){p(),V(x)})})}function Bx(e){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;Sf(e).then(function(a){a&&yf([a],c)})}function Ix(e){return function(c){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=(c||{}).icon?c:Hn(c||{}),i=a.mask;return i&&(i=(i||{}).icon?i:Hn(i||{})),e(n,X(X({},a),{},{mask:i}))}}var Ux=function(c){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=a.transform,i=n===void 0?t4:n,s=a.symbol,l=s===void 0?!1:s,u=a.mask,p=u===void 0?null:u,h=a.maskId,z=h===void 0?null:h,V=a.title,x=V===void 0?null:V,S=a.titleId,E=S===void 0?null:S,D=a.classes,Z=D===void 0?[]:D,M=a.attributes,H=M===void 0?{}:M,C=a.styles,_=C===void 0?{}:C;if(c){var F=c.prefix,U=c.iconName,B=c.icon;return k7(X({type:"icon"},c),function(){return j6("beforeDOMElementCreation",{iconDefinition:c,params:a}),c2.autoA11y&&(x?H["aria-labelledby"]="".concat(c2.replacementClass,"-title-").concat(E||u5()):(H["aria-hidden"]="true",H.focusable="false")),En({icons:{main:gn(B),mask:p?gn(p.icon):{found:!1,width:null,height:null,icon:{}}},prefix:F,iconName:U,transform:X(X({},t4),i),symbol:l,title:x,maskId:z,titleId:E,extra:{attributes:H,styles:_,classes:Z}})})}},Wx={mixout:function(){return{icon:Ix(Ux)}},hooks:function(){return{mutationObserverCallbacks:function(a){return a.treeCallback=jl,a.nodeCallback=Bx,a}}},provides:function(c){c.i2svg=function(a){var n=a.node,i=n===void 0?D2:n,s=a.callback,l=s===void 0?function(){}:s;return jl(i,l)},c.generateSvgReplacementMutation=function(a,n){var i=n.iconName,s=n.title,l=n.titleId,u=n.prefix,p=n.transform,h=n.symbol,z=n.mask,V=n.maskId,x=n.extra;return new Promise(function(S,E){Promise.all([Vn(i,u),z.iconName?Vn(z.iconName,z.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then(function(D){var Z=Ln(D,2),M=Z[0],H=Z[1];S([a,En({icons:{main:M,mask:H},prefix:u,iconName:i,transform:p,symbol:h,maskId:V,title:s,titleId:l,extra:x,watchable:!0})])}).catch(E)})},c.generateAbstractIcon=function(a){var n=a.children,i=a.attributes,s=a.main,l=a.transform,u=a.styles,p=w7(u);p.length>0&&(i.style=p);var h;return kn(l)&&(h=y4("generateAbstractTransformGrouping",{main:s,transform:l,containerWidth:s.width,iconWidth:s.width})),n.push(h||s.icon),{children:n,attributes:i}}}},Gx={mixout:function(){return{layer:function(a){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.classes,s=i===void 0?[]:i;return k7({type:"layer"},function(){j6("beforeDOMElementCreation",{assembler:a,params:n});var l=[];return a(function(u){Array.isArray(u)?u.map(function(p){l=l.concat(p.abstract)}):l=l.concat(u.abstract)}),[{tag:"span",attributes:{class:["".concat(c2.cssPrefix,"-layers")].concat(p5(s)).join(" ")},children:l}]})}}}},qx={mixout:function(){return{counter:function(a){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.title,s=i===void 0?null:i,l=n.classes,u=l===void 0?[]:l,p=n.attributes,h=p===void 0?{}:p,z=n.styles,V=z===void 0?{}:z;return k7({type:"counter",content:a},function(){return j6("beforeDOMElementCreation",{content:a,params:n}),xx({content:a.toString(),title:s,extra:{attributes:h,styles:V,classes:["".concat(c2.cssPrefix,"-layers-counter")].concat(p5(u))}})})}}}},$x={mixout:function(){return{text:function(a){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.transform,s=i===void 0?t4:i,l=n.title,u=l===void 0?null:l,p=n.classes,h=p===void 0?[]:p,z=n.attributes,V=z===void 0?{}:z,x=n.styles,S=x===void 0?{}:x;return k7({type:"text",content:a},function(){return j6("beforeDOMElementCreation",{content:a,params:n}),Il({content:a,transform:X(X({},t4),s),title:u,extra:{attributes:V,styles:S,classes:["".concat(c2.cssPrefix,"-layers-text")].concat(p5(h))}})})}}},provides:function(c){c.generateLayersText=function(a,n){var i=n.title,s=n.transform,l=n.extra,u=null,p=null;if(nf){var h=parseInt(getComputedStyle(a).fontSize,10),z=a.getBoundingClientRect();u=z.width/h,p=z.height/h}return c2.autoA11y&&!i&&(l.attributes["aria-hidden"]="true"),Promise.resolve([a,Il({content:a.innerHTML,width:u,height:p,transform:s,title:i,extra:l,watchable:!0})])}}},jx=new RegExp('"',"ug"),Yl=[1105920,1112319];function Yx(e){var c=e.replace(jx,""),a=sx(c,0),n=a>=Yl[0]&&a<=Yl[1],i=c.length===2?c[0]===c[1]:!1;return{value:vn(i?c[0]:c),isSecondary:n||i}}function Kl(e,c){var a="".concat(DL).concat(c.replace(":","-"));return new Promise(function(n,i){if(e.getAttribute(a)!==null)return n();var s=I0(e.children),l=s.filter(function(B){return B.getAttribute(hn)===c})[0],u=Z4.getComputedStyle(e,c),p=u.getPropertyValue("font-family").match(UL),h=u.getPropertyValue("font-weight"),z=u.getPropertyValue("content");if(l&&!p)return e.removeChild(l),n();if(p&&z!=="none"&&z!==""){var V=u.getPropertyValue("content"),x=~["Sharp"].indexOf(p[2])?Q2:R2,S=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(p[2])?o5[x][p[2].toLowerCase()]:WL[x][h],E=Yx(V),D=E.value,Z=E.isSecondary,M=p[0].startsWith("FontAwesome"),H=An(S,D),C=H;if(M){var _=hx(D);_.iconName&&_.prefix&&(H=_.iconName,S=_.prefix)}if(H&&!Z&&(!l||l.getAttribute(yn)!==S||l.getAttribute(wn)!==C)){e.setAttribute(a,C),l&&e.removeChild(l);var F=Fx(),U=F.extra;U.attributes[hn]=c,Vn(H,S).then(function(B){var J=En(X(X({},F),{},{icons:{main:B,mask:_n()},prefix:S,iconName:C,extra:U,watchable:!0})),b=D2.createElementNS("http://www.w3.org/2000/svg","svg");c==="::before"?e.insertBefore(b,e.firstChild):e.appendChild(b),b.outerHTML=J.map(function(N){return h5(N)}).join(` +`),e.removeAttribute(a),n()}).catch(i)}else n()}else n()})}function Kx(e){return Promise.all([Kl(e,"::before"),Kl(e,"::after")])}function Xx(e){return e.parentNode!==document.head&&!~OL.indexOf(e.tagName.toUpperCase())&&!e.getAttribute(hn)&&(!e.parentNode||e.parentNode.tagName!=="svg")}function Xl(e){if(w4)return new Promise(function(c,a){var n=I0(e.querySelectorAll("*")).filter(Xx).map(Kx),i=Pn.begin("searchPseudoElements");wf(),Promise.all(n).then(function(){i(),Cn(),c()}).catch(function(){i(),Cn(),a()})})}var Qx={hooks:function(){return{mutationObserverCallbacks:function(a){return a.pseudoElementsCallback=Xl,a}}},provides:function(c){c.pseudoElements2svg=function(a){var n=a.node,i=n===void 0?D2:n;c2.searchPseudoElements&&Xl(i)}}},Ql=!1,Zx={mixout:function(){return{dom:{unwatch:function(){wf(),Ql=!0}}}},hooks:function(){return{bootstrap:function(){ql(zn("mutationObserverCallbacks",{}))},noAuto:function(){Px()},watch:function(a){var n=a.observeMutationsRoot;Ql?Cn():ql(zn("mutationObserverCallbacks",{observeMutationsRoot:n}))}}}},Zl=function(c){var a={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return c.toLowerCase().split(" ").reduce(function(n,i){var s=i.toLowerCase().split("-"),l=s[0],u=s.slice(1).join("-");if(l&&u==="h")return n.flipX=!0,n;if(l&&u==="v")return n.flipY=!0,n;if(u=parseFloat(u),isNaN(u))return n;switch(l){case"grow":n.size=n.size+u;break;case"shrink":n.size=n.size-u;break;case"left":n.x=n.x-u;break;case"right":n.x=n.x+u;break;case"up":n.y=n.y-u;break;case"down":n.y=n.y+u;break;case"rotate":n.rotate=n.rotate+u;break}return n},a)},Jx={mixout:function(){return{parse:{transform:function(a){return Zl(a)}}}},hooks:function(){return{parseNodeAttributes:function(a,n){var i=n.getAttribute("data-fa-transform");return i&&(a.transform=Zl(i)),a}}},provides:function(c){c.generateAbstractTransformGrouping=function(a){var n=a.main,i=a.transform,s=a.containerWidth,l=a.iconWidth,u={transform:"translate(".concat(s/2," 256)")},p="translate(".concat(i.x*32,", ").concat(i.y*32,") "),h="scale(".concat(i.size/16*(i.flipX?-1:1),", ").concat(i.size/16*(i.flipY?-1:1),") "),z="rotate(".concat(i.rotate," 0 0)"),V={transform:"".concat(p," ").concat(h," ").concat(z)},x={transform:"translate(".concat(l/2*-1," -256)")},S={outer:u,inner:V,path:x};return{tag:"g",attributes:X({},S.outer),children:[{tag:"g",attributes:X({},S.inner),children:[{tag:n.icon.tag,children:n.icon.children,attributes:X(X({},n.icon.attributes),S.path)}]}]}}}},un={x:0,y:0,width:"100%",height:"100%"};function Jl(e){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return e.attributes&&(e.attributes.fill||c)&&(e.attributes.fill="black"),e}function ey(e){return e.tag==="g"?e.children:[e]}var cy={hooks:function(){return{parseNodeAttributes:function(a,n){var i=n.getAttribute("data-fa-mask"),s=i?N7(i.split(" ").map(function(l){return l.trim()})):_n();return s.prefix||(s.prefix=J4()),a.mask=s,a.maskId=n.getAttribute("data-fa-mask-id"),a}}},provides:function(c){c.generateAbstractMask=function(a){var n=a.children,i=a.attributes,s=a.main,l=a.mask,u=a.maskId,p=a.transform,h=s.width,z=s.icon,V=l.width,x=l.icon,S=JL({transform:p,containerWidth:V,iconWidth:h}),E={tag:"rect",attributes:X(X({},un),{},{fill:"white"})},D=z.children?{children:z.children.map(Jl)}:{},Z={tag:"g",attributes:X({},S.inner),children:[Jl(X({tag:z.tag,attributes:X(X({},z.attributes),S.path)},D))]},M={tag:"g",attributes:X({},S.outer),children:[Z]},H="mask-".concat(u||u5()),C="clip-".concat(u||u5()),_={tag:"mask",attributes:X(X({},un),{},{id:H,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[E,M]},F={tag:"defs",children:[{tag:"clipPath",attributes:{id:C},children:ey(x)},_]};return n.push(F,{tag:"rect",attributes:X({fill:"currentColor","clip-path":"url(#".concat(C,")"),mask:"url(#".concat(H,")")},un)}),{children:n,attributes:i}}}},ay={provides:function(c){var a=!1;Z4.matchMedia&&(a=Z4.matchMedia("(prefers-reduced-motion: reduce)").matches),c.missingIconAbstract=function(){var n=[],i={fill:"currentColor"},s={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};n.push({tag:"path",attributes:X(X({},i),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});var l=X(X({},s),{},{attributeName:"opacity"}),u={tag:"circle",attributes:X(X({},i),{},{cx:"256",cy:"364",r:"28"}),children:[]};return a||u.children.push({tag:"animate",attributes:X(X({},s),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:X(X({},l),{},{values:"1;0;1;1;0;1;"})}),n.push(u),n.push({tag:"path",attributes:X(X({},i),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:a?[]:[{tag:"animate",attributes:X(X({},l),{},{values:"1;0;0;0;0;1;"})}]}),a||n.push({tag:"path",attributes:X(X({},i),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:X(X({},l),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:n}}}},ry={hooks:function(){return{parseNodeAttributes:function(a,n){var i=n.getAttribute("data-fa-symbol"),s=i===null?!1:i===""?!0:i;return a.symbol=s,a}}}},ny=[ax,Wx,Gx,qx,$x,Qx,Zx,Jx,cy,ay,ry];zx(ny,{mixoutsTo:o3});var ek=o3.noAuto,ck=o3.config,ak=o3.library,rk=o3.dom,b7=o3.parse,nk=o3.findIconDefinition,tk=o3.toHtml,Nf=o3.icon,ik=o3.layer,sk=o3.text,ok=o3.counter;var h2=T2(Rf()),On=T2(g1());function Df(e,c){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);c&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),a.push.apply(a,n)}return a}function c6(e){for(var c=1;c=0)&&(a[i]=e[i]);return a}function oy(e,c){if(e==null)return{};var a=sy(e,c),n,i;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function Dn(e){return ly(e)||fy(e)||uy(e)||py()}function ly(e){if(Array.isArray(e))return Fn(e)}function fy(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function uy(e,c){if(e){if(typeof e=="string")return Fn(e,c);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return Fn(e,c)}}function Fn(e,c){(c==null||c>e.length)&&(c=e.length);for(var a=0,n=new Array(c);a2&&arguments[2]!==void 0?arguments[2]:{};if(typeof c=="string")return c;var n=(c.children||[]).map(function(p){return Bf(e,p)}),i=Object.keys(c.attributes||{}).reduce(function(p,h){var z=c.attributes[h];switch(h){case"class":p.attrs.className=z,delete c.attributes.class;break;case"style":p.attrs.style=zy(z);break;default:h.indexOf("aria-")===0||h.indexOf("data-")===0?p.attrs[h.toLowerCase()]=z:p.attrs[Of(h)]=z}return p},{attrs:{}}),s=a.style,l=s===void 0?{}:s,u=oy(a,vy);return i.attrs.style=c6(c6({},i.attrs.style),l),e.apply(void 0,[c.tag,c6(c6({},i.attrs),u)].concat(Dn(n)))}var If=!1;try{If=!0}catch{}function Hy(){if(!If&&console&&typeof console.error=="function"){var e;(e=console).error.apply(e,arguments)}}function Ff(e){if(e&&A7(e)==="object"&&e.prefix&&e.iconName&&e.icon)return e;if(b7.icon)return b7.icon(e);if(e===null)return null;if(e&&A7(e)==="object"&&e.prefix&&e.iconName)return e;if(Array.isArray(e)&&e.length===2)return{prefix:e[0],iconName:e[1]};if(typeof e=="string")return{prefix:"fas",iconName:e}}function Rn(e,c){return Array.isArray(c)&&c.length>0||!Array.isArray(c)&&c?U0({},e,c):{}}var l3=On.default.forwardRef(function(e,c){var a=e.icon,n=e.mask,i=e.symbol,s=e.className,l=e.title,u=e.titleId,p=e.maskId,h=Ff(a),z=Rn("classes",[].concat(Dn(my(e)),Dn(s.split(" ")))),V=Rn("transform",typeof e.transform=="string"?b7.transform(e.transform):e.transform),x=Rn("mask",Ff(n)),S=Nf(h,c6(c6(c6(c6({},z),V),x),{},{symbol:i,title:l,titleId:u,maskId:p}));if(!S)return Hy("Could not find icon",h),null;var E=S.abstract,D={ref:c};return Object.keys(e).forEach(function(Z){l3.defaultProps.hasOwnProperty(Z)||(D[Z]=e[Z])}),gy(E[0],D)});l3.displayName="FontAwesomeIcon";l3.propTypes={beat:h2.default.bool,border:h2.default.bool,beatFade:h2.default.bool,bounce:h2.default.bool,className:h2.default.string,fade:h2.default.bool,flash:h2.default.bool,mask:h2.default.oneOfType([h2.default.object,h2.default.array,h2.default.string]),maskId:h2.default.string,fixedWidth:h2.default.bool,inverse:h2.default.bool,flip:h2.default.oneOf([!0,!1,"horizontal","vertical","both"]),icon:h2.default.oneOfType([h2.default.object,h2.default.array,h2.default.string]),listItem:h2.default.bool,pull:h2.default.oneOf(["right","left"]),pulse:h2.default.bool,rotation:h2.default.oneOf([0,90,180,270]),shake:h2.default.bool,size:h2.default.oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:h2.default.bool,spinPulse:h2.default.bool,spinReverse:h2.default.bool,symbol:h2.default.oneOfType([h2.default.bool,h2.default.string]),title:h2.default.string,titleId:h2.default.string,transform:h2.default.oneOfType([h2.default.string,h2.default.object]),swapOpacity:h2.default.bool};l3.defaultProps={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1};var gy=Bf.bind(null,On.default.createElement);var Z3=T2(g1());var w1=function(){return w1=Object.assign||function(c){for(var a,n=1,i=arguments.length;n0?Z2($0,--y3):0,q0--,t1===10&&(q0=1,R7--),t1}function w3(){return t1=y32||Un(t1)>3?"":" "}function eu(e,c){for(;--c&&w3()&&!(t1<48||t1>102||t1>57&&t1<65||t1>70&&t1<97););return D7(e,g5()+(c<6&&r6()==32&&w3()==32))}function Wn(e){for(;w3();)switch(t1){case e:return y3;case 34:case 39:e!==34&&e!==39&&Wn(t1);break;case 40:e===41&&Wn(e);break;case 92:w3();break}return y3}function cu(e,c){for(;w3()&&e+t1!==57;)if(e+t1===84&&r6()===47)break;return"/*"+D7(c,y3-1)+"*"+d5(e===47?e:w3())}function au(e){for(;!Un(r6());)w3();return D7(e,y3)}function tu(e){return Zf(O7("",null,null,null,[""],e=Qf(e),0,[0],e))}function O7(e,c,a,n,i,s,l,u,p){for(var h=0,z=0,V=l,x=0,S=0,E=0,D=1,Z=1,M=1,H=0,C="",_=i,F=s,U=n,B=C;Z;)switch(E=H,H=w3()){case 40:if(E!=108&&Z2(B,V-1)==58){G0(B+=f2(F7(H),"&","&\f"),"&\f",Bn(h?u[h-1]:0))!=-1&&(M=-1);break}case 34:case 39:case 91:B+=F7(H);break;case 9:case 10:case 13:case 32:B+=Jf(E);break;case 92:B+=eu(g5()-1,7);continue;case 47:switch(r6()){case 42:case 47:K6(Vy(cu(w3(),g5()),c,a,p),p);break;default:B+="/"}break;case 123*D:u[h++]=O1(B)*M;case 125*D:case 59:case 0:switch(H){case 0:case 125:Z=0;case 59+z:M==-1&&(B=f2(B,/\f/g,"")),S>0&&O1(B)-V&&K6(S>32?nu(B+";",n,a,V-1,p):nu(f2(B," ","")+";",n,a,V-2,p),p);break;case 59:B+=";";default:if(K6(U=ru(B,c,a,h,z,i,u,C,_=[],F=[],V,s),s),H===123)if(z===0)O7(B,c,U,U,_,s,V,u,F);else switch(x===99&&Z2(B,3)===110?100:x){case 100:case 108:case 109:case 115:O7(e,U,U,n&&K6(ru(e,U,U,0,0,i,u,C,i,_=[],V,F),F),i,F,V,u,n?_:F);break;default:O7(B,U,U,U,[""],F,0,u,F)}}h=z=S=0,D=M=1,C=B="",V=l;break;case 58:V=1+O1(B),S=E;default:if(D<1){if(H==123)--D;else if(H==125&&D++==0&&Xf()==125)continue}switch(B+=d5(H),H*D){case 38:M=z>0?1:(B+="\f",-1);break;case 44:u[h++]=(O1(B)-1)*M,M=1;break;case 64:r6()===45&&(B+=F7(w3())),x=r6(),z=V=O1(C=B+=au(g5())),H++;break;case 45:E===45&&O1(B)==2&&(D=0)}}return s}function ru(e,c,a,n,i,s,l,u,p,h,z,V){for(var x=i-1,S=i===0?s:[""],E=T7(S),D=0,Z=0,M=0;D0?S[H]+" "+C:f2(C,/&\f/g,S[H])))&&(p[M++]=_);return H5(e,c,a,i===0?a6:u,p,h,z,V)}function Vy(e,c,a,n){return H5(e,c,a,_7,d5(Kf()),i4(e,2,-2),0,n)}function nu(e,c,a,n,i){return H5(e,c,a,W0,i4(e,0,n),i4(e,n+1,-1),n,i)}function Gn(e,c,a){switch($f(e,c)){case 5103:return C2+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return C2+e+e;case 4789:return Y6+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return C2+e+Y6+e+k2+e+e;case 5936:switch(Z2(e,c+11)){case 114:return C2+e+k2+f2(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return C2+e+k2+f2(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return C2+e+k2+f2(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return C2+e+k2+e+e;case 6165:return C2+e+k2+"flex-"+e+e;case 5187:return C2+e+f2(e,/(\w+).+(:[^]+)/,C2+"box-$1$2"+k2+"flex-$1$2")+e;case 5443:return C2+e+k2+"flex-item-"+f2(e,/flex-|-self/g,"")+(W3(e,/flex-|baseline/)?"":k2+"grid-row-"+f2(e,/flex-|-self/g,""))+e;case 4675:return C2+e+k2+"flex-line-pack"+f2(e,/align-content|flex-|-self/g,"")+e;case 5548:return C2+e+k2+f2(e,"shrink","negative")+e;case 5292:return C2+e+k2+f2(e,"basis","preferred-size")+e;case 6060:return C2+"box-"+f2(e,"-grow","")+C2+e+k2+f2(e,"grow","positive")+e;case 4554:return C2+f2(e,/([^-])(transform)/g,"$1"+C2+"$2")+e;case 6187:return f2(f2(f2(e,/(zoom-|grab)/,C2+"$1"),/(image-set)/,C2+"$1"),e,"")+e;case 5495:case 3959:return f2(e,/(image-set\([^]*)/,C2+"$1$`$1");case 4968:return f2(f2(e,/(.+:)(flex-)?(.*)/,C2+"box-pack:$3"+k2+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+C2+e+e;case 4200:if(!W3(e,/flex-|baseline/))return k2+"grid-column-align"+i4(e,c)+e;break;case 2592:case 3360:return k2+f2(e,"template-","")+e;case 4384:case 3616:return a&&a.some(function(n,i){return c=i,W3(n.props,/grid-\w+-end/)})?~G0(e+(a=a[c].value),"span",0)?e:k2+f2(e,"-start","")+e+k2+"grid-row-span:"+(~G0(a,"span",0)?W3(a,/\d+/):+W3(a,/\d+/)-+W3(e,/\d+/))+";":k2+f2(e,"-start","")+e;case 4896:case 4128:return a&&a.some(function(n){return W3(n.props,/grid-\w+-start/)})?e:k2+f2(f2(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return f2(e,/(.+)-inline(.+)/,C2+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(O1(e)-1-c>6)switch(Z2(e,c+1)){case 109:if(Z2(e,c+4)!==45)break;case 102:return f2(e,/(.+:)(.+)-([^]+)/,"$1"+C2+"$2-$3$1"+Y6+(Z2(e,c+3)==108?"$3":"$2-$3"))+e;case 115:return~G0(e,"stretch",0)?Gn(f2(e,"stretch","fill-available"),c,a)+e:e}break;case 5152:case 5920:return f2(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(n,i,s,l,u,p,h){return k2+i+":"+s+h+(l?k2+i+"-span:"+(u?p:+p-+s)+h:"")+e});case 4949:if(Z2(e,c+6)===121)return f2(e,":",":"+C2)+e;break;case 6444:switch(Z2(e,Z2(e,14)===45?18:11)){case 120:return f2(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+C2+(Z2(e,14)===45?"inline-":"")+"box$3$1"+C2+"$2$3$1"+k2+"$2box$3")+e;case 100:return f2(e,":",":"+k2)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return f2(e,"scroll-","scroll-snap-")+e}return e}function j0(e,c){for(var a="",n=0;n-1&&!e.return)switch(e.type){case W0:e.return=Gn(e.value,e.length,a);return;case E7:return j0([S4(e,{value:f2(e.value,"@","@"+C2)})],n);case a6:if(e.length)return jf(a=e.props,function(i){switch(W3(i,n=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":X6(S4(e,{props:[f2(i,/:(read-\w+)/,":"+Y6+"$1")]})),X6(S4(e,{props:[i]})),z5(e,{props:In(a,n)});break;case"::placeholder":X6(S4(e,{props:[f2(i,/:(plac\w+)/,":"+C2+"input-$1")]})),X6(S4(e,{props:[f2(i,/:(plac\w+)/,":"+Y6+"$1")]})),X6(S4(e,{props:[f2(i,/:(plac\w+)/,k2+"input-$1")]})),X6(S4(e,{props:[i]})),z5(e,{props:In(a,n)});break}return""})}}var My={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},fu=My;var k4=typeof process<"u"&&process.env!==void 0&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",Mu="active",G7="data-styled-version",K0="6.1.8",e9=`/*!sc*/ +`,c9=typeof window<"u"&&"HTMLElement"in window,Cy=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process<"u"&&process.env!==void 0&&process.env.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&process.env.REACT_APP_SC_DISABLE_SPEEDY!==""?process.env.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&process.env.REACT_APP_SC_DISABLE_SPEEDY:typeof process<"u"&&process.env!==void 0&&process.env.SC_DISABLE_SPEEDY!==void 0&&process.env.SC_DISABLE_SPEEDY!==""&&process.env.SC_DISABLE_SPEEDY!=="false"&&process.env.SC_DISABLE_SPEEDY);var j7=Object.freeze([]),X0=Object.freeze({});function Ly(e,c,a){return a===void 0&&(a=X0),e.theme!==a.theme&&e.theme||c||a.theme}var Cu=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),xy=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,yy=/(^-|-$)/g;function uu(e){return e.replace(xy,"-").replace(yy,"")}var wy=/(a)(d)/gi,B7=52,pu=function(e){return String.fromCharCode(e+(e>25?39:97))};function Yn(e){var c,a="";for(c=Math.abs(e);c>B7;c=c/B7|0)a=pu(c%B7)+a;return(pu(c%B7)+a).replace(wy,"$1-$2")}var qn,Lu=5381,Y0=function(e,c){for(var a=c.length;a;)e=33*e^c.charCodeAt(--a);return e},xu=function(e){return Y0(Lu,e)};function Sy(e){return Yn(xu(e)>>>0)}function Ny(e){return e.displayName||e.name||"Component"}function $n(e){return typeof e=="string"&&!0}var yu=typeof Symbol=="function"&&Symbol.for,wu=yu?Symbol.for("react.memo"):60115,ky=yu?Symbol.for("react.forward_ref"):60112,by={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ay={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Su={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},_y=((qn={})[ky]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},qn[wu]=Su,qn);function mu(e){return("type"in(c=e)&&c.type.$$typeof)===wu?Su:"$$typeof"in e?_y[e.$$typeof]:by;var c}var Ey=Object.defineProperty,Py=Object.getOwnPropertyNames,hu=Object.getOwnPropertySymbols,Ty=Object.getOwnPropertyDescriptor,Ry=Object.getPrototypeOf,vu=Object.prototype;function Nu(e,c,a){if(typeof c!="string"){if(vu){var n=Ry(c);n&&n!==vu&&Nu(e,n,a)}var i=Py(c);hu&&(i=i.concat(hu(c)));for(var s=mu(e),l=mu(c),u=0;u0?" Args: ".concat(c.join(", ")):""))}var Dy=function(){function e(c){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=c}return e.prototype.indexOfGroup=function(c){for(var a=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,i=n.length,s=i;c>=s;)if((s<<=1)<0)throw N4(16,"".concat(c));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var l=i;l=this.length||this.groupSizes[c]===0)return a;for(var n=this.groupSizes[c],i=this.indexOfGroup(c),s=i+n,l=i;l=0){var n=document.createTextNode(a);return this.element.insertBefore(n,this.nodes[c]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(c){this.element.removeChild(this.nodes[c]),this.length--},e.prototype.getRule=function(c){return c0&&(Z+="".concat(M,","))}),p+="".concat(E).concat(D,'{content:"').concat(Z,'"}').concat(e9)},z=0;z0?".".concat(c):x},z=p.slice();z.push(function(x){x.type===a6&&x.value.includes("&")&&(x.props[0]=x.props[0].replace(jy,a).replace(n,h))}),l.prefix&&z.push(lu),z.push(iu);var V=function(x,S,E,D){S===void 0&&(S=""),E===void 0&&(E=""),D===void 0&&(D="&"),c=D,a=S,n=new RegExp("\\".concat(a,"\\b"),"g");var Z=x.replace(Yy,""),M=tu(E||S?"".concat(E," ").concat(S," { ").concat(Z," }"):Z);l.namespace&&(M=bu(M,l.namespace));var H=[];return j0(M,su(z.concat(ou(function(C){return H.push(C)})))),H};return V.hash=p.length?p.reduce(function(x,S){return S.name||N4(15),Y0(x,S.name)},Lu).toString():"",V}var Ky=new M5,Qn=Au(),n9=J2.default.createContext({shouldForwardProp:void 0,styleSheet:Ky,stylis:Qn}),Zk=n9.Consumer,Xy=J2.default.createContext(void 0);function Zn(){return(0,J2.useContext)(n9)}function Qy(e){var c=(0,J2.useState)(e.stylisPlugins),a=c[0],n=c[1],i=Zn().styleSheet,s=(0,J2.useMemo)(function(){var p=i;return e.sheet?p=e.sheet:e.target&&(p=p.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(p=p.reconstructWithOptions({useCSSOMInjection:!1})),p},[e.disableCSSOMInjection,e.sheet,e.target,i]),l=(0,J2.useMemo)(function(){return Au({options:{namespace:e.namespace,prefix:e.enableVendorPrefixes},plugins:a})},[e.enableVendorPrefixes,e.namespace,a]);(0,J2.useEffect)(function(){(0,Vu.default)(a,e.stylisPlugins)||n(e.stylisPlugins)},[e.stylisPlugins]);var u=(0,J2.useMemo)(function(){return{shouldForwardProp:e.shouldForwardProp,styleSheet:s,stylis:l}},[e.shouldForwardProp,s,l]);return J2.default.createElement(n9.Provider,{value:u},J2.default.createElement(Xy.Provider,{value:l},e.children))}var Zy=function(){function e(c,a){var n=this;this.inject=function(i,s){s===void 0&&(s=Qn);var l=n.name+s.hash;i.hasNameForId(n.id,l)||i.insertRules(n.id,l,s(n.rules,l,"@keyframes"))},this.name=c,this.id="sc-keyframes-".concat(c),this.rules=a,r9(this,function(){throw N4(12,String(n.name))})}return e.prototype.getName=function(c){return c===void 0&&(c=Qn),this.name+c.hash},e}(),Jy=function(e){return e>="A"&&e<="Z"};function zu(e){for(var c="",a=0;a>>0);if(!a.hasNameForId(this.componentId,l)){var u=n(s,".".concat(l),void 0,this.componentId);a.insertRules(this.componentId,l,u)}i=Q6(i,l),this.staticRulesId=l}else{for(var p=Y0(this.baseHash,n.hash),h="",z=0;z>>0);a.hasNameForId(this.componentId,S)||a.insertRules(this.componentId,S,n(h,".".concat(S),void 0,this.componentId)),i=Q6(i,S)}}return i},e}(),Tu=J2.default.createContext(void 0),Jk=Tu.Consumer;var jn={};function aw(e,c,a){var n=a9(e),i=e,s=!$n(e),l=c.attrs,u=l===void 0?j7:l,p=c.componentId,h=p===void 0?function(_,F){var U=typeof _!="string"?"sc":uu(_);jn[U]=(jn[U]||0)+1;var B="".concat(U,"-").concat(Sy(K0+U+jn[U]));return F?"".concat(F,"-").concat(B):B}(c.displayName,c.parentComponentId):p,z=c.displayName,V=z===void 0?function(_){return $n(_)?"styled.".concat(_):"Styled(".concat(Ny(_),")")}(e):z,x=c.displayName&&c.componentId?"".concat(uu(c.displayName),"-").concat(c.componentId):c.componentId||h,S=n&&i.attrs?i.attrs.concat(u).filter(Boolean):u,E=c.shouldForwardProp;if(n&&i.shouldForwardProp){var D=i.shouldForwardProp;if(c.shouldForwardProp){var Z=c.shouldForwardProp;E=function(_,F){return D(_,F)&&Z(_,F)}}else E=D}var M=new cw(a,x,n?i.componentStyle:void 0);function H(_,F){return function(U,B,J){var b=U.attrs,N=U.componentStyle,A=U.defaultProps,T=U.foldedComponentIds,q=U.styledComponentId,Y=U.target,j=J2.default.useContext(Tu),G=Zn(),t2=U.shouldForwardProp||G.shouldForwardProp,s2=Ly(B,j,A)||X0,i2=function(c3,d1,z1){for(var e4,K2=w1(w1({},d1),{className:void 0,theme:z1}),W1=0;W12&&M5.registerId(this.componentId+c),this.removeStyles(c,n),this.createStyles(c,a,n,i)},e}();var cb=function(){function e(){var c=this;this._emitSheetCSS=function(){var a=c.instance.toString(),n=Xn(),i=q7([n&&'nonce="'.concat(n,'"'),"".concat(k4,'="true"'),"".concat(G7,'="').concat(K0,'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(c.sealed)throw N4(2);return c._emitSheetCSS()},this.getStyleElement=function(){var a;if(c.sealed)throw N4(2);var n=((a={})[k4]="",a[G7]=K0,a.dangerouslySetInnerHTML={__html:c.instance.toString()},a),i=Xn();return i&&(n.nonce=i),[J2.default.createElement("style",w1({},n,{key:"sc-0-0"}))]},this.seal=function(){c.sealed=!0},this.instance=new M5({isServer:!0}),this.sealed=!1}return e.prototype.collectStyles=function(c){if(this.sealed)throw N4(2);return J2.default.createElement(Qy,{sheet:this.instance},c)},e.prototype.interleaveWithNodeStream=function(c){throw N4(3)},e}();var ab="__sc-".concat(k4,"__");var Y7="#a8a8a8",Z6=d2.div` + display: flex; + flex-direction: row; +`,tb=d2.div` + display: flex; + flex-direction: column; +`,K1=d2.button` + border: 1px solid white; + font-size: 10pt; + + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; + + + margin: 2px; + display: flex; + padding: 2px; + outline: none !important; + text-decoration: none; + + svg { + margin: 2pt; + width: 10pt; + height: 10pt; + } + &:hover { + background-color: rgba(158, 158, 158, 0.75); + } + &:visited { + text-decoration: none; + } + &:disabled { + color: gray; + border-color: gray; + cursor: not-allowed; + } + transition: background-color 250ms; +`,ib=d2.div` + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border: 2px solid black; + border-radius: 12px; +`,Z0=d2.div` + border: 2px solid black; + border-radius: 12px; + margin: 5px; + padding: 5px; + width: auto; +`,J6=d2.input` + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border: 2px solid black; + border-radius: 12px; + padding: 2px; +`;var Ha=T2(g1());var T3=T2(g1());var t9=T2(g1()),Du=T2(g1()),J0=class extends t9.default.Component{ref=(0,Du.createRef)();componentDidMount(){this.update()}componentDidUpdate(c){(c.canvas!==this.props.canvas||c.width!==this.props.width||c.height!==this.props.height)&&this.update()}update(){let c=this.ref.current,a=c.width=this.props.width||this.props.canvas.width,n=c.height=this.props.height||this.props.canvas.height;c.style.width=`${a}px`,c.style.height=`${n}px`,c.getContext("2d").drawImage(this.props.canvas,0,0,a,n)}render(){return t9.default.createElement("canvas",{ref:this.ref})}};var b2=T2(g1());var W2=T2(g1());var iv=T2(Vi()),tN=d2.div` + min-width: 250px; + min-height: 50px; + max-width: fit-content; + max-height: fit-content; + margin: 15px auto 15px auto; + padding: 10px; + pointer-events: all; + touch-action: auto; + + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; +`,Mi=d2.p` + white-space: pre-warp; +`,Ci=d2.div` + display: flex; +`,iN=d2.input` + margin: 2px; + padding: 5px; + outline: none !important; + + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; +`,k8=d2.button` + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; + + width: 100%; + border-radius: none; + margin: 2px; + padding: 2px; + outline: none !important; + &:hover { + background-color: rgba(158, 158, 158, 0.75); + } + transition: background-color 250ms; +`,P3=class e{static _ref;static active;static root;static alert(c,a){return new Promise(n=>{e.clear();let i=()=>{n(),this.active=void 0,this.clear()};this.active=i,e.renderContent(W2.default.createElement("div",null,W2.default.createElement("h5",null,a||`${location.host} says`),W2.default.createElement(Mi,null,c),W2.default.createElement(k8,{onClick:()=>i()},"OK")))})}static async confirm(c,a){return new Promise(n=>{e.clear();let i=s=>{n(s),this.active=void 0,this.clear()};this.active=()=>i(!1),e.renderContent(W2.default.createElement("div",null,W2.default.createElement("h5",null,a||`${location.host} says`),W2.default.createElement(Mi,null,c),W2.default.createElement(Ci,null,W2.default.createElement(k8,{onClick:()=>i(!0)},"OK"),W2.default.createElement(k8,{onClick:()=>i(!1)},"Cancel"))))})}static async prompt(c,a,n){return new Promise(i=>{e.clear();let s=u=>{i(u),this.active=void 0,this.clear()};this.active=()=>s("");let l=(0,W2.createRef)();e.renderContent(W2.default.createElement("div",null,W2.default.createElement("h5",null,n||`${location.host} says`),W2.default.createElement(Mi,null,c),W2.default.createElement(iN,{ref:l,type:"text"}),W2.default.createElement(Ci,null,W2.default.createElement(k8,{onClick:()=>s(l.current&&l.current.value)},"OK"),W2.default.createElement(k8,{onClick:()=>s(null)},"Cancel")))),l.current?(l.current.focus(),l.current.value=a||"",l.current.addEventListener("keyup",u=>{u.key.toLowerCase()==="enter"&&l.current&&s(l.current.value)})):console.error("Missing reference")})}static custom(c,a){return new Promise(n=>{e.clear();let i=()=>{this.active=void 0,n(),this.clear()};this.active=()=>i(),e.renderContent(W2.default.createElement("div",null,c,W2.default.createElement(Ci,null,a?a.map((s,l)=>W2.default.createElement(k8,{key:l,onClick:async u=>{let p=s.click(u),h;p instanceof Promise?h=await p:h=p,h||(this.active=void 0,this.clear(),n())}},s.content)):null)))})}static close(){this.clear()}static clear(){this.root&&(this.root.unmount(),this.root=void 0);let c=e.ref.style;c.pointerEvents="none",c.touchAction="none",c.backgroundColor="rgba(0, 0, 0, 0)",this.active&&this.active(),this.active=void 0}static renderContent(c){let a=e.createBase(c);this.root=(0,iv.createRoot)(e.ref),this.root.render(a);let n=e.ref.style;n.pointerEvents="all",n.touchAction="auto",n.backgroundColor="rgba(0, 0, 0, 0.5)"}static createBase(c){return W2.default.createElement(tN,null,c)}static get ref(){if(e._ref)return e._ref;let c=document.createElement("div");document.body.appendChild(c),e._ref=c;let a=c.style;return a.position="fixed",a.zIndex=`${Number.MAX_SAFE_INTEGER}`,a.width="100%",a.height="100%",a.pointerEvents="none",a.touchAction="none",a.backgroundColor="rgba(0, 0, 0, 0)",a.transition="background-color 1s",a.overflowY="auto",a.overflowX="hidden",c}};var lv=T2(ov());var va=["muraljson","json"];var sN=25,fv=d2.div` + width: 100%; + //max-width: fit-content; + display: flex; + flex-direction: row; + flex-wrap: wrap; +`,oN=d2.div` + display: flex; + flex-direction: column; + flex-wrap: wrap; + border: 1px solid white; + cursor: pointer; + margin: 2px; + padding: 2px; + text-align: center; + align-items: center; +`,uv=["FloydSteinberg","FalseFloydSteinberg","Stucki","Atkinson","Jarvis","Burkes","Sierra","TwoSierra","SierraLite"],lN=["Flat",...uv];async function pv(e,c,a){let n=await HN();if(n){if(n.type==="mural")return n.data;{let i=n.data,s=await uN(i,a);return new Promise((l,u)=>{e.setOverlayModify({pixels:s,muralObj:{name:i.alt,x:c.ux-E0(s)/2,y:c.uy-_0(s)/2},cb:(p,h,z,V)=>{V?l({name:p,pixels:s,x:h,y:z}):u(new Error("Canceled by user"))}})})}}}function fN(e){return new Promise(c=>{P3.custom(b2.default.createElement("div",null,b2.default.createElement("h4",null,"Dither results"),b2.default.createElement("div",null,"Pick a result that fits best in your situation"),b2.default.createElement(fv,null,e.map((a,n)=>b2.default.createElement("div",{key:n},b2.default.createElement(oN,{style:{flexDirection:"column"},onClick:()=>{P3.close(),c(a)}},hv(a.type),b2.default.createElement(Z0,null,b2.default.createElement(J0,{canvas:a.canvas}))))))),[{content:"Cancel",click:()=>{}}]).finally(()=>c(null))})}async function uN(e,c){let a=await pN(e),n=await mN(e,a,c),i;if(Array.isArray(n)?i=await fN(n):i=n,!i)throw new Error("User did not pick anything");let s=J8(i.canvas);return dv(s,c),t7(s,c.palette)}async function pN(e){let c=e.width,a=e.height,n="show-all",i=!1,s=!1;if(await new Promise((l,u)=>{P3.custom(b2.default.createElement("div",null,b2.default.createElement("h4",null,"Image import"),b2.default.createElement("div",null,b2.default.createElement("small",null,e.alt)),b2.default.createElement("div",{style:{whiteSpace:"pre-wrap"}},"You are importing image with size ",e.width,"x",e.height,".",` +`,"Do you want to preform any image manipulations?")),[{click:()=>{i=!1,l()},content:"Resize"},{click:()=>{i=!0,l()},content:"Import as it is"},{click:()=>{s=!0,l()},content:"Cancel"}]).then(()=>{u(new Error("User input has been interrupted"))})}),s)throw new Error("Operation canceled by user");if(i||await new Promise((l,u)=>{P3.custom(b2.default.createElement("div",null,b2.default.createElement("h4",null,"Image import"),b2.default.createElement("div",null,b2.default.createElement("small",null,e.alt)),b2.default.createElement("div",null,b2.default.createElement("strong",null,"Original size: ",e.width,"x",e.height)),b2.default.createElement(J6,{type:"number",min:1,onChange:p=>{P0(p,h=>{c=h})}}),"x",b2.default.createElement(J6,{type:"number",min:1,onChange:p=>{P0(p,h=>{a=h})}})),[{content:"Confirm",click:()=>{l()}},{content:"Cancel",click:()=>{s=!0,l()}}]).then(()=>u(new Error("User input has been interrupted")))}),s)throw new Error("Operation canceled by user");if(await new Promise((l,u)=>{P3.custom(b2.default.createElement("div",null,b2.default.createElement("h4",null,"Dither Settings"),b2.default.createElement("div",null,"Pickup dither algorithm"),b2.default.createElement(fv,null,lN.map((p,h)=>b2.default.createElement(K1,{key:h,onClick:()=>{n=p,P3.close(),l()}},hv(p))))),[{content:"Show all",click:()=>{n="show-all",l()}},{content:"Cancel",click:()=>{s=!0,l()}}]).then(()=>u(new Error("User input has been interrupted")))}),s)throw new Error("Operation canceled by user");return{height:a,width:c,noShrinking:i,quantizerSetting:n}}async function mN(e,c,a){c.noShrinking||(e=await Zr(e,c.width,c.height));let n=en(e);return c.quantizerSetting==="show-all"?vN(n,a):da(n,c.quantizerSetting,a)}function mv(e,c){let a=new lv.default(hN(c));return a.sample(e),a}function hN(e){return{palette:e.palette.map(c=>[c.r,c.g,c.b]),minHueCols:0,dithSerp:!1}}function vN(e,c){let a=[da(e,"Flat",c)],n=mv(e,c);for(let i of uv){let s=vv(e,n,i),l=da(s,"Flat",c);l.type=i,a.push(l)}return a}function da(e,c,a){if(c==="Flat"){let n=J8(e);dv(n,a);let i=zN(n),s=t7(n,a.palette);return{type:"Flat",canvas:i,indices:s}}else{let n=mv(e,a),i=vv(e,n,c),s=da(i,"Flat",a);return s.type=c,s}}function hv(e){let c=e.split(""),a="";for(let n=0;nsN&&(s.data[u+0]=l[u+0]??0,s.data[u+1]=l[u+1]??0,s.data[u+2]=l[u+2]??0,s.data[u+3]=255);return i.putImageData(s,0,0),n}function dv(e,c){for(let a=0;a{let c=this.props.mural.ref.width,a=this.props.mural.ref.height,n=c,i=a;c>a?c>this.MAX_SIZE&&(i=this.MAX_SIZE*(a/c),n=this.MAX_SIZE):a>this.MAX_SIZE&&(n=this.MAX_SIZE*(c/a),i=this.MAX_SIZE),this.setState({height:i,width:n})};renderInfoLine(c,a){return T3.default.createElement(MN,null,T3.default.createElement(VN,null,c,":"),T3.default.createElement("span",null," ",a))}btn(c,a,n,i){return T3.default.createElement(K1,{style:{borderColor:i?Y7:""},onClick:()=>n()},c," ",T3.default.createElement(l3,{icon:a})," ")}get s(){return this.props.store}onLoad=c=>{let a=c.target;"tagName"in a&&(["button","svg","path"].includes(a.tagName.toLowerCase())||this.s.select(this.props.selected?void 0:this.props.mural))};onModify=async()=>{let c=this.props.mural;this.props.store.setOverlayModify({pixels:this.props.mural.pixels,cb:(a,n,i,s)=>{s&&(c.name=a,c.x=n,c.y=i,this.props.store.updateMural(c))},muralObj:{name:this.props.mural.name,x:this.props.mural.x,y:this.props.mural.y}})};onExport=()=>{let c={name:this.props.mural.name,x:this.props.mural.x,y:this.props.mural.y,pixels:this.props.mural.pixels},a=new Blob([JSON.stringify(c)],{type:"application/json;charset=utf-8"});(0,Hv.default)(a,`${c.name}.${va[0]}`)};onDelete=()=>{this.s.remove(this.props.mural)};onEnter=()=>{this.props.store.addPhantomOverlay(this.props.mural)};onLeave=()=>{this.props.store.removePhantomOverlay()};onGoto=()=>{let c=W6(this.props.mural),a=U6(this.props.mural),n=this.props.mural.x+Math.round(c/2),i=this.props.mural.y+Math.round(a/2),s=`${origin}/@${n},${i},${this.props.cords.uScale}`;location.href=s};onPreview=()=>{this.props.store.hasOverlay(this.props.mural)?this.props.store.removeOverlay(this.props.mural):this.props.store.addOverlay(this.props.mural)};render(){return T3.default.createElement(Z0,{onClick:this.onLoad,style:{border:this.props.selected?"3px solid black":"3px dotted black",cursor:"pointer"},onMouseEnter:this.onEnter,onMouseLeave:this.onLeave},T3.default.createElement(Z6,null,T3.default.createElement(J0,{canvas:this.props.mural.ref,height:this.state.height,width:this.state.width}),T3.default.createElement(gN,{style:{flex:"1"}},this.renderInfoLine("Name",this.props.mural.name),this.renderInfoLine("PixelCount",nl(this.props.mural.pixelCount)),this.renderInfoLine("x",this.props.mural.x.toString()),this.renderInfoLine("y",this.props.mural.y.toString()),this.renderInfoLine("size",`${W6(this.props.mural)}x${U6(this.props.mural)}`))),T3.default.createElement(Z6,null,this.btn("Preview",gl,this.onPreview,this.props.store.hasOverlay(this.props.mural)),this.btn("Modify",zl,this.onModify),this.btn("Export",xl,this.onExport),this.btn("Delete",Ml,this.onDelete),this.btn("Goto",Vl,this.onGoto)))}};var LN=d2.div` + overflow: auto; + max-height: 250pt; + min-width: 200pt; + border-radius: 12px; + &::-webkit-scrollbar { + width: 7px; + height: 7px; + } + &::-webkit-scrollbar-corner { + background: transparent; + } + &::-webkit-scrollbar-track { + background: transparent; + border: 1px solid black; + border-radius: 12px; + } + &::-webkit-scrollbar-thumb { + background-color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid transparent; + } +`,ga=class extends Ha.default.Component{constructor(c){super(c),this.state={murals:[]}}componentDidMount(){this.props.store.on(7,this.update),this.update()}componentWillUnmount(){this.props.store.off(7,this.update)}update=()=>{this.setState({murals:this.props.store.murals,selected:this.props.store.selected})};render(){return Ha.default.createElement(LN,null," ",this.state.murals.map((c,a)=>Ha.default.createElement(za,{key:a,mural:c,cords:this.props.cords,store:this.props.store,selected:c===this.state.selected?.m})))}};var xN=d2.div` + +`,yN=d2.div` + margin: 2px 4px; +`,wN=d2.input` + &[type="range"] { + -webkit-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; + width: 100%; + } + + &[type="range"]:focus { + outline: none; + } + + &[type="range"]::-webkit-slider-runnable-track { + background-color: rgba(10, 10, 10); + border-radius: 0; + height: 4px; + border-radius: 12px; + } + + &[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + margin-top: -12px; + + background-color: black; + height: 25px; + width: 15px; + border-radius: 12px; + } + + &[type="range"]::-moz-range-track { + background-color: rgba(10, 10, 10); + border-radius: 0.5rem; + height: 0.5rem; + border-radius: 12px; + } + + &[type="range"]::-moz-range-thumb { + border: none; + border-radius: 0; + background-color: rgba(10, 10, 10); + height: 2rem; + width: 1rem; + border-radius: 12px; + } + +`,Va=class extends Z3.default.Component{import=async()=>{try{let c=await pv(this.props.store,this.props.cords,this.props.palette);c&&this.props.store.add(c)}catch(c){console.error(c),P3.alert(c.name)}};inputElement=c=>{let a=parseInt(c.target.value);this.props.onOpacityChange(a)};render(){return Z3.default.createElement(xN,null,Z3.default.createElement(Z6,null,Z3.default.createElement(K1,{onClick:this.import},Z3.default.createElement(l3,{icon:yl})," Import"),Z3.default.createElement(wN,{type:"range",min:0,max:100,value:this.props.opacity,onInput:this.inputElement}),Z3.default.createElement(yN,null,this.props.opacity,"%"),Z3.default.createElement(K1,{onClick:()=>this.props.onCollapsedChanged(!this.props.collapsed)},Z3.default.createElement(l3,{icon:this.props.collapsed?Ll:Hl}))),this.props.collapsed?null:Z3.default.createElement(ga,{store:this.props.store,cords:this.props.cords}))}};var w6=T2(g1());var yi=T2(Q8()),SN=d2.div` + position: fixed; + padding-top: 20px; + padding: 5px; + z-index: 2; + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; +`,NN=d2.div` + border: 1px black dotted; + cursor: grab; + user-select: none; + border-radius: 12px; + padding: 4px; +`,v0=class extends w6.default.Component{ref=(0,w6.createRef)();dragRef=(0,w6.createRef)();moving;destroyed=!1;constructor(c){super(c),this.state={x:-window.innerWidth,y:-window.innerHeight,moving:!1}}componentDidMount(){window.addEventListener("mousemove",this.onMouseMove),window.addEventListener("mouseup",this.onMouseUp),window.addEventListener("resize",this.fixBounds),this.props.storage.getItem(this.storageKey).then(c=>{!this.destroyed&&c?this.setState({x:c.x,y:c.y}):this.setState({x:0,y:0}),this.fixBounds()})}componentWillUnmount(){window.removeEventListener("mousemove",this.onMouseMove),window.removeEventListener("mouseup",this.onMouseUp),window.removeEventListener("resize",this.fixBounds),this.destroyed=!1}onTouchMove=c=>{if(!this.moving)return;let a=c.touches[c.touches.length-1],n=this.dragRef.current,{x:i,y:s,width:l,height:u}=n.getBoundingClientRect(),p=(a.clientX-i)/l*n.offsetWidth,h=(a.clientY-s)/u*n.offsetHeight;this.setMoving(a.clientX,a.clientY,p,h)};setMoving=(c,a,n,i)=>{this.moving={x:c,y:a,xOff:n,yOff:i}};onMouseMove=c=>{if(!this.moving||!(c instanceof MouseEvent)||!c.isTrusted||c.ctrlKey||c.altKey||c.metaKey)return;let{clientX:a,clientY:n}=c;this.handleMoveLogic(a,n)};onMouseUp=()=>{this.moving=void 0,this.setState({moving:!1})};fixBounds=()=>{};handleMoveLogic(c,a){let n=this.dragRef.current?.getBoundingClientRect();if(n&&this.moving){let i=(0,yi.clamp)(c,this.moving.xOff,window.innerWidth-n.width+this.moving.xOff),s=(0,yi.clamp)(a,this.moving.yOff,window.innerHeight-n.height+this.moving.yOff),l=i-this.moving.xOff,u=s-this.moving.yOff,p={x:l,y:u};this.props.storage.setItem(this.storageKey,p),this.setState(p)}}get storageKey(){return`__storage__${this.props.storageKey}`}render(){return w6.default.createElement(SN,{ref:this.ref,style:{left:`${this.state.x}px`,top:`${this.state.y}px`}},w6.default.createElement(NN,{ref:this.dragRef,style:{cursor:this.state.moving?"grabbing":""},onMouseDown:c=>{this.moving={x:c.clientX,y:c.clientY,xOff:c.nativeEvent.offsetX,yOff:c.nativeEvent.offsetY},this.setState({moving:!0})}}," ",w6.default.createElement("h2",null,this.props.title)," "),this.props.children)}};var _1=T2(g1());var Ca=T2(Q8()),bN=d2.div` + display: flex; + flex-direction: row; +`,gv=d2.div` + width: 25px; + height: 25px; + padding: 2px; + margin: 2px; + border: 1px solid black; + text-align: center; + font-weight: bolder; +`,AN=d2.span` + width: 25px; + text-align: center; + margin: auto; +`,_N=d2.canvas` + border-radius: 12px; + border: 2px solid black; +`,Ma=class extends _1.default.Component{ref=_1.default.createRef();cache=new Map;transparentGrid=["#c5c5c540","#8d8d8d40"];highlighColor="#00000040";lastColor=-1;storageKey="_minimap_settings";destroyed=!1;constructor(c){super(c),this.state={size:16,color:-1,colorAssistant:!1}}componentDidUpdate(c,a){c.selected.m.ref!==this.props.selected.m.ref?(this.cache.clear(),this.draw()):a.size!==this.state.size&&this.draw()}click=(0,Ca.debounce)(c=>{c>=0&&c{c&&!this.destroyed&&this.setState({colorAssistant:c.colorAssistant,size:c.size})}),this.draw()}componentWillUnmount(){this.destroyed=!0,this.props.cords.off(0,this.update),this.props.cords.off(0,this.onCords)}saveSettings(){this.props.storage.setItem(this.storageKey,{colorAssistant:this.state.colorAssistant,size:this.state.size})}onCords=(c,a)=>{let n=this.props.store;if(n.selected&&n.selected.m.xc&&n.selected.h+n.selected.m.y>a){let i=c-n.selected.m.x,s=a-n.selected.m.y,l=n.selected.m.pixels[s][i];this.lastColor!==l&&(this.lastColor=l,this.click(l))}};drawGrid(c,a,n,i){for(let s=0;s{let c=this.props.selected.m,a=this.props.cords.x-c.x,n=this.props.cords.y-c.y;if(c.pixels[n]!==void 0&&c.pixels[n][a]!==void 0){let i=c.pixels[n][a];this.setState({color:i}),this.draw();return}this.setState({color:-1}),this.draw()};getCachedImage(c){let a=this.cache.get(c);if(a)return a;let n=this.props.selected,i=e5();return cn(i,n.m.pixels,this.props.palette.hex,c),this.cache.set(c,i),i}draw=()=>{let c=this.ref.current,a=c.getContext("2d"),n=c.width=200,i=c.height=200,s=n/2,l=i/2;a.clearRect(0,0,n,i);let u=this.state.size;this.drawGrid(a,u*4,n,i);let p=1*u/2,h=(this.props.selected.m.x-this.props.cords.x)*u+Math.ceil(s-p),z=(this.props.selected.m.y-this.props.cords.y)*u+Math.ceil(l-p),V=this.getCachedImage(u);if(a.drawImage(V,h,z,V.width,V.height),u!=1){a.fillStyle=this.highlighColor;let x=i/2,S=i/2;a.fillRect(0,0,n,x-p),a.fillRect(0,x+p,n,x-p),a.fillRect(0,x-p,S-p,p*2),a.fillRect(S+p,x-p,S-p,p*2)}};up=()=>{this.setState({size:this.clamp(this.state.size*2)})};down=()=>{this.setState({size:this.clamp(this.state.size/2)})};setSize(c){this.setState({size:c})}clamp(c){return(0,Ca.clamp)(c,1,32)}renderColor(){return this.state.color!==-1?_1.default.createElement(gv,{style:{backgroundColor:this.props.palette.hex[this.state.color]}}):_1.default.createElement(gv,null," / ")}toggleColorAssistant=()=>{this.setState({colorAssistant:!this.state.colorAssistant})};render(){return _1.default.createElement("div",null,_1.default.createElement(bN,null,_1.default.createElement(K1,{onClick:this.up},_1.default.createElement(l3,{icon:wl})),_1.default.createElement(AN,null,this.state.size),_1.default.createElement(K1,{onClick:this.down},_1.default.createElement(l3,{icon:Sl})),_1.default.createElement("span",{style:{flex:1}},_1.default.createElement(K1,{title:"Color assistant",style:{borderColor:this.state.colorAssistant?Y7:""},onClick:()=>this.toggleColorAssistant()},"Assist",_1.default.createElement(l3,{icon:Cl})," ")),this.renderColor()),_1.default.createElement(_N,{ref:this.ref}))}};var S6=T2(g1());var E1=T2(g1());var La=class extends E1.default.Component{render(){return E1.default.createElement(Z0,null,E1.default.createElement("div",null,E1.default.createElement("span",null,"Name")," ",E1.default.createElement(J6,{type:"text",value:this.props.name,onChange:c=>this.props.onName(c.target.value)})),E1.default.createElement("div",null,E1.default.createElement("span",null,"X")," ",E1.default.createElement(J6,{type:"number",value:this.props.x,onChange:c=>P0(c,this.props.onX)})),E1.default.createElement("div",null,E1.default.createElement("span",null,"Y")," ",E1.default.createElement(J6,{type:"number",value:this.props.y,onChange:c=>P0(c,this.props.onY)})),E1.default.createElement(Z6,null,E1.default.createElement(K1,{onClick:()=>this.props.onConfirm(),style:{flex:1}},"Confirm"),E1.default.createElement(K1,{onClick:()=>this.props.onCancel(),style:{flex:1}},"Cancel")),E1.default.createElement("small",null,"Overlay does not work on scale -1. To fix that zoom in."))}};var EN=d2.canvas` + position: fixed; + z-index: 1; + pointer-events: none; +`,b8=class extends S6.default.Component{ref=S6.default.createRef();_refImage;constructor(c){super(c),this.state={x:0,y:0,name:""}}componentDidMount(){this.draw(),this.props.cords.on(1,this.draw),window.addEventListener("mousemove",this.draw),this.props.muralObj&&this.setState({name:this.props.muralObj.name||"",x:this.props.muralObj.x??0,y:this.props.muralObj.y??0})}componentWillUnmount(){this.props.cords.off(1,this.draw),window.removeEventListener("mousemove",this.draw)}componentDidUpdate(c,a){c.mural!==this.props.mural&&(this._refImage=void 0,this.setState({x:0,y:0})),(a.x!==this.state.x||a.y!==this.state.y)&&this.draw()}isPixels(c){return Array.isArray(c)}get pixels(){return this.isPixels(this.props.mural)?this.props.mural:this.props.mural.pixels}get x(){return this.isPixels(this.props.mural)?this.state.x:this.props.mural.x}get y(){return this.isPixels(this.props.mural)?this.state.y:this.props.mural.y}get refImg(){return!Array.isArray(this.props.mural)&&"ref"in this.props.mural?this.props.mural.ref:this._refImage?this._refImage:(this._refImage=c5(this.pixels,this.props.palette.hex).canvas,this._refImage)}draw=()=>{let c=this.ref.current,a=Math.pow(2,this.props.cords.uScale),n=this.props.cords.gridToScreen(this.x,this.y);if(!n){c.getContext("2d").clearRect(0,0,c.width,c.height);return}let{x:i,y:s}=n,l=E0(this.pixels)*a,u=_0(this.pixels)*a;(l!==c.width||u!==c.height)&&(c.width=l,c.height=u,c.style.width=`${l}px`,c.style.height=`${u}px`);let p=c.getContext("2d");p.imageSmoothingEnabled=!1,c.style.left=`${i}px`,c.style.top=`${s}px`,p.drawImage(this.refImg,0,0,c.width,c.height)};get style(){return{left:this.state.x,top:this.state.y,opacity:this.props.opacity/100}}renderModifyWindow(){if(this.props.onChange){let c={...this.state};return S6.default.createElement(v0,{storage:this.props.storage,storageKey:"overlay-set",title:"Position editor"},S6.default.createElement(La,{name:this.state.name,x:this.state.x,y:this.state.y,onX:a=>this.setState({x:a}),onY:a=>this.setState({y:a}),onName:a=>this.setState({name:a}),onCancel:()=>{this.setState(c),this.props.onChange(c.name,c.x,c.y,!1)},onConfirm:()=>{this.props.onChange(this.state.name,this.state.x,this.state.y,!0)}}))}return null}render(){return S6.default.createElement(S6.default.Fragment,null,S6.default.createElement(EN,{ref:this.ref,style:this.style}),this.renderModifyWindow())}};var Vv=T2(Q8()),xa=class extends J3.default.Component{STORAGE_KEY="__OPACITY_SETTINGS";destroyed=!1;constructor(c){super(c),this.state={overlays:[],phantomOverlay:-1,opacity:50,collapsed:!1}}componentDidMount(){this.props.store.on(7,this.update),this.update(),console.error(this.STORAGE_KEY),this.props.storage.getItem(this.STORAGE_KEY).then(c=>{console.error(c,this.STORAGE_KEY,c!==null,!this.destroyed),c!==null&&!this.destroyed&&(console.error("loadingnn????????",c),this.setState(c))})}componentWillUnmount(){this.destroyed=!0,this.actualSave({collapsed:this.state.collapsed,opacity:this.state.opacity})}actualSave(c){return this.props.storage.setItem(this.STORAGE_KEY,c)}save=(0,Vv.debounce)(c=>{this.actualSave({collapsed:this.state.collapsed,opacity:c})},1e3);opacityChange=c=>{this.setState({opacity:c}),this.save(c)};update=()=>{this.setState({selected:this.props.store.selected,overlays:this.props.store.overlays,overlayModify:this.props.store.overlayModify})};renderMap(){return this.state.selected?J3.default.createElement(v0,{title:"Minimap",storage:this.props.storage,storageKey:"minimap"},J3.default.createElement(Ma,{cords:this.props.cords,palette:this.props.palette,selected:this.state.selected,storage:this.props.storage,store:this.props.store})):null}render(){return J3.default.createElement(J3.default.Fragment,null,J3.default.createElement(v0,{title:"Overlay",storage:this.props.storage,storageKey:"main"},J3.default.createElement(Va,{onOpacityChange:this.opacityChange,cords:this.props.cords,store:this.props.store,storage:this.props.storage,palette:this.props.palette,opacity:this.state.opacity,collapsed:this.state.collapsed,onCollapsedChanged:c=>{this.setState({collapsed:c}),this.actualSave({opacity:this.state.opacity,collapsed:c})}})),this.renderMap(),this.state.overlays.map((c,a)=>J3.default.createElement(b8,{key:a,storage:this.props.storage,opacity:this.state.opacity,cords:this.props.cords,palette:this.props.palette,mural:this.props.store.murals[c]})),this.props.store.murals[this.state.phantomOverlay]?J3.default.createElement(b8,{storage:this.props.storage,opacity:50,cords:this.props.cords,palette:this.props.palette,mural:this.props.store.murals[this.state.phantomOverlay]}):null,this.state.overlayModify?J3.default.createElement(b8,{muralObj:this.state.overlayModify.muralObj,opacity:this.state.opacity,storage:this.props.storage,cords:this.props.cords,palette:this.props.palette,mural:this.props.store.overlayModify.pixels,onChange:(c,a,n,i)=>{this.state.overlayModify.cb(c,a,n,i)}}):null)}};var Cv=T2(Vi());function Lv(e,c,a,n){return PN(Mv.default.createElement(xa,{cords:a,store:e,storage:c,palette:n}))}function PN(e){let c=document.createElement("div");return(0,Cv.createRoot)(c).render(e),document.body.appendChild(c),()=>{c.parentElement?.removeChild(c)}}var ya=class{constructor(c){this.chrome=c}getItem(c){if(this.chrome)return new Promise(a=>{chrome.storage.local.get(c,n=>{n&&n[c]?a(JSON.parse(n[c])):a(null)})});{let a=localStorage.getItem(c);return Promise.resolve(a&&JSON.parse(a))}}async setItem(c,a){return this.chrome?new Promise(n=>{chrome.storage.local.set({[c]:JSON.stringify(a)},n)}):(localStorage.setItem(c,JSON.stringify(a)),Promise.resolve())}deleteItem(c){return this.chrome?new Promise(a=>{chrome.storage.local.remove(c,a)}):(localStorage.removeItem(c),Promise.resolve())}};async function xv(){let e=new s7;for(;!e.init();)await r7();let c=new ya(!1),a=new u7(c,e);await a.load();let n=new i7;await n.init(),Lv(a,c,n,e),console.log("%cOverlay by 0xa663 loaded","color: red; font-size: 20px; font-weight: bold; text-shadow: 2px 2px 4px #000000;")}document.readyState==="complete"?xv():window.addEventListener("load",xv);})(); +/*! Bundled license information: + +lodash/lodash.js: + (** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) + +react/cjs/react.production.min.js: + (** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +scheduler/cjs/scheduler.production.min.js: + (** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom.production.min.js: + (** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/manifest.template.json b/manifest.template.json new file mode 100755 index 0000000..8e45a75 --- /dev/null +++ b/manifest.template.json @@ -0,0 +1,18 @@ +{ + "manifest_version": 3, + "name": "Pixelcanvas - Overlay", + + "icons": { + "48": "assets/images/icon_48.png", + "128": "assets/images/icon_128.png" + }, + "web_accessible_resources": [], + "permissions": [ + "storage" + ], + "content_scripts": [{ + "matches": ["https://pixelcanvas.io/**", "http://pixelcanvas.io/**"], + "js": ["assets/scripts/content.js"], + "run_at": "document_start" + }] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6bf12bf --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6405 @@ +{ + "name": "pixelcanvas-overlay", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "pixelcanvas-overlay", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.5.1", + "@fortawesome/free-solid-svg-icons": "^6.5.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@types/chrome": "0.0.260", + "@types/file-saver": "^2.0.7", + "@types/lodash": "^4.14.202", + "chokidar": "^3.6.0", + "copy-dir": "^1.3.0", + "esbuild": "^0.20.0", + "file-saver": "^2.0.5", + "lodash": "^4.17.21", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "rgbquant": "^1.1.2", + "styled-components": "^6.1.8", + "typescript": "^5.3.3" + }, + "devDependencies": { + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "@typescript-eslint/eslint-plugin": "^7.0.1", + "@typescript-eslint/parser": "^7.0.1", + "eslint": "^8.56.0", + "eslint-plugin-react": "^7.33.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz", + "integrity": "sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz", + "integrity": "sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.1.tgz", + "integrity": "sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.1.tgz", + "integrity": "sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/chrome": { + "version": "0.0.260", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.260.tgz", + "integrity": "sha512-lX6QpgfsZRTDpNcCJ+3vzfFnFXq9bScFRTlfhbK5oecSAjamsno+ejFTCbNtc5O/TPnVK9Tja/PyecvWQe0F2w==", + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, + "node_modules/@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==" + }, + "node_modules/@types/filesystem": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.35.tgz", + "integrity": "sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==", + "dependencies": { + "@types/filewriter": "*" + } + }, + "node_modules/@types/filewriter": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", + "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==" + }, + "node_modules/@types/har-format": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", + "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.55", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz", + "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", + "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "dev": true + }, + "node_modules/@types/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.1.tgz", + "integrity": "sha512-OLvgeBv3vXlnnJGIAgCLYKjgMEU+wBGj07MQ/nxAaON+3mLzX7mJbhRYrVGiVvFiXtwFlkcBa/TtmglHy0UbzQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.0.1", + "@typescript-eslint/type-utils": "7.0.1", + "@typescript-eslint/utils": "7.0.1", + "@typescript-eslint/visitor-keys": "7.0.1", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.1.tgz", + "integrity": "sha512-8GcRRZNzaHxKzBPU3tKtFNing571/GwPBeCvmAUw0yBtfE2XVd0zFKJIMSWkHJcPQi0ekxjIts6L/rrZq5cxGQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.0.1", + "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/typescript-estree": "7.0.1", + "@typescript-eslint/visitor-keys": "7.0.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.1.tgz", + "integrity": "sha512-v7/T7As10g3bcWOOPAcbnMDuvctHzCFYCG/8R4bK4iYzdFqsZTbXGln0cZNVcwQcwewsYU2BJLay8j0/4zOk4w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/visitor-keys": "7.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.1.tgz", + "integrity": "sha512-YtT9UcstTG5Yqy4xtLiClm1ZpM/pWVGFnkAa90UfdkkZsR1eP2mR/1jbHeYp8Ay1l1JHPyGvoUYR6o3On5Nhmw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.0.1", + "@typescript-eslint/utils": "7.0.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.1.tgz", + "integrity": "sha512-uJDfmirz4FHib6ENju/7cz9SdMSkeVvJDK3VcMFvf/hAShg8C74FW+06MaQPODHfDJp/z/zHfgawIJRjlu0RLg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.1.tgz", + "integrity": "sha512-SO9wHb6ph0/FN5OJxH4MiPscGah5wjOd0RRpaLvuBv9g8565Fgu0uMySFEPqwPHiQU90yzJ2FjRYKGrAhS1xig==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/visitor-keys": "7.0.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.1.tgz", + "integrity": "sha512-oe4his30JgPbnv+9Vef1h48jm0S6ft4mNwi9wj7bX10joGn07QRfqIqFHoMiajrtoU88cIhXf8ahwgrcbNLgPA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.0.1", + "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/typescript-estree": "7.0.1", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.1.tgz", + "integrity": "sha512-hwAgrOyk++RTXrP4KzCg7zB2U0xt7RUU0ZdMSCsqF3eKUwkdXUMyTb0qdCuji7VIbcpG62kKTU9M1J1c9UpFBw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.0.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/es-abstract": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.1", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.4", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.0", + "@esbuild/android-arm": "0.20.0", + "@esbuild/android-arm64": "0.20.0", + "@esbuild/android-x64": "0.20.0", + "@esbuild/darwin-arm64": "0.20.0", + "@esbuild/darwin-x64": "0.20.0", + "@esbuild/freebsd-arm64": "0.20.0", + "@esbuild/freebsd-x64": "0.20.0", + "@esbuild/linux-arm": "0.20.0", + "@esbuild/linux-arm64": "0.20.0", + "@esbuild/linux-ia32": "0.20.0", + "@esbuild/linux-loong64": "0.20.0", + "@esbuild/linux-mips64el": "0.20.0", + "@esbuild/linux-ppc64": "0.20.0", + "@esbuild/linux-riscv64": "0.20.0", + "@esbuild/linux-s390x": "0.20.0", + "@esbuild/linux-x64": "0.20.0", + "@esbuild/netbsd-x64": "0.20.0", + "@esbuild/openbsd-x64": "0.20.0", + "@esbuild/sunos-x64": "0.20.0", + "@esbuild/win32-arm64": "0.20.0", + "@esbuild/win32-ia32": "0.20.0", + "@esbuild/win32-x64": "0.20.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgbquant": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rgbquant/-/rgbquant-1.1.2.tgz", + "integrity": "sha512-AGuKVeUUFW5rhm4Eu/7SXQRSxs3MoXIGKP4i/5Rok89QBrOu9+ytWezuxHhCsHT9Y6z+sGPKL9PKo6X8tZNUaw==" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-components": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.8.tgz", + "integrity": "sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.1", + "@emotion/unitless": "0.8.0", + "@types/stylis": "4.2.0", + "css-to-react-native": "3.2.0", + "csstype": "3.1.2", + "postcss": "8.4.31", + "shallowequal": "1.1.0", + "stylis": "4.3.1", + "tslib": "2.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/stylis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", + "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", + "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "@esbuild/aix-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true + }, + "@fortawesome/fontawesome-common-types": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz", + "integrity": "sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==" + }, + "@fortawesome/fontawesome-free": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz", + "integrity": "sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.1.tgz", + "integrity": "sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==", + "peer": true, + "requires": { + "@fortawesome/fontawesome-common-types": "6.5.1" + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.1.tgz", + "integrity": "sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==", + "requires": { + "@fortawesome/fontawesome-common-types": "6.5.1" + } + }, + "@fortawesome/react-fontawesome": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "requires": { + "prop-types": "^15.8.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/chrome": { + "version": "0.0.260", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.260.tgz", + "integrity": "sha512-lX6QpgfsZRTDpNcCJ+3vzfFnFXq9bScFRTlfhbK5oecSAjamsno+ejFTCbNtc5O/TPnVK9Tja/PyecvWQe0F2w==", + "requires": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, + "@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==" + }, + "@types/filesystem": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.35.tgz", + "integrity": "sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==", + "requires": { + "@types/filewriter": "*" + } + }, + "@types/filewriter": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", + "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==" + }, + "@types/har-format": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", + "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==" + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "dev": true + }, + "@types/react": { + "version": "18.2.55", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz", + "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", + "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "@types/semver": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "dev": true + }, + "@types/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.1.tgz", + "integrity": "sha512-OLvgeBv3vXlnnJGIAgCLYKjgMEU+wBGj07MQ/nxAaON+3mLzX7mJbhRYrVGiVvFiXtwFlkcBa/TtmglHy0UbzQ==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.0.1", + "@typescript-eslint/type-utils": "7.0.1", + "@typescript-eslint/utils": "7.0.1", + "@typescript-eslint/visitor-keys": "7.0.1", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.1.tgz", + "integrity": "sha512-8GcRRZNzaHxKzBPU3tKtFNing571/GwPBeCvmAUw0yBtfE2XVd0zFKJIMSWkHJcPQi0ekxjIts6L/rrZq5cxGQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "7.0.1", + "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/typescript-estree": "7.0.1", + "@typescript-eslint/visitor-keys": "7.0.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.1.tgz", + "integrity": "sha512-v7/T7As10g3bcWOOPAcbnMDuvctHzCFYCG/8R4bK4iYzdFqsZTbXGln0cZNVcwQcwewsYU2BJLay8j0/4zOk4w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/visitor-keys": "7.0.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.1.tgz", + "integrity": "sha512-YtT9UcstTG5Yqy4xtLiClm1ZpM/pWVGFnkAa90UfdkkZsR1eP2mR/1jbHeYp8Ay1l1JHPyGvoUYR6o3On5Nhmw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.0.1", + "@typescript-eslint/utils": "7.0.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.1.tgz", + "integrity": "sha512-uJDfmirz4FHib6ENju/7cz9SdMSkeVvJDK3VcMFvf/hAShg8C74FW+06MaQPODHfDJp/z/zHfgawIJRjlu0RLg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.1.tgz", + "integrity": "sha512-SO9wHb6ph0/FN5OJxH4MiPscGah5wjOd0RRpaLvuBv9g8565Fgu0uMySFEPqwPHiQU90yzJ2FjRYKGrAhS1xig==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/visitor-keys": "7.0.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.1.tgz", + "integrity": "sha512-oe4his30JgPbnv+9Vef1h48jm0S6ft4mNwi9wj7bX10joGn07QRfqIqFHoMiajrtoU88cIhXf8ahwgrcbNLgPA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.0.1", + "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/typescript-estree": "7.0.1", + "semver": "^7.5.4" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.1.tgz", + "integrity": "sha512-hwAgrOyk++RTXrP4KzCg7zB2U0xt7RUU0ZdMSCsqF3eKUwkdXUMyTb0qdCuji7VIbcpG62kKTU9M1J1c9UpFBw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.0.1", + "eslint-visitor-keys": "^3.4.1" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + } + }, + "array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + } + }, + "asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" + }, + "css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "es-abstract": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.1", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.14" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-iterator-helpers": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", + "dev": true, + "requires": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.4", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.0" + } + }, + "es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", + "requires": { + "@esbuild/aix-ppc64": "0.20.0", + "@esbuild/android-arm": "0.20.0", + "@esbuild/android-arm64": "0.20.0", + "@esbuild/android-x64": "0.20.0", + "@esbuild/darwin-arm64": "0.20.0", + "@esbuild/darwin-x64": "0.20.0", + "@esbuild/freebsd-arm64": "0.20.0", + "@esbuild/freebsd-x64": "0.20.0", + "@esbuild/linux-arm": "0.20.0", + "@esbuild/linux-arm64": "0.20.0", + "@esbuild/linux-ia32": "0.20.0", + "@esbuild/linux-loong64": "0.20.0", + "@esbuild/linux-mips64el": "0.20.0", + "@esbuild/linux-ppc64": "0.20.0", + "@esbuild/linux-riscv64": "0.20.0", + "@esbuild/linux-s390x": "0.20.0", + "@esbuild/linux-x64": "0.20.0", + "@esbuild/netbsd-x64": "0.20.0", + "@esbuild/openbsd-x64": "0.20.0", + "@esbuild/sunos-x64": "0.20.0", + "@esbuild/win32-arm64": "0.20.0", + "@esbuild/win32-ia32": "0.20.0", + "@esbuild/win32-x64": "0.20.0" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + } + }, + "eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + } + }, + "is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.14" + } + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "requires": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "reflect.getprototypeof": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + } + }, + "regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + } + }, + "resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rgbquant": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rgbquant/-/rgbquant-1.1.2.tgz", + "integrity": "sha512-AGuKVeUUFW5rhm4Eu/7SXQRSxs3MoXIGKP4i/5Rok89QBrOu9+ytWezuxHhCsHT9Y6z+sGPKL9PKo6X8tZNUaw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, + "safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dev": true, + "requires": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "styled-components": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.8.tgz", + "integrity": "sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==", + "requires": { + "@emotion/is-prop-valid": "1.2.1", + "@emotion/unitless": "0.8.0", + "@types/stylis": "4.2.0", + "css-to-react-native": "3.2.0", + "csstype": "3.1.2", + "postcss": "8.4.31", + "shallowequal": "1.1.0", + "stylis": "4.3.1", + "tslib": "2.5.0" + }, + "dependencies": { + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + } + } + }, + "stylis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", + "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-api-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "dev": true, + "requires": {} + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typed-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", + "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1d02b44 --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "pixelcanvas-overlay", + "version": "1.0.0", + "description": "Pixel canvas overlay", + "main": "index.js", + "scripts": { + "build": "node ./build.js", + "lint": "eslint -c .eslintrc.js --ext .ts ./src/*/**", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "0xa663", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.5.1", + "@fortawesome/free-solid-svg-icons": "^6.5.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@types/chrome": "0.0.260", + "@types/file-saver": "^2.0.7", + "@types/lodash": "^4.14.202", + "chokidar": "^3.6.0", + "copy-dir": "^1.3.0", + "esbuild": "^0.20.0", + "file-saver": "^2.0.5", + "lodash": "^4.17.21", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "rgbquant": "^1.1.2", + "styled-components": "^6.1.8", + "typescript": "^5.3.3" + }, + "devDependencies": { + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "@typescript-eslint/eslint-plugin": "^7.0.1", + "@typescript-eslint/parser": "^7.0.1", + "eslint": "^8.56.0", + "eslint-plugin-react": "^7.33.2" + } +} diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..3318f34 --- /dev/null +++ b/readme.md @@ -0,0 +1,48 @@ +# Pixelcanvas.io Overlay Extension + +## Overview + +The Image Overlay Extension is a lightweight browser extension that allows users to easily overlay images on web pages. This extension enhances the browsing experience by providing a quick and convenient way to view images without leaving the current page. + +## Installation + +1. **Install it as extension:** + - Use extension tab to install overlay as extension + +2. **Userscript:** + - Use prebuild script to load overlay as script. + +## Usage + +1. **Import image:** + - Click on import button and configure settings + +2. **Enable minimap:** + - Minimap will track your house and display what pixels you need to place. + +3. **Preview:** + - Click preview to preview the image. + - User slider to control opacity. + +4. **Export:** + - Use export button to share your image with others. + +## Build it yourself +```bash + npm install + node build +``` + +## Known Issues + +- None for now? + +## Feedback and Support + +If you encounter any issues or have suggestions for improvement, please [submit an issue](https://github.com/0xa663/Pixelcanvas.io-overlay/issues) on our GitHub repository. + +## License + +This extension is released under the [MIT License](LICENSE). Feel free to fork and modify the code according to your needs. + +--- diff --git a/src/2DArray.ts b/src/2DArray.ts new file mode 100644 index 0000000..eac425d --- /dev/null +++ b/src/2DArray.ts @@ -0,0 +1,25 @@ +export class Array2D { + public array:V[] = []; + constructor(defaultValue: V, private width: number, height: number) { + this.array = new Array(width * height); + this.array.fill(defaultValue); + } + at(x: number, y: number){ + return y * this.width + x; + } + set(x: number, y: number, value: V) { + this.array[this.at(x, y)] = value; + } + get(x: number, y: number) { + return this.array[this.at(x, y)]; + } + static from(array: V[][], width: number, height: number) { + const arr = new Array2D(array[0][0]!, width, height); + for (let y = 0; y < array.length; y++) { + for (let x = 0; x < array[y].length; x++) { + arr.set(x, y, array[y][x]!); + } + } + return arr; + } +} diff --git a/src/EventEmitter.ts b/src/EventEmitter.ts new file mode 100644 index 0000000..0ce8cc5 --- /dev/null +++ b/src/EventEmitter.ts @@ -0,0 +1,50 @@ +import { pushUnique, removeItem } from "./utils"; + +export type Listener, R = void> = (...args: A) => R; +export type Key = number | string; +export class BasicEventEmitter = any[], R = void> { + private listeners = new Map[]>(); + + on(type: K, listener: Listener) { + const arr = this.listeners.get(type) || []; + pushUnique(arr, listener); + this.listeners.set(type, arr); + } + + off(type: K, listener: Listener) { + const arr = this.listeners.get(type) || []; + removeItem(arr, listener); + if (!arr.length) { + this.listeners.delete(type); + } + } + + emit(type: K, ...args: A) { + const listeners = this.listeners.get(type); + if (listeners) { + for (let i = 0; i < listeners.length; i++) { + try { + const listener = listeners[i]; + if (listener) { + listener(...args); + } + } catch (error) { + console.error(error); + } + } + } + } + + listenersCount(type: K) { + const arr = this.listeners.get(type); + return arr ? arr.length : 0; + } + + removeAllListeners() { + this.listeners.clear(); + } + + removeSpecificListeners(type: K) { + this.listeners.delete(type); + } +} diff --git a/src/UI/Fileinput.ts b/src/UI/Fileinput.ts new file mode 100644 index 0000000..4940cff --- /dev/null +++ b/src/UI/Fileinput.ts @@ -0,0 +1,45 @@ +export class FileInput { + private input = document.createElement("input"); + + constructor() { + this.input.type = "file"; + } + + allowMultiple(value: boolean) { + this.input.multiple = value; + } + setAcceptType(extensions?: string[]) { + if (extensions) { + this.input.accept = extensions.map(e => `.${e}`).join(", "); + } else { + this.input.accept = ""; + } + } + show() { + return new Promise((resolve, reject) => { + const subs: (keyof WindowEventMap)[] = ["mousemove", "touchend"]; + const onCancel = () => { + unCancel(); + reject(new Error("Not selected")); + }; + const unCancel = () => { + subs.forEach(s => window.removeEventListener(s, onCancel)); + }; + const frame = setTimeout(() => { + subs.forEach(s => window.addEventListener(s, () => onCancel)); + }, 100); + + this.input.addEventListener("change", () => { + clearTimeout(frame); + unCancel(); + if (this.input.files) { + resolve(this.input.files); + } else { + reject(new Error("Missing file")); + } + }); + + this.input.click(); + }); + } +} diff --git a/src/UI/Popup.tsx b/src/UI/Popup.tsx new file mode 100644 index 0000000..62b7443 --- /dev/null +++ b/src/UI/Popup.tsx @@ -0,0 +1,234 @@ +import React, { createRef } from "react"; +import styled from "styled-components"; +import { createRoot } from "react-dom/client"; + +const Box = styled.div` + border: 1px solid white; + background-color: black; + min-width: 250px; + min-height: 50px; + max-width: fit-content; + max-height: fit-content; + margin: 15px auto 15px auto; + padding: 10px; + pointer-events: all; + touch-action: auto; +`; + +const P = styled.p` + white-space: pre-warp; +`; + +const BtnFlex = styled.div` + display: flex; +`; + +const Input = styled.input` + color: white; + border: 1px solid white; + background-color: black; + margin: 2px; + padding: 5px; + outline: none !important; +`; + +const Btn = styled.button` + border: 1px solid white; + width: 100%; + border-radius: none; + margin: 2px; + padding: 2px; + outline: none !important; + &:hover { + background-color: rgba(255, 255, 255, 0.15); + } + transition: background-color 250ms; +`; + +export class Popup { + private static _ref: HTMLDivElement; + private static active?: () => void; + private static root: any; + static alert(message: string, title?: string) { + return new Promise(resolve => { + Popup.clear(); + const onClick = () => { + resolve(); + this.active = undefined; + this.clear(); + }; + this.active = onClick; + + Popup.renderContent( +
+
{title || `${location.host} says`}
+

{message}

+ onClick()}>OK +
, + ); + }); + } + static async confirm(message: string, title?: string): Promise { + return new Promise(resolve => { + Popup.clear(); + const onClick = (value: boolean) => { + resolve(value); + this.active = undefined; + this.clear(); + }; + this.active = () => onClick(false); + + Popup.renderContent( +
+
{title || `${location.host} says`}
+

{message}

+ + onClick(true)}>OK + onClick(false)}>Cancel + +
, + ); + }); + } + static async prompt(message?: string, _default?: string, title?: string) { + return new Promise(resolve => { + Popup.clear(); + const onClick = (value: string | null) => { + resolve(value); + this.active = undefined; + this.clear(); + }; + this.active = () => onClick(""); + const inputRef = createRef(); + Popup.renderContent( +
+
{title || `${location.host} says`}
+

{message}

+ + + onClick(inputRef.current && inputRef.current.value)}>OK + onClick(null)}>Cancel + +
, + ); + if (inputRef.current) { + inputRef.current.focus(); + inputRef.current.value = _default || ""; + inputRef.current.addEventListener("keyup", event => { + if (event.key.toLowerCase() === "enter") { + if (inputRef.current) { + onClick(inputRef.current.value); + } + } + }); + } else { + console.error("Missing reference"); + } + }); + } + static custom( + element: JSX.Element, + buttons?: { + content: string | JSX.Element; + click: (event: React.MouseEvent) => void | boolean | null | Promise; + }[], + ) { + return new Promise(resolve => { + Popup.clear(); + const onClick = () => { + this.active = undefined; + resolve(); + this.clear(); + }; + this.active = () => onClick(); + Popup.renderContent( +
+ {element} + + {buttons + ? buttons.map((e, i) => ( + { + const raw = e.click(ev); + let stayActive: any; + if (raw instanceof Promise) { + stayActive = await raw; + } else { + stayActive = raw; + } + + if (!stayActive) { + this.active = undefined; + this.clear(); + resolve(); + } + }} + > + {e.content} + + )) + : null} + +
, + ); + }); + } + static close() { + this.clear(); + } + + private static clear() { + if (this.root) { + this.root.unmount(); + this.root = undefined; + } + // while (Popup.ref.children.length) { + // const child = Popup._ref.children[0]; + // child.parentNode.removeChild(child); + // } + const style = Popup.ref.style; + style.pointerEvents = "none"; + style.touchAction = "none"; + style.backgroundColor = "rgba(0, 0, 0, 0)"; + if (this.active) { + this.active(); + } + this.active = undefined; + } + + private static renderContent(content: JSX.Element) { + const rootElement = Popup.createBase(content); + this.root = createRoot(Popup.ref); + this.root.render(rootElement); + const style = Popup.ref.style; + style.pointerEvents = "all"; + style.touchAction = "auto"; + style.backgroundColor = "rgba(0, 0, 0, 0.5)"; + } + + private static createBase(content: JSX.Element) { + return {content}; + } + + private static get ref() { + if (Popup._ref) { + return Popup._ref; + } + const ref = document.createElement("div"); + document.body.appendChild(ref); + Popup._ref = ref; + const style = ref.style; + style.position = "fixed"; + style.zIndex = `${Number.MAX_SAFE_INTEGER}`; + style.width = "100%"; + style.height = "100%"; + style.pointerEvents = "none"; + style.touchAction = "none"; + style.backgroundColor = "rgba(0, 0, 0, 0)"; + style.transition = "background-color 1s"; + style.overflowY = "auto"; + style.overflowX = "hidden"; + return ref; + } +} diff --git a/src/UI/components/Popup.tsx b/src/UI/components/Popup.tsx new file mode 100644 index 0000000..164e0a6 --- /dev/null +++ b/src/UI/components/Popup.tsx @@ -0,0 +1,243 @@ +import React, { createRef } from "react"; +import styled from "styled-components"; +import { createRoot } from "react-dom/client"; + +const Box = styled.div` + min-width: 250px; + min-height: 50px; + max-width: fit-content; + max-height: fit-content; + margin: 15px auto 15px auto; + padding: 10px; + pointer-events: all; + touch-action: auto; + + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; +`; + +const P = styled.p` + white-space: pre-warp; +`; + +const BtnFlex = styled.div` + display: flex; +`; + +const Input = styled.input` + margin: 2px; + padding: 5px; + outline: none !important; + + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; +`; + +const Btn = styled.button` + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; + + width: 100%; + border-radius: none; + margin: 2px; + padding: 2px; + outline: none !important; + &:hover { + background-color: rgba(158, 158, 158, 0.75); + } + transition: background-color 250ms; +`; + +export class Popup { + private static _ref: HTMLDivElement; + private static active?: () => void; + private static root: any; + static alert(message: string, title?: string) { + return new Promise(resolve => { + Popup.clear(); + const onClick = () => { + resolve(); + this.active = undefined; + this.clear(); + }; + this.active = onClick; + + Popup.renderContent( +
+
{title || `${location.host} says`}
+

{message}

+ onClick()}>OK +
, + ); + }); + } + static async confirm(message: string, title?: string): Promise { + return new Promise(resolve => { + Popup.clear(); + const onClick = (value: boolean) => { + resolve(value); + this.active = undefined; + this.clear(); + }; + this.active = () => onClick(false); + + Popup.renderContent( +
+
{title || `${location.host} says`}
+

{message}

+ + onClick(true)}>OK + onClick(false)}>Cancel + +
, + ); + }); + } + static async prompt(message?: string, _default?: string, title?: string) { + return new Promise(resolve => { + Popup.clear(); + const onClick = (value: string | null) => { + resolve(value); + this.active = undefined; + this.clear(); + }; + this.active = () => onClick(""); + const inputRef = createRef(); + Popup.renderContent( +
+
{title || `${location.host} says`}
+

{message}

+ + + onClick(inputRef.current && inputRef.current.value)}>OK + onClick(null)}>Cancel + +
, + ); + if (inputRef.current) { + inputRef.current.focus(); + inputRef.current.value = _default || ""; + inputRef.current.addEventListener("keyup", event => { + if (event.key.toLowerCase() === "enter") { + if (inputRef.current) { + onClick(inputRef.current.value); + } + } + }); + } else { + console.error("Missing reference"); + } + }); + } + static custom( + element: JSX.Element, + buttons?: { + content: string | JSX.Element; + click: (event: React.MouseEvent) => void | boolean | null | Promise; + }[], + ) { + return new Promise(resolve => { + Popup.clear(); + const onClick = () => { + this.active = undefined; + resolve(); + this.clear(); + }; + this.active = () => onClick(); + Popup.renderContent( +
+ {element} + + {buttons + ? buttons.map((e, i) => ( + { + const raw = e.click(ev); + let stayActive: any; + if (raw instanceof Promise) { + stayActive = await raw; + } else { + stayActive = raw; + } + + if (!stayActive) { + this.active = undefined; + this.clear(); + resolve(); + } + }} + > + {e.content} + + )) + : null} + +
, + ); + }); + } + static close() { + this.clear(); + } + + private static clear() { + if (this.root) { + this.root.unmount(); + this.root = undefined; + } + // while (Popup.ref.children.length) { + // const child = Popup._ref.children[0]; + // child.parentNode.removeChild(child); + // } + const style = Popup.ref.style; + style.pointerEvents = "none"; + style.touchAction = "none"; + style.backgroundColor = "rgba(0, 0, 0, 0)"; + if (this.active) { + this.active(); + } + this.active = undefined; + } + + private static renderContent(content: JSX.Element) { + const rootElement = Popup.createBase(content); + this.root = createRoot(Popup.ref); + this.root.render(rootElement); + const style = Popup.ref.style; + style.pointerEvents = "all"; + style.touchAction = "auto"; + style.backgroundColor = "rgba(0, 0, 0, 0.5)"; + } + + private static createBase(content: JSX.Element) { + return {content}; + } + + private static get ref() { + if (Popup._ref) { + return Popup._ref; + } + const ref = document.createElement("div"); + document.body.appendChild(ref); + Popup._ref = ref; + const style = ref.style; + style.position = "fixed"; + style.zIndex = `${Number.MAX_SAFE_INTEGER}`; + style.width = "100%"; + style.height = "100%"; + style.pointerEvents = "none"; + style.touchAction = "none"; + style.backgroundColor = "rgba(0, 0, 0, 0)"; + style.transition = "background-color 1s"; + style.overflowY = "auto"; + style.overflowX = "hidden"; + return ref; + } +} diff --git a/src/UI/components/canvasToCanvasJSX.tsx b/src/UI/components/canvasToCanvasJSX.tsx new file mode 100644 index 0000000..eac8e53 --- /dev/null +++ b/src/UI/components/canvasToCanvasJSX.tsx @@ -0,0 +1,33 @@ +import React from "react"; +import { createRef, ReactNode } from "react"; + +interface Props { + canvas: HTMLCanvasElement; + width?: number; + height?: number; +} + +export class CanvasToCanvasJSX extends React.Component<{ canvas: HTMLCanvasElement, width?: number, height?: number }> { + private ref = createRef(); + + override componentDidMount(): void { + this.update(); + } + componentDidUpdate(prevProps: Readonly ) { + if (prevProps.canvas !== this.props.canvas || prevProps.width !== this.props.width || prevProps.height !== this.props.height) { + this.update(); + } + } + update() { + const canvas = this.ref.current!; + const width = (canvas.width = this.props.width || this.props.canvas.width); + const height = (canvas.height = this.props.height || this.props.canvas.height); + canvas.style.width = `${width}px`; + canvas.style.height = `${height}px`; + const ctx = canvas.getContext("2d")!; + ctx.drawImage(this.props.canvas, 0, 0, width, height); + } + override render(): ReactNode { + return ; + } +} diff --git a/src/UI/components/main.tsx b/src/UI/components/main.tsx new file mode 100644 index 0000000..94d82fd --- /dev/null +++ b/src/UI/components/main.tsx @@ -0,0 +1,121 @@ +import React from "react"; +import { OverlayReturn, Store, StoreEvents } from "../../store"; +import { Storage } from "../../storage"; +import { Coordinates } from "../../coordinates"; +import { Palette } from "../../palette"; +import { Menu } from "./menu"; +import { MovableWindow } from "./movableWindow"; +import { SelectedMural } from "../../interfaces"; +import { Minimap } from "./minimap"; +import { Overlay } from "./overlay"; +import { debounce } from "lodash"; + + +interface StoreSettings { + opacity: number; + collapsed: boolean; +} + +interface Props { + store: Store; + storage: Storage; + cords: Coordinates; + palette: Palette; +} + +interface State extends StoreSettings{ + selected?: SelectedMural; + overlays: number[]; + phantomOverlay: number; + overlayModify?: OverlayReturn; +} + +export class Main extends React.Component { + private readonly STORAGE_KEY = "__OPACITY_SETTINGS"; + private destroyed = false; + + constructor(props: Props) { + super(props); + this.state = { + overlays: [], + phantomOverlay: -1, + opacity: 50, + collapsed: false, + }; + } + + componentDidMount() { + this.props.store.on(StoreEvents.Any, this.update); + this.update(); + console.error(this.STORAGE_KEY); + this.props.storage.getItem(this.STORAGE_KEY).then(data => { + console.error(data, this.STORAGE_KEY, data !== null, !this.destroyed); + if (data !== null && !this.destroyed) { + console.error("loadingnn????????", data); + this.setState(data); + } + }); + } + componentWillUnmount() { + this.destroyed = true; + this.actualSave({collapsed: this.state.collapsed, opacity: this.state .opacity}); + } + actualSave(settings: StoreSettings) { + return this.props.storage.setItem(this.STORAGE_KEY, settings); + } + + save = debounce((opacity: number) => { + this.actualSave({collapsed: this.state.collapsed, opacity}); + }, 1000); + + opacityChange = (opacity: number) => { + this.setState({ + opacity + }); + this.save(opacity); + }; + + update = () => { + this.setState({ + selected: this.props.store.selected, + overlays: this.props.store.overlays, + overlayModify: this.props.store.overlayModify, + }); + }; + + renderMap() { + if (this.state.selected) { + return + + ; + } + return null; + } + render() { + return <> + + { + this.setState({collapsed}); + this.actualSave({opacity: this.state.opacity, collapsed}); + }} + /> + + {this.renderMap()} + {this.state.overlays.map((o, i) => )} + {this.props.store.murals[this.state.phantomOverlay] ? : null } + {this.state.overlayModify ? { + this.state.overlayModify!.cb(name, x, y, confirm); + }} /> : null} + ; + + } + +} \ No newline at end of file diff --git a/src/UI/components/menu.tsx b/src/UI/components/menu.tsx new file mode 100644 index 0000000..d3b74b7 --- /dev/null +++ b/src/UI/components/menu.tsx @@ -0,0 +1,113 @@ +import { faCaretDown, faCaretUp, faUpload } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import React from "react"; +import styled from "styled-components"; +import { Btn, Flex } from "../styles"; +import { Store } from "../../store"; +import { MuralList } from "./muralList"; +import { Coordinates } from "../../coordinates"; +import { Palette } from "../../palette"; +import { importArtWork } from "../importMural"; +import { Popup } from "./Popup"; +import { Storage } from "../../storage"; + +const Container = styled.div` + +`; + + +const PercentageDiv = styled.div` + margin: 2px 4px; +`; + +export const InputRange = styled.input` + &[type="range"] { + -webkit-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; + width: 100%; + } + + &[type="range"]:focus { + outline: none; + } + + &[type="range"]::-webkit-slider-runnable-track { + background-color: rgba(10, 10, 10); + border-radius: 0; + height: 4px; + border-radius: 12px; + } + + &[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + margin-top: -12px; + + background-color: black; + height: 25px; + width: 15px; + border-radius: 12px; + } + + &[type="range"]::-moz-range-track { + background-color: rgba(10, 10, 10); + border-radius: 0.5rem; + height: 0.5rem; + border-radius: 12px; + } + + &[type="range"]::-moz-range-thumb { + border: none; + border-radius: 0; + background-color: rgba(10, 10, 10); + height: 2rem; + width: 1rem; + border-radius: 12px; + } + +`; +interface Props { + store: Store; + cords: Coordinates; + palette: Palette; + storage: Storage; + opacity: number; + collapsed: boolean; + onOpacityChange: (n: number) => void; + onCollapsedChanged: (b: boolean) => void; +} + +export class Menu extends React.Component { + + import = async () => { + try { + const mural = await importArtWork(this.props.store, this.props.cords, this.props.palette); + if (mural) { + this.props.store.add(mural); + } + } catch (error) { + console.error(error); + Popup.alert(error.name); + } + }; + + inputElement = (event: React.FormEvent) => { + const percentage = parseInt((event.target as HTMLInputElement).value); + this.props.onOpacityChange(percentage); + }; + + render() { + return + + Import + + {this.props.opacity}% + this.props.onCollapsedChanged(!this.props.collapsed)}> + + {this.props.collapsed ? null : } + ; + } + +} \ No newline at end of file diff --git a/src/UI/components/minimap.tsx b/src/UI/components/minimap.tsx new file mode 100644 index 0000000..b097cd3 --- /dev/null +++ b/src/UI/components/minimap.tsx @@ -0,0 +1,262 @@ +import { Coordinates, CordType } from "../../coordinates"; +import { SelectedMural } from "../../interfaces"; +import React from "react"; +import { Btn, SELECTED_COLOR } from "../styles"; +import { faCrosshairs, faMagnifyingGlassMinus, faMagnifyingGlassPlus } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import styled from "styled-components"; +import { createCanvas, drawPixelsOntoCanvas } from "../../utils"; +import { Palette } from "../../palette"; +import { clamp, debounce } from "lodash"; +import { Store } from "../../store"; +import { Storage } from "../../storage"; + +const Flex = styled.div` + display: flex; + flex-direction: row; +`; + +const ColorBox = styled.div` + width: 25px; + height: 25px; + padding: 2px; + margin: 2px; + border: 1px solid black; + text-align: center; + font-weight: bolder; +`; + +const Scale = styled.span` + width: 25px; + text-align: center; + margin: auto; +`; + +const Canvas = styled.canvas` + border-radius: 12px; + border: 2px solid black; +`; + +interface Props { + selected: SelectedMural; + cords: Coordinates; + store: Store; + storage: Storage; + palette: Palette; +} + +interface Stats { + size: number; + color: number; + colorAssistant: boolean; +} + +interface StorageSettings { + colorAssistant: boolean; + size: number; +} + +export class Minimap extends React.Component { + private ref = React.createRef(); + private cache = new Map(); + private transparentGrid = ["#c5c5c540", "#8d8d8d40"]; + private highlighColor = "#00000040"; + private lastColor = -1; + private storageKey = "_minimap_settings"; + private destroyed = false; + + constructor(props:Props) { + super(props); + this.state = { + size: 16, + color: -1, + colorAssistant: false, + }; + } + + componentDidUpdate ( prevProps: Readonly, prevState: Readonly): void { + if (prevProps.selected.m.ref !== this.props.selected.m.ref) { + this.cache.clear(); + this.draw(); + } else if (prevState.size !== this.state.size) { + this.draw(); + } + + } + + private click = debounce((colorIndex: number) => { + if (colorIndex >= 0 && colorIndex < this.props.palette.palette.length) { + if (!this.props.palette.buttons[colorIndex].classList.contains("outline-2")) { + if (this.state.colorAssistant) { + this.props.palette.buttons[colorIndex].click(); + } + } + } + }, 50); + + + componentDidMount () { + this.props.cords.on(CordType.Div, this.update); + this.props.cords.on(CordType.Div, this.onCords); + this.props.storage.getItem(this.storageKey).then(settings => { + if (settings && !this.destroyed) { + this.setState({ + colorAssistant: settings.colorAssistant, + size: settings.size + }); + } + }); + this.draw(); + } + + componentWillUnmount () { + this.destroyed = true; + this.props.cords.off(CordType.Div, this.update); + this.props.cords.off(CordType.Div, this.onCords); + } + + saveSettings() { + this.props.storage.setItem(this.storageKey, { + colorAssistant: this.state.colorAssistant, + size: this.state.size + }); + } + + onCords = (x: number, y: number) => { + const store = this.props.store; + if (store.selected && store.selected.m.x < x && store.selected.m.y < y && store.selected.w + store.selected.m.x > x && store.selected.h + store.selected.m.y > y) { + const xx = x - store.selected.m.x; + const yy = y - store.selected.m.y; + const colorIndex = store.selected.m.pixels[yy][xx]; + if (this.lastColor !== colorIndex) { + this.lastColor = colorIndex; + this.click(colorIndex); + } + } + }; + + drawGrid(ctx: CanvasRenderingContext2D, gridSize: number, width: number, height: number) { + for (let y = 0; y < height; y += gridSize) { + for (let x = 0; x < width; x += gridSize) { + const isEvenRow = Math.floor(y / gridSize) % 2 === 0; + const isEvenColumn = Math.floor(x / gridSize) % 2 === 0; + const isEvenCell = (isEvenRow && isEvenColumn) || (!isEvenRow && !isEvenColumn); + + ctx.fillStyle = isEvenCell ? this.transparentGrid[0] : this.transparentGrid[1]; + ctx.fillRect(x, y, gridSize, gridSize); + } + } + } + + update = () => { + const m = this.props.selected.m; + const xx = this.props.cords.x - m.x; + const yy = this.props.cords.y - m.y; + + if (m.pixels[yy] !== undefined) { + if (m.pixels[yy][xx] !== undefined) { + const colorIndex = m.pixels[yy]![xx]!; + this.setState({ + color: colorIndex + }); + this.draw(); + return; + } + } + this.setState({ + color: -1, + }); + this.draw(); + }; + + getCachedImage(size: number) { + const image = this.cache.get(size); + if (image) { + return image; + } + + const s = this.props.selected; + const canvas = createCanvas(); + drawPixelsOntoCanvas(canvas, s.m.pixels, this.props.palette.hex, size); + this.cache.set(size, canvas); + return canvas; + } + + draw = () => { + const canvas = this.ref.current!; + const ctx = canvas.getContext("2d")!; + const w = canvas.width = 200; + const h = canvas.height = 200; + const hh = w / 2; + const hw = h / 2; + ctx.clearRect(0, 0, w, h); + const s = this.state.size; + this.drawGrid(ctx, s * 4, w, h); + + const pixelSize = (1 * s) / 2; + const dx = ((this.props.selected.m.x - this.props.cords.x) * s) + Math.ceil(hh - pixelSize); + const dy = ((this.props.selected.m.y - this.props.cords.y) * s) + Math.ceil(hw - pixelSize); + //const img = this.props.selected.m.ref; + const img = this.getCachedImage(s); + + ctx.drawImage(img, dx, dy, img.width, img.height); + if (s != 1) { + ctx.fillStyle = this.highlighColor; + const halfHO = (h / 2); + const halfWO = (h / 2); + ctx.fillRect(0, 0, w, halfHO - pixelSize); + ctx.fillRect(0, halfHO + pixelSize, w, halfHO - pixelSize); + ctx.fillRect(0, halfHO - pixelSize, halfWO - pixelSize, pixelSize * 2); + ctx.fillRect(halfWO + pixelSize, halfHO - pixelSize, halfWO - pixelSize, pixelSize * 2); + + } + }; + + up = () => { + this.setState({ + size: this.clamp(this.state.size * 2) + }); + }; + + down = () => { + this.setState({ + size: this.clamp(this.state.size / 2) + }); + }; + setSize(size: number) { + this.setState({size}); + } + + clamp(size: number) { + return clamp(size, 1, 32); + } + + renderColor() { + if (this.state.color !== -1) { + return ; + } else { + return / ; + } + } + toggleColorAssistant = () => { + this.setState({ + colorAssistant: !this.state.colorAssistant, + }); + }; + + render() { + return
+ + + {this.state.size} + + + this.toggleColorAssistant()}>Assist + + {this.renderColor()} + + +
; + } + +} \ No newline at end of file diff --git a/src/UI/components/movableWindow.tsx b/src/UI/components/movableWindow.tsx new file mode 100644 index 0000000..3e91b9a --- /dev/null +++ b/src/UI/components/movableWindow.tsx @@ -0,0 +1,176 @@ +import React, { createRef } from "react"; +import styled from "styled-components"; +import { Point } from "../../interfaces"; +import { clamp } from "lodash"; +import { Storage } from "../../storage"; + +const Movable = styled.div` + position: fixed; + padding-top: 20px; + padding: 5px; + z-index: 2; + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; +`; + +const DragArea = styled.div` + border: 1px black dotted; + cursor: grab; + user-select: none; + border-radius: 12px; + padding: 4px; +`; + +interface Props { + children: React.ReactNode; + title: string; + storage: Storage; + storageKey: string; +} + +interface State { + x: number; + y: number; + moving: boolean; +} + +interface PointEx extends Point { + xOff: number; + yOff: number; +} + +export class MovableWindow extends React.Component { + private ref = createRef(); + private dragRef = createRef(); + private moving?: PointEx; + private destroyed = false; + + constructor(props: Props) { + super(props); + this.state = { + x: -window.innerWidth, + y: -window.innerHeight, + moving: false, + }; + } + + componentDidMount () { + window.addEventListener("mousemove", this.onMouseMove); + window.addEventListener("mouseup", this.onMouseUp); + window.addEventListener("resize", this.fixBounds); + this.props.storage.getItem(this.storageKey).then(point => { + if (!this.destroyed && point) { + this.setState({x: point.x, y: point.y}); + } else { + this.setState({x: 0, y: 0}); + } + this.fixBounds(); + }); + } + componentWillUnmount () { + window.removeEventListener("mousemove", this.onMouseMove); + window.removeEventListener("mouseup", this.onMouseUp); + window.removeEventListener("resize", this.fixBounds); + this.destroyed = false; + } + + onTouchMove = (event: TouchEvent) => { + if (!this.moving) return; + const lastTouch = event.touches[event.touches.length - 1]; + const div = this.dragRef.current!; + const { x, y, width, height} = div.getBoundingClientRect(); + const offsetX = (lastTouch.clientX - x) / width * div.offsetWidth; + const offsetY = (lastTouch.clientY - y) / height * div.offsetHeight; + this.setMoving(lastTouch.clientX, lastTouch.clientY, offsetX, offsetY); + }; + + setMoving = (clientX: number, clientY: number, offsetX: number, offsetY: number) => { + this.moving = { + x: clientX, + y: clientY, + xOff: offsetX, + yOff: offsetY, + }; + }; + + private onMouseMove = (event: MouseEvent) => { + if (!this.moving) return; + if (!(event instanceof MouseEvent) || !event.isTrusted || event.ctrlKey || event.altKey || event.metaKey){ + return; + } + const { clientX, clientY } = event; + this.handleMoveLogic(clientX, clientY); + }; + private onMouseUp = () => { + this.moving = undefined; + this.setState({moving: false}); + }; + private fixBounds = () => { + // if(this.shown) { + // const {left, top, width, height} = this.container.getBoundingClientRect(); + // const s = this.container.style; + // if (width > window.innerWidth || height > window.innerHeight) { + // const padding = 10; + // if (width > window.innerWidth) { + // s.width = `${window.innerWidth - padding}px`; + // } + // if (height > window.innerHeight) { + // s.height = `${window.innerHeight - padding}px`; + // } + // s.overflow = "auto"; + // } else { + // s.width = ""; + // s.height = ""; + // s.overflow = ""; + // if (left < 0) { + // s.left = `0px`; + // } + // if (top < 0) { + // s.top = `0px`; + // } + // if(left + width > window.innerWidth) { + // s.left = `${window.innerWidth - width}px`; + // } + // if (top + height > window.innerHeight) { + // s.top = `${window.innerHeight - height}px`; + // } + // } + // } + }; + + private handleMoveLogic(clientX: number, clientY: number) { + const ref = this.dragRef.current?.getBoundingClientRect(); + if (ref && this.moving) { + const xx = clamp(clientX, this.moving.xOff, window.innerWidth - ref!.width + this.moving.xOff); + const yy = clamp(clientY, this.moving.yOff, window.innerHeight - ref!.height + this.moving.yOff) ; + + const x = xx - this.moving!.xOff; + const y = yy - this.moving!.yOff; + const point = { x, y }; + this.props.storage.setItem(this.storageKey, point); + this.setState(point); + } + } + get storageKey() { + return `__storage__${this.props.storageKey}`; + } + render() { + return + { + this.moving = { + x: event.clientX, + y: event.clientY, + xOff: event.nativeEvent.offsetX, + yOff: event.nativeEvent.offsetY, + }; + this.setState({moving: true}); + + }}>

{this.props.title}

+ + + {this.props.children} +
; + } +} diff --git a/src/UI/components/muralEditor.tsx b/src/UI/components/muralEditor.tsx new file mode 100644 index 0000000..69102f6 --- /dev/null +++ b/src/UI/components/muralEditor.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Border, Btn, Flex, Input } from "../styles"; +import { processNumberEvent } from "../../utils"; + +interface Props { + name: string; + x: number; + y: number; + onName: (name: string) => void; + onY: (y: number) => void; + onX: (x: number) => void; + onConfirm: () => void; + onCancel: () => void; +} + +export class MuralEditor extends React.Component { + + render() { + return +
+ Name this.props.onName(e.target.value)} /> +
+
+ X processNumberEvent(e, this.props.onX)}/> +
+
+ Y processNumberEvent(e, this.props.onY)} /> +
+ + this.props.onConfirm()} style={{flex: 1}}>Confirm this.props.onCancel()} style={{flex: 1}}>Cancel + + Overlay does not work on scale -1. To fix that zoom in. +
; + } + +} \ No newline at end of file diff --git a/src/UI/components/muralList.tsx b/src/UI/components/muralList.tsx new file mode 100644 index 0000000..c5e47be --- /dev/null +++ b/src/UI/components/muralList.tsx @@ -0,0 +1,67 @@ +import React from "react"; +import { MuralEx, SelectedMural } from "../../interfaces"; +import { Store, StoreEvents } from "../../store"; +import { MuralView } from "./muralView"; +import styled from "styled-components"; +import { Coordinates } from "../../coordinates"; + +const ScrollContainer = styled.div` + overflow: auto; + max-height: 250pt; + min-width: 200pt; + border-radius: 12px; + &::-webkit-scrollbar { + width: 7px; + height: 7px; + } + &::-webkit-scrollbar-corner { + background: transparent; + } + &::-webkit-scrollbar-track { + background: transparent; + border: 1px solid black; + border-radius: 12px; + } + &::-webkit-scrollbar-thumb { + background-color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid transparent; + } +`; + +interface Props { + store: Store; + cords: Coordinates; +} + +interface State { + murals: MuralEx[]; + selected?: SelectedMural +} + +export class MuralList extends React.Component { + constructor(props: Props) { + super(props); + this.state = { + murals: [], + }; + } + componentDidMount () { + this.props.store.on(StoreEvents.Any, this.update); + this.update(); + } + componentWillUnmount (){ + this.props.store.off(StoreEvents.Any, this.update); + } + update = () => { + this.setState({ + murals: this.props.store.murals, + selected: this.props.store.selected, + }); + }; + render() { + return {this.state.murals.map((m,i) => { + return ; + })}; + } +} diff --git a/src/UI/components/muralView.tsx b/src/UI/components/muralView.tsx new file mode 100644 index 0000000..a84c905 --- /dev/null +++ b/src/UI/components/muralView.tsx @@ -0,0 +1,217 @@ +import React from "react"; +import { Store } from "../../store"; +import { Mural, MuralEx } from "../../interfaces"; +import styled from "styled-components"; +import { Border, Btn, Flex, SELECTED_COLOR } from "../styles"; +import { CanvasToCanvasJSX } from "./canvasToCanvasJSX"; +import { formatNumber, getMuralHeight, getMuralWidth } from "../../utils"; +import { IconDefinition, faDownload, faLayerGroup, faLocation, faPenToSquare, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { Coordinates } from "../../coordinates"; +import { TEXT_FORMATS } from "../importMural"; +import saveAs from "file-saver"; + +const Margin = styled.div` + margin: 2px; + margin-left: 6px; +`; + +const H5 = styled.h5` + font-weight: bolder; + margin-right: 4px; +`; + +const Line = styled.div` + font-size: 10pt; + display: flex; + flex-direction: row; +`; + +interface Props { + mural: MuralEx; + selected: boolean; + store: Store; + cords: Coordinates; +} + +interface State { + width: number; + height: number; + overlay: boolean; +} + + +export class MuralView extends React.Component { + private readonly MAX_SIZE = 100; + constructor(props:Props) { + super(props); + this.state = { + height: this.MAX_SIZE, + width: this.MAX_SIZE, + overlay: false, + }; + } + + componentDidMount () { + this.updateSize(); + } + componentDidUpdate ( prevProps: Readonly ) { + if (this.props.mural.ref !== prevProps.mural.ref) { + this.updateSize(); + } + } + + updateSize = () => { + const w = this.props.mural.ref.width; + const h = this.props.mural.ref.height; + + let width = w; + let height = h; + if (w > h) { + if (w > this.MAX_SIZE) { + height = this.MAX_SIZE * (h / w); + width = this.MAX_SIZE; + } + } else { + if (h > this.MAX_SIZE) { + width = this.MAX_SIZE * (w / h); + height = this.MAX_SIZE; + } + } + this.setState({ + height, width + }); + }; + renderInfoLine(title: string, description: string) { + return
{title}:
{description}
; + } + + btn(context: string, icon: IconDefinition, onClick: () => void, selected?: boolean) { + return onClick()}>{context} ; + } + get s() { + return this.props.store; + } + + onLoad = (event: React.MouseEvent) => { + const tr = event.target as HTMLElement; + if ("tagName" in tr) { + const ignore = ["button", "svg", "path"]; + if (!ignore.includes(tr.tagName.toLowerCase())) { + this.s.select(this.props.selected ? undefined : this.props.mural ); + } + } + }; + onModify = async () => { + const mural = this.props.mural; + this.props.store.setOverlayModify({ + pixels: this.props.mural.pixels, + cb: (name, x, y, confirm) => { + if (confirm) { + mural.name = name; + mural.x = x; + mural.y = y; + this.props.store.updateMural(mural); + } + }, + muralObj: { + name: this.props.mural.name, + x: this.props.mural.x, + y: this.props.mural.y + } + }); + + // let x: number | null = null; + // let y: number | null = null; + // await Popup.custom(
+ //
Enter new coordinates
+ //
+ // X: + // processNumberEvent(ev, n => {x = n})} /> + //
+ //
+ // Y: + // processNumberEvent(ev, n => {y = n})} /> + //
+ //
, [ + // { + // content: "Confirm", + // click: () => { + // Popup.close(); + // } + // }, + // { + // content: "Close", + // click: () => { + // x = null; + // y = null; + // Popup.close(); + // } + // } + // ]); + + // if (typeof x === "number" && typeof y === "number") { + // this.props.mural.x = x; + // this.props.mural.y = y; + // this.props.store.updateMural(this.props.mural); + // } + }; + onExport = () => { + const rawMural: Mural = { + name: this.props.mural.name, + x: this.props.mural.x, + y: this.props.mural.y, + pixels: this.props.mural.pixels, + }; + const blob = new Blob([JSON.stringify(rawMural)], { type: "application/json;charset=utf-8" }); + saveAs(blob, `${rawMural.name}.${TEXT_FORMATS[0]}`); + }; + onDelete = () => { + this.s.remove(this.props.mural); + }; + onEnter = () => { + this.props.store.addPhantomOverlay(this.props.mural); + }; + onLeave = () => { + this.props.store.removePhantomOverlay(); + }; + + onGoto = () => { + const weight = getMuralWidth(this.props.mural); + const height = getMuralHeight(this.props.mural); + const x = this.props.mural.x + Math.round(weight / 2); + const y = this.props.mural.y + Math.round(height / 2); + const url = `${origin}/@${x},${y},${this.props.cords.uScale}`; + location.href = url; + }; + + onPreview = () => { + if (this.props.store.hasOverlay(this.props.mural)) { + this.props.store.removeOverlay(this.props.mural); + } else { + this.props.store.addOverlay(this.props.mural); + } + }; + + render() { + return + + + + {this.renderInfoLine("Name", this.props.mural.name)} + {this.renderInfoLine("PixelCount", formatNumber(this.props.mural.pixelCount))} + {this.renderInfoLine("x", this.props.mural.x.toString() )} + {this.renderInfoLine("y", this.props.mural.y.toString() )} + {this.renderInfoLine("size", `${getMuralWidth(this.props.mural)}x${getMuralHeight(this.props.mural)}`)} + + + + {this.btn("Preview", faLayerGroup, this.onPreview, this.props.store.hasOverlay(this.props.mural))} + {this.btn("Modify", faPenToSquare, this.onModify)} + {this.btn("Export", faDownload, this.onExport)} + {this.btn("Delete", faTrash, this.onDelete)} + {this.btn("Goto", faLocation, this.onGoto)} + + ; + } +} \ No newline at end of file diff --git a/src/UI/components/overlay.tsx b/src/UI/components/overlay.tsx new file mode 100644 index 0000000..8236b55 --- /dev/null +++ b/src/UI/components/overlay.tsx @@ -0,0 +1,177 @@ +import React from "react"; +import styled from "styled-components"; +import { Mural, MuralEx } from "../../interfaces"; +import { canvasFromMural, get2DArrHeight, get2DArrWidth } from "../../utils"; +import { Coordinates, CordType } from "../../coordinates"; +import { Palette } from "../../palette"; +import { MovableWindow } from "./movableWindow"; +import { Storage } from "../../storage"; +import { MuralEditor } from "./muralEditor"; + +const Canvas = styled.canvas` + position: fixed; + z-index: 1; + pointer-events: none; +`; + +interface Props { + mural: MuralEx | Mural | number[][]; + muralObj?: Partial; + onChange?: (name: string, x: number, y:number, confirm?: boolean) => void; + cords: Coordinates; + storage: Storage; + palette: Palette; + opacity: number; +} + +interface State { + name: string; + x: number; + y: number; +} + +export class Overlay extends React.Component { + private ref = React.createRef(); + private _refImage?: HTMLCanvasElement; + + constructor(props: Props) { + super(props); + this.state = { + x: 0, + y: 0, + name: "", + }; + } + + componentDidMount() { + this.draw(); + this.props.cords.on(CordType.Url, this.draw); + window.addEventListener("mousemove", this.draw); + if (this.props.muralObj) { + this.setState({ + name: this.props.muralObj.name || "", + x: this.props.muralObj.x ?? 0, + y: this.props.muralObj.y ?? 0, + }); + } + } + componentWillUnmount() { + this.props.cords.off(CordType.Url, this.draw); + window.removeEventListener("mousemove", this.draw); + } + + componentDidUpdate(prevProps: Readonly, prevState: Readonly) { + if (prevProps.mural !== this.props.mural) { + this._refImage = undefined; + this.setState({ + x: 0, y: 0 + }); + } + if (prevState.x !== this.state.x || prevState.y !== this.state.y) { + this.draw(); + } + } + + private isPixels(pixels: MuralEx | Mural | number[][]): pixels is number[][] { + return Array.isArray(pixels); + } + + get pixels() { + if (this.isPixels(this.props.mural)) { + return this.props.mural; + } else { + return this.props.mural.pixels; + } + } + + get x() { + if (this.isPixels(this.props.mural)) { + return this.state.x; + } else { + return this.props.mural.x; + } + } + + get y() { + if (this.isPixels(this.props.mural)) { + return this.state.y; + } else { + return this.props.mural.y; + } + } + + get refImg() { + if (!Array.isArray(this.props.mural) && "ref" in this.props.mural) { + return this.props.mural.ref; + } + if (this._refImage) { + return this._refImage; + } + this._refImage = canvasFromMural(this.pixels, this.props.palette.hex).canvas; + return this._refImage; + } + + draw = () => { + const canvas = this.ref.current!; + const scale = Math.pow(2, this.props.cords.uScale); + const cords = this.props.cords.gridToScreen(this.x, this.y)!; + if (!cords) { + const ctx = canvas.getContext("2d")!; + ctx.clearRect(0, 0, canvas.width, canvas.height); + return; + } + const { x, y } = cords; + + const width = get2DArrWidth(this.pixels) * scale; + const height = get2DArrHeight(this.pixels) * scale; + if (width !== canvas.width || height !== canvas.height ) { + canvas.width = width; + canvas.height = height; + canvas.style.width = `${width}px`; + canvas.style.height = `${height}px`; + } + const ctx = canvas.getContext("2d")!; + ctx.imageSmoothingEnabled = false; + canvas.style.left = `${x}px`; + canvas.style.top = `${y}px`; + + ctx.drawImage(this.refImg, 0, 0, canvas.width, canvas.height); + }; + + + private get style(): React.CSSProperties { + return { left: this.state.x, top: this.state.y, opacity: this.props.opacity / 100}; + } + + renderModifyWindow() { + if (this.props.onChange) { + const copy = {...this.state}; + return + this.setState({x})} + onY={y => this.setState({y})} + onName={name => this.setState({name})} + onCancel={() => { + this.setState(copy); + this.props.onChange!(copy.name, copy.x, copy.y, false); + }} + onConfirm={() => { + this.props.onChange!(this.state.name, this.state.x, this.state.y, true); + + }} + > + ; + } + return null; + } + + render() { + return <> + + {this.renderModifyWindow()} + ; + } +} \ No newline at end of file diff --git a/src/UI/importMural.tsx b/src/UI/importMural.tsx new file mode 100644 index 0000000..93e4587 --- /dev/null +++ b/src/UI/importMural.tsx @@ -0,0 +1,482 @@ + +import React from "react"; +import { Mural, RGB } from "../interfaces"; +import { canvasToImageData, get2DArrHeight, get2DArrWidth, getColorScore, getExtension, imageDataToPaletteIndices, imageToCanvas, loadImageSource, processNumberEvent, readAsDataUrl, readAsString, resize, rgb, validateMural } from "../utils"; +import styled from "styled-components"; +import { Popup } from "./components/Popup"; +import RgbQuant, { DitheringKernel, RGBQuantOptions } from "rgbquant"; +import { Border, Btn, Input } from "./styles"; +import { CanvasToCanvasJSX } from "./components/canvasToCanvasJSX"; +import { Palette } from "../palette"; +import { FileInput } from "./Fileinput"; +import { Store } from "../store"; +import { Coordinates } from "../coordinates"; + +export const TEXT_FORMATS = ["muraljson", "json"]; + + +enum RetrieveType { + Uint8Array = 1, + IndexedArray = 2, +} + +const LOW_ALPHA = 25; + +const Flex = styled.div` + width: 100%; + //max-width: fit-content; + display: flex; + flex-direction: row; + flex-wrap: wrap; +`; + +const Flex2 = styled.div` + display: flex; + flex-direction: column; + flex-wrap: wrap; + border: 1px solid white; + cursor: pointer; + margin: 2px; + padding: 2px; + text-align: center; + align-items: center; +`; + + +type DitheringKernelEx = DitheringKernel | "Flat"; +interface QuantResult { + type: DitheringKernelEx; + canvas: HTMLCanvasElement; + indices: number[][]; +} + +type DitherSetting = DitheringKernel | "Flat" | "show-all"; + +const KERNELS: DitheringKernel[] = [ + "FloydSteinberg", + "FalseFloydSteinberg", + "Stucki", + "Atkinson", + "Jarvis", + "Burkes", + "Sierra", + "TwoSierra", + "SierraLite", +]; + +const ditherSettings: DitherSetting[] = [ + "Flat", + ...KERNELS +]; + +export interface ImageToMuralOptions { + height: number; + width: number; + noShrinking: boolean; + quantizerSetting: DitherSetting; +} + +export async function importArtWork(store: Store, cords: Coordinates, palette: Palette) { + const file = await importFile(); + if (file) { + if (file.type === "mural") { + return file.data as Mural; + } else { + const img = file.data as HTMLImageElement; + const pixels = await imageToMural(img, palette); + return new Promise((resolve, reject)=> { + store.setOverlayModify({ + pixels, + muralObj: { + name: img.alt, + x: cords.ux - (get2DArrWidth(pixels) / 2), + y: cords.uy - (get2DArrHeight(pixels) / 2), + }, + cb: (name, x, y, confirm) => { + if (confirm) { + resolve({ name, pixels, x, y }) + } else { + reject(new Error("Canceled by user")); + } + } + }); + }) + } + } +} + +export function getQuantizedObjFromUser(quantized: QuantResult[]) { + return new Promise(r => { + Popup.custom( +
+

Dither results

+
Pick a result that fits best in your situation
+ + {quantized.map((q, i) => { + return ( +
+ { + Popup.close(); + r(q); + }} + > + {ditheringKernelToName(q.type)} + + + + +
+ ); + })} +
+
, + [{ content: "Cancel", click: () => {} }], + ).finally(() => r(null)); + }); +} + + +async function imageToMural(image: HTMLImageElement, palette: Palette) { + const settings = await getImageSettingFromUser(image); + const quantized = await imageToQuantized(image, settings, palette); + let selector: QuantResult | null | undefined; + if (Array.isArray(quantized)) { + selector = await getQuantizedObjFromUser(quantized); + } else { + selector = quantized; + } + if (!selector) { + throw new Error("User did not pick anything"); + } + + const imageData = canvasToImageData(selector.canvas); + flatQuantizeImageData(imageData, palette); + return imageDataToPaletteIndices(imageData, palette.palette); +} + + + +export async function getImageSettingFromUser(image: HTMLImageElement): Promise { + let width = image.width; + let height = image.height; + let useQuantizer: DitherSetting = "show-all"; + let noShrinking = false; + let canceled = false; + + await new Promise((resolve, reject) => { + Popup.custom( +
+

Image import

+
+ {image.alt} +
+
+ You are importing image with size {image.width}x{image.height}.{"\n"} + Do you want to preform any image manipulations? +
+
, + [ + { + click: () => { + noShrinking = false; + resolve(); + }, + content: "Resize", + }, + { + click: () => { + noShrinking = true; + resolve(); + }, + content: "Import as it is", + }, + { + click: () => { + canceled = true; + resolve(); + }, + content: "Cancel", + }, + ], + ).then(() => { + reject(new Error("User input has been interrupted")); + }); + }); + + if (canceled) { + throw new Error("Operation canceled by user"); + } + + if (!noShrinking) { + await new Promise((resolve, reject) => { + + Popup.custom( +
+

Image import

+
+ {image.alt} +
+
+ + Original size: {image.width}x{image.height} + +
+ {processNumberEvent(ev, n => {width = n})}} + /> + x + {processNumberEvent(ev, n => {height = n})}} + /> +
, + [ + { + content: "Confirm", + click: () => { + resolve(); + }, + }, + { + content: "Cancel", + click: () => { + canceled = true; + resolve(); + }, + }, + ], + ).then(() => reject(new Error("User input has been interrupted"))); + }); + } + if (canceled) { + throw new Error("Operation canceled by user"); + } + await new Promise((resolve, reject) => { + Popup.custom( +
+

Dither Settings

+
Pickup dither algorithm
+ + {ditherSettings.map((q, i) => { + return ( + { + useQuantizer = q; + Popup.close(); + resolve(); + }} + > + {ditheringKernelToName(q)} + + ); + })} + +
, + [ + { + content: "Show all", + click: () => { + useQuantizer = "show-all"; + resolve(); + }, + }, + { + content: "Cancel", + click: () => { + canceled = true; + resolve(); + }, + }, + ], + ).then(() => reject(new Error("User input has been interrupted"))); + }); + + if (canceled) { + throw new Error("Operation canceled by user"); + } + return { height, width, noShrinking, quantizerSetting: useQuantizer }; +} + + +export async function imageToQuantized(image: HTMLImageElement, options: ImageToMuralOptions, palette: Palette) { + if (!options.noShrinking) { + image = await resize(image, options.width, options.height); + } + const canvas = imageToCanvas(image); + if (options.quantizerSetting === "show-all") { + return quantizeAll(canvas, palette); + } + return quantizeOne(canvas, options.quantizerSetting, palette); +} + +function prepareQuant(canvas: HTMLCanvasElement, palette: Palette) { + const data = new RgbQuant(createQuantOptions(palette)) as RgbQuant; + data.sample(canvas); + return data; +} + +function createQuantOptions(palette: Palette): RGBQuantOptions { + return { + palette: palette.palette.map(c => [c.r, c.g, c.b]), + minHueCols: 0, + dithSerp: false, + }; + +} + + +export function quantizeAll(canvas: HTMLCanvasElement, palette: Palette) { + const images: QuantResult[] = [quantizeOne(canvas, "Flat", palette)]; + const quant = prepareQuant(canvas, palette); + for (const kernel of KERNELS) { + const image = quantizeImage(canvas, quant, kernel); + const result = quantizeOne(image, "Flat", palette); + result.type = kernel; + images.push(result); + } + return images; +} + + +export function quantizeOne(canvas: HTMLCanvasElement, kernel: DitheringKernelEx, palette: Palette): QuantResult { + if (kernel === "Flat") { + const imageData = canvasToImageData(canvas); + flatQuantizeImageData(imageData, palette); + const redrawn = imageDataToCanvas(imageData); + const indices = imageDataToPaletteIndices(imageData, palette.palette); + return { + type: "Flat", + canvas: redrawn, + indices, + }; + } else { + const quant = prepareQuant(canvas, palette); + const output = quantizeImage(canvas, quant, kernel); + const flatOutput = quantizeOne(output, "Flat", palette); + flatOutput.type = kernel; + return flatOutput; + } +} + +export function ditheringKernelToName(kernel: string) { + const arr = kernel.split(""); + + let stringBuilder = ""; + for (let i = 0; i < arr.length; i++) { + const char = arr[i]; + if (char) { + if (i !== 0) { + if (char === char.toUpperCase()) { + stringBuilder += " "; + stringBuilder += char.toLowerCase(); + } else { + stringBuilder += char; + } + } else { + stringBuilder += char; + } + } + } + return stringBuilder; +} + +function quantizeImage(canvas: HTMLCanvasElement, rgbQuant: RgbQuant, ditheringKernel: DitheringKernel) { + // create canvas; + const drawCanvas = document.createElement("canvas"); + drawCanvas.width = canvas.width; + drawCanvas.height = canvas.height; + const drawCtx = drawCanvas.getContext("2d")!; + + const imageData = canvasToImageData(canvas); + + const data = rgbQuant.reduce(canvas, RetrieveType.Uint8Array, ditheringKernel); + if (imageData.data.length !== data.length) { + throw new Error("Got unexpected data from regQuant"); + } + for (let i = 0; i < imageData.data.length; i += 4) { + if (imageData.data[i + 3]! > LOW_ALPHA) { + imageData.data[i + 0] = data[i + 0] ?? 0; + imageData.data[i + 1] = data[i + 1] ?? 0; + imageData.data[i + 2] = data[i + 2] ?? 0; + imageData.data[i + 3] = 0xff; + } + } + + drawCtx.putImageData(imageData, 0, 0); + return drawCanvas; +} + +export function flatQuantizeImageData(imageData: ImageData, palette: Palette) { + for (let i = 0; i < imageData.data.length; i += 4) { + const r = imageData.data[i + 0] ?? 0; + const g = imageData.data[i + 1] ?? 0; + const b = imageData.data[i + 2] ?? 0; + const a = imageData.data[i + 3] ?? 0; + const obj = rgb(r, g, b); + const index = findClosestIndexColor(obj, palette); + const color = palette.palette[index]; + if (!color) throw new Error(`Unknown color index ${index}`); + imageData.data[i + 0] = color.r; + imageData.data[i + 1] = color.g; + imageData.data[i + 2] = color.b; + imageData.data[i + 3] = a; + } +} + +export function findClosestIndexColor(rgbO: RGB, palette: Palette) { + const scores: number[] = []; + + for (const rgb of palette.palette) { + const r = getColorScore(rgbO.r, rgb.r); + const g = getColorScore(rgbO.g, rgb.g); + const b = getColorScore(rgbO.b, rgb.b); + scores.push(r + g + b); + } + const lowest = Math.min(...scores); + const index = scores.indexOf(lowest); + return index; +} + +export function imageDataToCanvas(imageData: ImageData) { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d")!; + canvas.width = imageData.width; + canvas.height = imageData.height; + ctx.putImageData(imageData, 0, 0); + return canvas; +} + +async function importFile() { + const fileInput = new FileInput(); + fileInput.setAcceptType(["png", "jpg", "jpeg", ...TEXT_FORMATS]); + const files = await fileInput.show(); + const fileData = files[0]; + if (!fileData) { + throw new Error("Empty file"); + } + const ex = getExtension(fileData.name); + const name = ex.text; + if (TEXT_FORMATS.includes(ex.ex)) { + const content = await readAsString(fileData); + const mural = JSON.parse(content) as Mural; + if (!mural.name) { + mural.name = await Popup.prompt("Missing name for this mural. Please enter it manually", name) || ""; + } + validateMural(mural); + return { + type: "mural", + data: mural, + }; + } else { + const readData = await readAsDataUrl(fileData); + return { + type: "image", + data: await loadImageSource(`${ex.text}.${ex.ex}`, readData), + }; + } +} \ No newline at end of file diff --git a/src/UI/styles.tsx b/src/UI/styles.tsx new file mode 100644 index 0000000..1173e9c --- /dev/null +++ b/src/UI/styles.tsx @@ -0,0 +1,72 @@ +import styled from "styled-components"; + +export const SELECTED_COLOR = "#a8a8a8"; + +export const Flex = styled.div` + display: flex; + flex-direction: row; +`; + +export const FlexC = styled.div` + display: flex; + flex-direction: column; +`; + + +export const Btn = styled.button` + border: 1px solid white; + font-size: 10pt; + + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border-radius: 12px; + border: 2px solid black; + + + margin: 2px; + display: flex; + padding: 2px; + outline: none !important; + text-decoration: none; + + svg { + margin: 2pt; + width: 10pt; + height: 10pt; + } + &:hover { + background-color: rgba(158, 158, 158, 0.75); + } + &:visited { + text-decoration: none; + } + &:disabled { + color: gray; + border-color: gray; + cursor: not-allowed; + } + transition: background-color 250ms; +`; + +export const Theme = styled.div` + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border: 2px solid black; + border-radius: 12px; +` + +export const Border = styled.div` + border: 2px solid black; + border-radius: 12px; + margin: 5px; + padding: 5px; + width: auto; +`; + +export const Input = styled.input` + background-color: rgba(255, 255, 255, 0.75); + color: rgb(10, 10, 10); + border: 2px solid black; + border-radius: 12px; + padding: 2px; +`; diff --git a/src/UI/ui.tsx b/src/UI/ui.tsx new file mode 100644 index 0000000..39d878f --- /dev/null +++ b/src/UI/ui.tsx @@ -0,0 +1,219 @@ +import { Mural } from "../interfaces"; +import { canvasToImageData, createCanvas, flatQuantizeImageData, + getExtension, getMuralHeight, getMuralWidth, imageDataToPaletteIndices, + imageToCanvas, loadImageSource, readAsDataUrl, readAsString, resize, validateMural } from "../utils"; +import { FileInput } from "./Fileinput"; +import { Palette } from "../palette"; +import { Store } from "../store"; +import React from "react"; +import { Coordinates } from "../coordinates"; +import { Storage } from "../storage"; +import { Main } from "./components/main"; +import { createRoot } from "react-dom/client"; + +const TEXT_FORMATS = ["muraljson", "json"]; + +export function createUI(store: Store, storage: Storage, cords: Coordinates, palette: Palette) { + return appendWindow(
); +} + +function appendWindow(children: React.ReactNode) { + const rootElement = document.createElement("div")!; + createRoot(rootElement).render(children); + document.body.appendChild(rootElement); + return () => { + rootElement.parentElement?.removeChild(rootElement); + } +} + +export class UI { + private container: HTMLDivElement; + private list: HTMLDivElement; + + constructor(private store: Store, private palette: Palette) { + this.container = document.createElement("div"); + const s = this.container.style; + this.container.setAttribute("mod", "pixel-canvas-overlay") + s.position = "fixed"; + s.zIndex = "1000" + s.left = "0px"; + s.bottom = "0px" + const container = document.createElement("div"); + const ss = container.style; + this.container.appendChild(container); + ss.backgroundColor = "black"; + ss.color = "white"; + ss.margin = "5px"; + ss.padding = "5px"; + ss.border = "1px solid white"; + + const h = document.createElement("h3"); + h.textContent = "Pixel Canvas overlay"; + + const input = this.btn("Import", async () => { + const mural = await this.import(); + if (mural) { + this.store.add(mural); + this.renderList(); + } + }); + container.appendChild(h); + container.appendChild(input); + this.list = document.createElement("div"); + this.list.style.display = "flex"; + this.list.style.flexDirection = "column"; + container.appendChild(this.list); + } + + private btn(value: string, onClick: () => void) { + const button = document.createElement("button"); + button.style.backgroundColor = "black"; + button.style.color = "white"; + button.style.border = "1px solid white"; + button.style.padding = "2px"; + button.textContent = value; + button.addEventListener("click", onClick); + + return button; + } + + import = async () => { + const file = await this.importFile(); + if (file) { + if (file.type === "mural") { + return file.data as Mural; + } else { + const pixels = await this.imageToMural(file.data as HTMLImageElement); + await new Promise((resolve, reject)=> { + this.store.setOverlayModify({ + pixels, + cb: (name, x, y, confirm) => { + if (confirm) { + resolve({ name, pixels, x, y }) + } else { + reject(new Error("Canceled by user")); + } + } + }); + }) + const heights = prompt(`Enter name and location [name, x, y]`) || ""; + const data = heights.split(","); + const numbers = [data[1], data[2]].map(e=> parseInt(e.trim(), 10)); + if (typeof numbers[1] === "number" && typeof numbers[2] === "number") { + alert("Invalid size"); + } + const mural: Mural = { + name: data[0], + x: numbers[0], + y: numbers[1], + pixels + } + try { + validateMural(mural); + } catch (error) { + alert(error.message); + } + return mural; + } + } + } + private async importFile() { + const fileInput = new FileInput(); + fileInput.setAcceptType(["png", "jpg", "jpeg", ...TEXT_FORMATS]); + const files = await fileInput.show(); + const fileData = files[0]; + if (!fileData) { + throw new Error("Empty file"); + } + const ex = getExtension(fileData.name); + const name = ex.text; + if (TEXT_FORMATS.includes(ex.ex)) { + const content = await readAsString(fileData); + const mural = JSON.parse(content) as Mural; + if (!mural.name) { + mural.name = prompt("Missing name for this mural. Please enter it manually", name) || ""; + } + validateMural(mural); + return { + type: "mural", + data: mural, + }; + } else { + const readData = await readAsDataUrl(fileData); + return { + type: "image", + data: await loadImageSource(`${ex.text}.${ex.ex}`, readData), + }; + } + } + private async imageToMural(image: HTMLImageElement) { + const actualImage = await this.getImageSettingFromUser(image); + const canvas = imageToCanvas(actualImage); + const imageData = canvasToImageData(canvas); + flatQuantizeImageData(imageData, this.palette.palette); + return imageDataToPaletteIndices(imageData, this.palette.palette); + } + private async getImageSettingFromUser(image: HTMLImageElement) { + const should = confirm(`You are importing image with size ${image.width}x${image.height}. Do you want to preform any image manipulations?`); + if (should) { + if (confirm(`Do you want to resize?\n Image ${image.width}x${image.height}?`)) { + const heights = prompt(`Enter new [width x height]`) || ""; + const numbers = heights.split("x").map(e=> parseInt(e.trim(), 10)); + if (typeof numbers[0] === "number" && typeof numbers[1] === "number" && numbers[0] > 0 && numbers[1] > 0) { + alert("Invalid size"); + return image; + } + image = await resize(image, numbers[0], numbers[1]); + } + } + return image; + } + private renderList() { + while (this.list.children.length) { + this.list.removeChild(this.list.children[0]); + } + + for (const mural of this.store.murals) { + const container = document.createElement("div"); + container.style.border = `${this.store.selected?.m === mural ? 3 : 1}px solid white`; + container.style.padding = "2px"; + const h5 = document.createElement("h5"); + h5.textContent = mural.name; + const canvas = createCanvas(); + canvas.style.maxHeight = "100px"; + canvas.style.maxWidth = "100px"; + const ctx = canvas.getContext("2d")!; + canvas.width = getMuralWidth(mural); + canvas.height = getMuralHeight(mural); + ctx.drawImage(mural.ref, 0, 0, canvas.width, canvas.height); + const wh = document.createElement("div"); + wh.textContent = `Size ${getMuralWidth(mural)}x${getMuralHeight(mural)}` + const at = document.createElement("div"); + at.textContent = `At: ${mural.x}x${mural.y}`; + container.appendChild(h5); + container.appendChild(wh); + container.appendChild(at); + container.appendChild(canvas); + const select = this.btn("select", () => { + this.store.select(mural); + this.renderList(); + }); + const del = this.btn("delete", () => { + this.store.remove(mural); + this.renderList(); + }); + container.appendChild(select); + container.appendChild(del); + this.list.appendChild(container); + } + } + async append() { + document.body.appendChild(this.container); + this.renderList(); + } + destroy() { + if (this.container.parentNode) { + this.container.parentNode.removeChild(this.container); + } + } +} diff --git a/src/coordinates.ts b/src/coordinates.ts new file mode 100644 index 0000000..b1fc564 --- /dev/null +++ b/src/coordinates.ts @@ -0,0 +1,192 @@ +import { Listener, BasicEventEmitter } from "./EventEmitter"; +import { CHUNK_SIZE, waitForDraw } from "./utils"; + +export enum CordType { + Div, + Url +} + +export class Coordinates { + private cords: HTMLDivElement; + private emitter = new BasicEventEmitter(); + private _x = 0; + private _y = 0; + private frame: number; + + private _ux = 0; + private _uy = 0; + private _uScale = 0; + //div: HTMLDivElement; + constructor() { + // this.div = document.createElement("div"); + // this.div.style.position = "fixed"; + // this.div.style.backgroundColor = "orange"; + // document.body.appendChild(this.div); + // this.div.style.opacity = "0.75"; + // this.div.style.zIndex = "10px"; + // this.div.style.pointerEvents = "none"; + } + + on(event: CordType, listener: Listener<[number, number, number]>) { + this.emitter.on(event, listener); + } + off(event: CordType, listener: Listener<[number, number, number]>) { + this.emitter.off(event, listener); + } + + async init() { + while(!this.cords) { + const cords = [...document.getElementsByTagName("div")].filter(e => e.textContent && e.textContent.match(/^\(\s*-?\d+\s*,\s*-?\d+\s*\)$/)); + for (const cord of cords) { + if (cord.children.length === 0) { + this.cords = cord; + this.frame = requestAnimationFrame(this.observe); + } + } + await waitForDraw(); + } + } + + stop() { + if (this.frame) { + cancelAnimationFrame(this.frame); + } + } + + private get centerCanvas() { + const hww = window.innerWidth / 2; + const hhw = window.innerHeight / 2; + const canvasObject = [...document.getElementsByTagName("canvas")].filter(c => c.classList.contains("leaflet-tile")).map(c => { + const bounds = c.getBoundingClientRect(); + return { + canvas: c, + bounds: { + width: bounds.width, + height: bounds.height, + top: bounds.top, + bottom: bounds.bottom, + left: bounds.left, + right: bounds.right, + }, + }; + }).find(r => hww > r.bounds.left && hww < r.bounds.right && hhw > r.bounds.top && hhw < r.bounds.bottom); + if (canvasObject) { + const ratio = canvasObject.canvas.width / CHUNK_SIZE; + if (ratio === 2) { // scale -1 + const hw = canvasObject.bounds.left + canvasObject.bounds.width / 2; + const hh = canvasObject.bounds.top + canvasObject.bounds.height / 2; + const chunkW = CHUNK_SIZE / canvasObject.canvas.width; + const chunkH = CHUNK_SIZE / canvasObject.canvas.height; + canvasObject.bounds.width = chunkW; + canvasObject.bounds.height = chunkH; + + if (hww <= hw && hhw <= hh) { + // top left + } else if (hww > hw && hhw < hh) { + // top right + canvasObject.bounds.top += chunkW; + } else if (hww > hw && hhw > hh) { + // bottom left + canvasObject.bounds.left += chunkH; + } else { + // bottom left right + canvasObject.bounds.left += chunkW; + canvasObject.bounds.top += chunkH; + } + canvasObject.bounds.bottom = canvasObject.bounds.top + chunkW; + canvasObject.bounds.right = canvasObject.bounds.left + chunkH; + return null; + } + canvasObject.bounds.width /= ratio; + canvasObject.bounds.height /= ratio; + canvasObject.bounds.right = canvasObject.bounds.left + canvasObject.bounds.width; + canvasObject.bounds.bottom = canvasObject.bounds.bottom + canvasObject.bounds.height; + } + + return canvasObject; + } + get pixelSize() { + return Math.pow(2, this.uScale); + } + screenToGrid(sx: number, sy: number) { + const c = this.centerCanvas; + if (!c) return null; + this.getCordsFromUrl(); + const chunkX = Math.floor(this.ux / CHUNK_SIZE) * CHUNK_SIZE; + const chunkY = Math.floor(this.uy / CHUNK_SIZE) * CHUNK_SIZE; + const xx = ((sx - c.bounds.left) / this.pixelSize) + chunkX; + const yy = ((sy - c.bounds.top) / this.pixelSize) + chunkY; + return {x: xx, y: yy}; + } + + gridToScreen(gridX: number, gridY: number) { + const c = this.centerCanvas; + if (!c) return null; + + const chunkX = Math.floor(this.ux / CHUNK_SIZE) * CHUNK_SIZE; + const chunkY = Math.floor(this.uy / CHUNK_SIZE) * CHUNK_SIZE; + const screenX = (gridX - chunkX); + const screenY = (gridY - chunkY); + + const x = c.bounds.left + (screenX * this.pixelSize); + const y = c.bounds.top + (screenY * this.pixelSize); + return { x, y }; + } + + getCordsFromUrl() { + const pathNames = location.pathname.split("/").filter(e => e); + const cordsRaw = pathNames[0]; + if (cordsRaw) { + const cords = cordsRaw.match(/-?\d+/g)!.map(n => parseInt(n)); + if (typeof cords[0] === "number" && typeof cords[1] === "number" && typeof cords[2] === "number") { + this._ux = cords[0]; + this._uy = cords[1]; + this._uScale = cords[2]; + return cords; + } + } + return null; + } + + private parse() { + const arr = this.cords.textContent!.match(/-?\d+/g)!.map(n => parseInt(n)); + this._x = arr[0]; + this._y = arr[1]; + } + + observe = () => { + const x = this._x; + const y = this._y; + this.parse(); + + if (x !== this._x || y !== this._y) { + this.emitter.emit(CordType.Div, this._x, this._y); + } + + const ux = this._ux; + const uy = this._uy; + const uScale = this._uScale; + this.getCordsFromUrl(); + if (ux !== this._ux || uy !== this._uy || uScale !== this._uScale) { + this.emitter.emit(CordType.Url, this._ux, this._uy, this._uScale); + } + + this.frame = requestAnimationFrame(this.observe); + }; + get x() { + return this._x; + } + get y() { + return this._y; + } + + get ux() { + return this._ux; + } + get uy() { + return this._uy; + } + get uScale() { + return this._uScale; + } +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..c9de019 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,27 @@ +/// +import { Coordinates } from "./coordinates"; +import { Palette } from "./palette"; +import { createUI } from "./UI/ui"; +import { waitForDraw } from "./utils"; +import { Storage } from "./storage"; +import { Store } from "./store"; + +async function main() { + const palette = new Palette(); + while(!palette.init()) { await waitForDraw();} + const storage = new Storage(ENVIRONMENT === "browser-extension"); + const store = new Store(storage, palette); + await store.load(); + const coordinates = new Coordinates(); + await coordinates.init(); + + createUI(store,storage, coordinates, palette); + + console.log("%cOverlay by 0xa663 loaded", "color: red; font-size: 20px; font-weight: bold; text-shadow: 2px 2px 4px #000000;"); +} + +if (document.readyState === "complete") { + main(); +} else { + window.addEventListener("load", main); +} \ No newline at end of file diff --git a/src/interfaces.ts b/src/interfaces.ts new file mode 100644 index 0000000..596c294 --- /dev/null +++ b/src/interfaces.ts @@ -0,0 +1,33 @@ +export interface RGB { + r: number; + g: number; + b: number; +} + +export interface Mural { + name: string; + pixels: number[][]; + x: number; + y: number; +} + +export interface LoadUnload { + load: () => Promise | void; + unload: () => Promise | void; +} + +export interface SelectedMural { + m: MuralEx; + w: number; + h: number; +} + +export interface MuralEx extends Mural { + ref: HTMLCanvasElement; + pixelCount: number; +} + +export interface Point { + x: number; + y: number; +} \ No newline at end of file diff --git a/src/palette.ts b/src/palette.ts new file mode 100644 index 0000000..8fc99b7 --- /dev/null +++ b/src/palette.ts @@ -0,0 +1,47 @@ +import { RGB } from "./interfaces"; +import { rgbToHex } from "./utils"; + +export class Palette { + + public buttons: HTMLButtonElement[] = []; + public palette: RGB[] = []; + public hex: string[] = []; + init() { + const buttons = [...document.getElementsByTagName("button")].filter(e => e.style.backgroundColor); + if (buttons.length < 2) { + return null; + } + const oW = new Map(); + const oH = new Map(); + const buttonsMap = buttons.map(btn => { + const { width, height } = btn.getBoundingClientRect(); + let w = oW.get(width) || 0; + let h = oH.get(height) || 0; + w++; + h++; + oW.set(width, w); + oH.set(height, h); + return { + btn, width, height + }; + }); + const width = Array.from(oW).sort((a,b) => a[1] < b[1] ? 1 : -1)[0][0]; + const height = Array.from(oH).sort((a,b) => a[1] < b[1] ? 1 : -1)[0][0]; + + const filtered = buttonsMap.filter(btn => btn.width === width && btn.height === height); + this.buttons = filtered.map(e => e.btn); + this.buttons[0].parentElement!.parentElement!.style.zIndex = "10"; + //this.buttons = filtered.map(e => e.); + const palette = filtered.map(btnMap => { + const values = btnMap.btn.style.backgroundColor.match(/\d+/g)!; + return { + r: parseInt(values[0]), + g: parseInt(values[1]), + b: parseInt(values[2])}; + }) as RGB[]; + this.palette = palette; + this.hex = palette.map(e => rgbToHex(e.r, e.g, e.b)); + return palette; + } + +} diff --git a/src/patch.d.ts b/src/patch.d.ts new file mode 100644 index 0000000..c5347e3 --- /dev/null +++ b/src/patch.d.ts @@ -0,0 +1,42 @@ +declare const ENVIRONMENT: "browser-extension" | "user-script"; + +declare module "rgbquant" { + export type DitheringKernel = + | "FloydSteinberg" + | "FalseFloydSteinberg" + | "Stucki" + | "Atkinson" + | "Jarvis" + | "Burkes" + | "Sierra" + | "TwoSierra" + | "SierraLite"; + + export interface RGBQuantOptions { + colors?: number; // desired palette size + method?: number; // histogram method, 2: min-population threshold within subregions; 1: global top-population + boxSize?: [number, number]; // subregion dims (if method = 2) + boxPxls?: number; // min-population threshold (if method = 2) + initColors?: number; // # of top-occurring colors to start with (if method = 1) + minHueCols?: number; // # of colors per hue group to evaluate regardless of counts, to retain low-count hues + dithKern?: number; // dithering kernel name, see available kernels in docs below + dithDelta?: number; // dithering threshhold (0-1) e.g: 0.05 will not dither colors with <= 5% difference + dithSerp?: boolean; // enable serpentine pattern dithering + palette?: [number, number, number][]; // a predefined palette to start with in r,g,b tuple format: [[r,g,b],[r,g,b]...] + reIndex?: boolean; // affects predefined palettes only. if true, allows compacting of sparsed palette once target palette size is reached. also enables palette sorting. + useCache?: boolean; // enables caching for perf usually, but can reduce perf in some cases, like pre-def palettes + cacheFreq?: number; // min color occurance count needed to qualify for caching + colorDist?: "euclidean" | "manhattan"; // method used to determine color distance, can also be "manhattan" + } + + export default class RgbQuant { + constructor(options?: RGBQuantOptions); + sample(image: HTMLCanvasElement): void; + palette(tuples?: false, sort?: boolean): [number, number, number][]; + palette(tuples?: true, sort?: boolean): Uint8Array; + palette(tuples?: boolean, sort?: boolean): Uint8Array; + reduce(image: HTMLCanvasElement, retType: 2, dithKern?: DitheringKernel, dithSerp?: boolean): number[]; + reduce(image: HTMLCanvasElement, retType: 1, dithKern?: DitheringKernel, dithSerp?: boolean): Uint8Array; + reduce(image: HTMLCanvasElement, retType?: number, dithKern?: DitheringKernel, dithSerp?: boolean): Uint8Array; + } +} diff --git a/src/storage.ts b/src/storage.ts new file mode 100644 index 0000000..3979b09 --- /dev/null +++ b/src/storage.ts @@ -0,0 +1,41 @@ +export class Storage { + + constructor(private chrome: boolean) {} + + getItem(key: string): Promise { + if (this.chrome) { + return new Promise(r => { + chrome.storage.local.get(key, value => { + if (value && value[key]) { + r(JSON.parse(value[key])); + } else { + r(null); + } + }); + }); + } else { + const value = localStorage.getItem(key); + return Promise.resolve(value ? JSON.parse(value) : value); + } + } + async setItem(key: string, value: V) { + if (this.chrome) { + return new Promise(r => { + chrome.storage.local.set({ [key]: JSON.stringify(value) }, r); + }); + } else { + localStorage.setItem(key, JSON.stringify(value)); + } + return Promise.resolve(); + } + deleteItem(key: string) { + if (this.chrome) { + return new Promise(r => { + chrome.storage.local.remove(key, r); + }); + } else { + localStorage.removeItem(key); + } + return Promise.resolve(); + } +} \ No newline at end of file diff --git a/src/store.ts b/src/store.ts new file mode 100644 index 0000000..e08f086 --- /dev/null +++ b/src/store.ts @@ -0,0 +1,159 @@ +import { BasicEventEmitter, Listener } from "./EventEmitter"; +import { LoadUnload, Mural, MuralEx, SelectedMural } from "./interfaces"; +import { Palette } from "./palette"; + +import { Storage } from "./storage"; +import { canvasFromMural, getMuralHeight, getMuralWidth, pushUnique, removeItem } from "./utils"; + +export enum StoreEvents { + MuralAdd = 1, + MuralRemoved, + MuralUpdated, + MuralSelect, + MuralOverlay, + MuralPhantomOverlay, + Any, +} + +export interface OverlayReturn { + pixels: number[][]; + muralObj?: Partial; + cb: (name: string, x: number, y: number, confirm?: boolean) => void; +} + +export class Store implements LoadUnload { + private readonly STORAGE_KEY_MURAL = "_murals"; + private readonly STORAGE_KEY_SELECTED = "_mural"; + private _murals: MuralEx[] = []; + private _selected: SelectedMural | undefined; + private emitter = new BasicEventEmitter(); + private _overlayIndices: number[] = []; + private _phantomOverlay = -1; + private _overlayModify?: OverlayReturn; + + constructor(private storage: Storage, private palette: Palette) {} + + async load() { + this._murals = await this.storage.getItem(this.STORAGE_KEY_MURAL) || []; + for (const mural of this._murals) { + const { canvas, pixels } = canvasFromMural(mural.pixels, this.palette.hex); + mural.ref = canvas; + mural.pixelCount = pixels; + } + const index = await this.storage.getItem(this.STORAGE_KEY_SELECTED) ?? -1; + this.select(this._murals[index]); + } + updateMural(_mural: Mural) { + this.save(); + this.emit(StoreEvents.MuralUpdated); + } + unload() { + this.save(); + } + add(mural: Mural) { + const m = mural as MuralEx; + const { canvas, pixels } = canvasFromMural(mural.pixels, this.palette.hex); + m.ref = canvas; + m.pixelCount = pixels; + this._murals.push(m); + this.emit(StoreEvents.Any); + this.save(); + } + + remove(mural: Mural) { + removeItem(this._murals, mural); + this.emit(StoreEvents.MuralRemoved); + this.save(); + } + addOverlay(mural: MuralEx) { + const index = this._murals.indexOf(mural); + if (index !== -1) { + pushUnique(this._overlayIndices, index); + if (this._phantomOverlay === index) { + this._phantomOverlay = -1; + } + } + this.emit(StoreEvents.MuralOverlay); + this.save(); + } + removeOverlay(mural: MuralEx) { + const index = this._murals.indexOf(mural); + if (index !== -1) { + removeItem(this._overlayIndices, index); + } + this.emit(StoreEvents.MuralOverlay); + this.save(); + } + setOverlayModify(overlay: OverlayReturn) { + this._overlayModify = overlay; + const cb = overlay.cb; + overlay.cb = (name, x, y, done) => { + cb(name, x, y, done); + this._overlayModify = undefined; + this.emit(StoreEvents.MuralOverlay); + }; + this.emit(StoreEvents.MuralOverlay); + } + hasOverlay(mural: MuralEx) { + const index = this._murals.indexOf(mural); + return this._overlayIndices.includes(index); + } + + select(mural: MuralEx | undefined) { + if (mural) { + this._selected = { + m: mural, + h: getMuralHeight(mural), + w: getMuralWidth(mural), + }; + } else { + this._selected = undefined; + } + this.emit(StoreEvents.MuralSelect); + this.save(); + } + + async save() { + await this.storage.setItem(this.STORAGE_KEY_MURAL, this._murals.map(m => ({ name: m.name, pixels: m.pixels, x: m.x, y: m.y } as Mural))); + const selected = this._selected?.m ? this._murals.indexOf(this._selected?.m!) : -1; + await this.storage.setItem(this.STORAGE_KEY_SELECTED, selected); + } + addPhantomOverlay(mural: MuralEx) { + const index = this._murals.indexOf(mural); + if (index !== this._phantomOverlay && !this._overlayIndices.includes(index)) { + this._phantomOverlay = index; + this.emit(StoreEvents.MuralPhantomOverlay); + } + } + removePhantomOverlay() { + if (this._phantomOverlay !== -1) { + this._phantomOverlay = -1; + this.emit(StoreEvents.MuralPhantomOverlay); + } + } + get murals() { + return this._murals; + } + get overlays() { + return this._overlayIndices; + } + get phantomOverlay() { + return this._phantomOverlay; + } + get overlayModify() { + return this._overlayModify; + } + get selected() { + return this._selected; + } + on(event: StoreEvents, listener: Listener<[Store]>) { + this.emitter.on(event, listener); + } + off(event: StoreEvents, listener: Listener<[Store]>) { + this.emitter.off(event, listener); + } + private emit(event: StoreEvents) { + this.emitter.emit(event, this); + this.emitter.emit(StoreEvents.Any, this); + } +} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..d010500 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,348 @@ +import { clone, isInteger } from "lodash"; +import { Mural, RGB } from "./interfaces"; + +export const CHUNK_SIZE = 512; + +export function pushUnique(items: T[], item: T) { + const index = items.indexOf(item); + if (index === -1) { + items.push(item); + return true; + } + return false; +} + +export function removeItem(items: T[], item: T) { + const index = items.indexOf(item); + if (index !== -1) { + items.splice(index, 1); + return true; + } + return false; +} + +export function rgb(r: number, g: number, b: number): RGB { + return { r, g, b }; +} + +export function findClosestIndexColor(rgbO: RGB, palette: RGB[]) { + const scores: number[] = []; + + for (const rgb of palette) { + const r = getColorScore(rgbO.r, rgb.r); + const g = getColorScore(rgbO.g, rgb.g); + const b = getColorScore(rgbO.b, rgb.b); + scores.push(r + g + b); + } + const lowest = Math.min(...scores); + const index = scores.indexOf(lowest); + return index; +} + +export function getColorScore(v0: number, v2: number) { + return v0 > v2 ? v0 - v2 : v2 - v0; +} + +export function componentToHex(c: number, fix = 2) { + return c.toString(16).padStart(fix, "0"); +} + +export function rgbToHex(r: number, g: number, b: number) { + return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); +} + +export function waitForDraw() { + return new Promise(r => requestAnimationFrame(r)); +} + +export function getExtension(string: string) { + const index = string.lastIndexOf("."); + if (index === -1) { + return { text: string, ex: "" }; + } else { + return { text: string.slice(0, index), ex: string.slice(index + 1) }; + } +} + +export function readAsString(blob: Blob) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.addEventListener("load", () => { + resolve(reader.result as string); + }); + reader.addEventListener("error", err => { + reject(err); + }); + reader.readAsText(blob); + }); +} + +export function readAsDataUrl(blob: Blob) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.addEventListener("load", () => { + resolve(reader.result as string); + }); + reader.addEventListener("error", err => { + reject(err); + }); + reader.readAsDataURL(blob); + }); +} + +export function loadImageSource(name: string, data: string): Promise { + return new Promise((resolve, reject) => { + const image = new Image(); + image.alt = name; + image.addEventListener("load", () => resolve(image)); + image.addEventListener("error", err => { + reject(err); + }); + if (data.startsWith("data:image") || data.startsWith("blob")) { + image.src = data; + } else { + image.src = `data:image/${getExtension(name)};base64,${data}`; + } + }); +} + +export function get2DArrHeight(arr2D: number[][]) { + return arr2D.length; +} + +export function get2DArrWidth(arr2D: number[][]) { + return (arr2D[0] && arr2D[0].length) || 0; +} + +export function getMuralHeight(mural: Mural) { + return get2DArrHeight(mural.pixels); +} + +export function getMuralWidth(mural: Mural) { + return get2DArrWidth(mural.pixels); +} + +export function resize(image: HTMLImageElement, width: number, height: number) { + const canvas = createCanvas(); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d")!; + ctx.imageSmoothingEnabled = false; + ctx.drawImage(image, 0, 0, width, height); + return canvasToImage(canvas, image.alt); +} + +export function canvasToImage(canvas: HTMLCanvasElement, alt?: string) { + return new Promise((resolve, reject) => { + const img = canvas.toDataURL(`image/png`); + const newImage = new Image(); + + newImage.addEventListener("load", () => resolve(newImage)); + newImage.addEventListener("error", err => reject(err)); + if (alt) { + newImage.alt = alt; + } + newImage.src = img; + }); +} + +export function validateMural(mural: Mural) { + if (typeof mural === "object") { + const muralClone = clone(mural); + if (Array.isArray(muralClone)) { + throw new Error("Should not be an array"); + } else { + if (typeof muralClone.x !== "number") throw new Error("X is not a number"); + if (typeof muralClone.y !== "number") throw new Error("Y is not a number"); + if (!isInteger(muralClone.x)) throw new Error("X is not an integer"); + if (!isInteger(muralClone.y)) throw new Error("Y is not an integer"); + if (typeof muralClone.name !== "string") throw new Error("Missing name"); + if (muralClone.name.length <= 1) throw new Error("Name to short"); + if (muralClone.name.length >= 64) throw new Error("Name to long"); + if (typeof muralClone.pixels !== "object") throw new Error("Pixels are not an object"); + if (!Array.isArray(muralClone.pixels)) throw new Error("Pixels are not an array"); + let size = 0; + for (let i = 0; i < muralClone.pixels.length; i++) { + const obj = muralClone.pixels[i]; + if (typeof obj !== "object") throw new Error(`Pixels[${i}] are not an object`); + if (!Array.isArray(obj)) throw new Error(`Pixels[${i}] are not an array`); + if (i === 0) { + size = obj.length; + } else if (obj.length !== size) { + throw new Error(`Pixels[${i}] incorrect size`); + } + } + for (let y = 0; y < muralClone.pixels.length; y++) { + const yArray = muralClone.pixels[y]; + if (yArray == null) { + throw new Error(`mural.pixels[${y}] is null`); + } + for (let x = 0; x < yArray.length; x++) { + if (typeof yArray[x] !== "number") throw new Error(`pixels[${y}][${x}] is not a number`); + if (!isInteger(yArray[x])) throw new Error(`pixels[${y}][${x}] is not am integer`); + const colorId = yArray[x]; + if (colorId == null) throw new Error("colorId is null"); + } + } + if (Object.keys(muralClone).length !== 4) { + throw new Error(`Found more object keys than it should have`); + } + + const height = getMuralHeight(muralClone); + const width = getMuralWidth(muralClone); + if (height < 2) throw new Error("Height to small"); + if (width < 2) throw new Error("Width to small"); + if (height > 2000) throw new Error("Height to big"); + if (width > 2000) throw new Error("Width to big"); + } + } else { + throw new Error("Not an object"); + } +} + +export function canvasToImageData(canvas: HTMLCanvasElement) { + const ctx = canvas.getContext("2d")!; + return ctx.getImageData(0, 0, canvas.width, canvas.height); +} + +export function flatQuantizeImageData(imageData: ImageData, palette: RGB[]) { + for (let i = 0; i < imageData.data.length; i += 4) { + const r = imageData.data[i + 0] ?? 0; + const g = imageData.data[i + 1] ?? 0; + const b = imageData.data[i + 2] ?? 0; + const a = imageData.data[i + 3] ?? 0; + const obj = rgb(r, g, b); + const index = findClosestIndexColor(obj, palette); + const color = palette[index]; + if (!color) throw new Error(`Unknown color index ${index}`); + imageData.data[i + 0] = color.r; + imageData.data[i + 1] = color.g; + imageData.data[i + 2] = color.b; + imageData.data[i + 3] = a; + } +} + +export function imageDataToPaletteIndices(imageData: ImageData, palette: RGB[]) { + const { height, width } = imageData; + const pixels: number[][] = []; + for (let i = 0; i < height; i++) { + pixels.push([]); + } + for (let i = 0; i < imageData.data.length; i += 4) { + const r = imageData.data[i + 0] ?? 0; + const g = imageData.data[i + 1] ?? 0; + const b = imageData.data[i + 2] ?? 0; + const a = imageData.data[i + 3] ?? 0xff; + + const line = Math.floor(Math.floor(i / 4) / width); + const data = pixels[line] || []; + if (a < 25) { + data.push(-1); + } else { + const index = findClosestFormArray(rgb(r, g, b), palette); + data.push(index); + } + } + return pixels; +} + +export function findClosestFormArray(rgbO: RGB, palette: RGB[]) { + const scores: number[] = []; + + for (const rgb of palette) { + const r = getColorScore(rgbO.r, rgb.r); + const g = getColorScore(rgbO.g, rgb.g); + const b = getColorScore(rgbO.b, rgb.b); + scores.push(r + g + b); + } + const lowest = Math.min(...scores); + const index = scores.indexOf(lowest); + return index; +} + +export function imageToCanvas(image: HTMLImageElement) { + const canvas = createCanvas(); + const ctx = canvas.getContext("2d")!; + canvas.width = image.width; + canvas.height = image.height; + ctx.drawImage(image, 0, 0); + return canvas; +} + +export function drawPixelsOntoCanvas(canvas: HTMLCanvasElement, pixelsData: number[][], palette: string[], pixelSize = 1) { + const ctx = canvas.getContext("2d")!; + if (!ctx) return 0; + const data = pixelsData; + const height = data.length * pixelSize; + const width = data[0] ? data[0].length * pixelSize : 0; + if (!(canvas instanceof OffscreenCanvas)){ + canvas.width = width; + canvas.height = height; + canvas.style.width = `${width}px`; + canvas.style.height = `${height}px`; + } + let pixels = 0; + for (let x = 0; x < width; x ++) { + for (let y = 0; y < height; y++) { + const yd = data[y]; + const index = (yd && yd[x]); + if (index != null && index > -1) { + pixels++; + const aColor = palette[index]!; + if (!aColor) { + throw new Error(`Unknown color at ${index}`); + } + ctx.fillStyle = aColor; + + ctx.fillRect(x * pixelSize, y * pixelSize, pixelSize, pixelSize); + } + } + } + return pixels; +} + +export function createCanvas() { + const canvas = document.createElement("canvas"); + canvas.setAttribute("overlay", "true"); + return canvas; +} + +export function lengthOfXY(dx: number, dy: number): number { + return Math.sqrt(dx * dx + dy * dy); +} + +export function distance(ax: number, ay: number, bx: number, by: number): number { + return lengthOfXY(ax - bx, ay - by); +} + +export function toChunkX(x: number) { + return Math.floor(x / CHUNK_SIZE) * CHUNK_SIZE; +} + +export function toChunkY(y: number) { + return Math.floor(y / CHUNK_SIZE) * CHUNK_SIZE; +} + +export function canvasFromMural(pixelsToDraw: number[][], hex: string[]) { + const canvas = document.createElement("canvas"); + canvas.width = get2DArrWidth(pixelsToDraw); + canvas.height = get2DArrHeight(pixelsToDraw); + const pixels = drawPixelsOntoCanvas(canvas, pixelsToDraw, hex); + return { canvas, pixels }; +} + +let numberFormatter: Intl.NumberFormat; +try { + const userLocale = navigator.language || (navigator as any).userLanguage; + numberFormatter = new Intl.NumberFormat(userLocale); +} catch (_) { + // continue regardless of error +} + +export function formatNumber(number: number) { + return numberFormatter ? numberFormatter.format(number) : number.toString(); +} + +export function processNumberEvent(ev: React.ChangeEvent, cb: (n: number) => void) { + cb(parseInt(ev.target.value, 10)); +} diff --git a/user-script.template.js b/user-script.template.js new file mode 100644 index 0000000..51293bc --- /dev/null +++ b/user-script.template.js @@ -0,0 +1,11 @@ +// ==UserScript== +// @name Pixel canvas overlay +// @namespace http://tampermonkey.net/ +// @version $VERSION$ +// @description Scripts renders pixelated overlays over the tile map! +// @author 0xa663 +// @match https://pixelcanvas.io/* +// @icon https://www.google.com/s2/favicons?sz=64&domain=pixelcanvas.io +// @grant none +// ==/UserScript== +