UNPKG

gun-avatar

Version:

Avatar generator for GUN public keys

27 lines 14.6 kB
var oe=Object.create;var L=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,fe=Object.prototype.hasOwnProperty;var F=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var ue=(r,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of le(e))!fe.call(r,o)&&o!==n&&L(r,o,{get:()=>e[o],enumerable:!(i=ie(e,o))||i.enumerable});return r};var U=(r,e,n)=>(n=r!=null?oe(se(r)):{},ue(e||!r||!r.__esModule?L(n,"default",{value:r,enumerable:!0}):n,r));var B=F(O=>{var q;(function(r){typeof DO_NOT_EXPORT_CRC>"u"?typeof O=="object"?r(O):typeof define=="function"&&define.amd?define(function(){var e={};return r(e),e}):r(q={}):r(q={})})(function(r){r.version="0.3.0";function e(){for(var a=0,t=new Array(256),l=0;l!=256;++l)a=l,a=a&1?-306674912^a>>>1:a>>>1,a=a&1?-306674912^a>>>1:a>>>1,a=a&1?-306674912^a>>>1:a>>>1,a=a&1?-306674912^a>>>1:a>>>1,a=a&1?-306674912^a>>>1:a>>>1,a=a&1?-306674912^a>>>1:a>>>1,a=a&1?-306674912^a>>>1:a>>>1,a=a&1?-306674912^a>>>1:a>>>1,t[l]=a;return typeof Int32Array<"u"?new Int32Array(t):t}var n=e(),i=typeof Buffer<"u";function o(a){if(a.length>32768&&i)return f(new Buffer(a));for(var t=-1,l=a.length-1,h=0;h<l;)t=n[(t^a.charCodeAt(h++))&255]^t>>>8,t=n[(t^a.charCodeAt(h++))&255]^t>>>8;return h===l&&(t=t>>>8^n[(t^a.charCodeAt(h))&255]),t^-1}function s(a){if(a.length>1e4)return f(a);for(var t=-1,l=0,h=a.length-3;l<h;)t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255];for(;l<h+3;)t=t>>>8^n[(t^a[l++])&255];return t^-1}function f(a){for(var t=-1,l=0,h=a.length-7;l<h;)t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255],t=t>>>8^n[(t^a[l++])&255];for(;l<h+7;)t=t>>>8^n[(t^a[l++])&255];return t^-1}function u(a){for(var t=-1,l=0,h=a.length,d,m;l<h;)d=a.charCodeAt(l++),d<128?t=t>>>8^n[(t^d)&255]:d<2048?(t=t>>>8^n[(t^(192|d>>6&31))&255],t=t>>>8^n[(t^(128|d&63))&255]):d>=55296&&d<57344?(d=(d&1023)+64,m=a.charCodeAt(l++)&1023,t=t>>>8^n[(t^(240|d>>8&7))&255],t=t>>>8^n[(t^(128|d>>2&63))&255],t=t>>>8^n[(t^(128|m>>6&15|d&3))&255],t=t>>>8^n[(t^(128|m&63))&255]):(t=t>>>8^n[(t^(224|d>>12&15))&255],t=t>>>8^n[(t^(128|d>>6&63))&255],t=t>>>8^n[(t^(128|d&63))&255]);return t^-1}r.table=n,r.bstr=o,r.buf=s,r.str=u})});var J=F((Pe,H)=>{var de=B();H.exports=ge;var c=new Uint8Array(4),he=new Int32Array(c.buffer),me=new Uint32Array(c.buffer);function ge(r){if(r[0]!==137)throw new Error("Invalid .png file header");if(r[1]!==80)throw new Error("Invalid .png file header");if(r[2]!==78)throw new Error("Invalid .png file header");if(r[3]!==71)throw new Error("Invalid .png file header");if(r[4]!==13)throw new Error("Invalid .png file header: possibly caused by DOS-Unix line ending conversion?");if(r[5]!==10)throw new Error("Invalid .png file header: possibly caused by DOS-Unix line ending conversion?");if(r[6]!==26)throw new Error("Invalid .png file header");if(r[7]!==10)throw new Error("Invalid .png file header: possibly caused by DOS-Unix line ending conversion?");for(var e=!1,n=[],i=8;i<r.length;){c[3]=r[i++],c[2]=r[i++],c[1]=r[i++],c[0]=r[i++];var o=me[0]+4,s=new Uint8Array(o);s[0]=r[i++],s[1]=r[i++],s[2]=r[i++],s[3]=r[i++];var f=String.fromCharCode(s[0])+String.fromCharCode(s[1])+String.fromCharCode(s[2])+String.fromCharCode(s[3]);if(!n.length&&f!=="IHDR")throw new Error("IHDR header missing");if(f==="IEND"){e=!0,n.push({name:f,data:new Uint8Array(0)});break}for(var u=4;u<o;u++)s[u]=r[i++];c[3]=r[i++],c[2]=r[i++],c[1]=r[i++],c[0]=r[i++];var a=he[0],t=de.buf(s);if(t!==a)throw new Error("CRC values for "+f+" header do not match, PNG file is likely corrupted");var l=new Uint8Array(s.buffer.slice(4));n.push({name:f,data:l})}if(!e)throw new Error(".png file ended prematurely: no IEND header was found");return n}});var V=F((_e,X)=>{X.exports=function(r,e,n){var i=[],o=r.length;if(o===0)return i;var s=e<0?Math.max(0,e+o):e||0;for(n!==void 0&&(o=n<0?n+o:n);o-- >s;)i[o-s]=r[o];return i}});var K=F((Ge,j)=>{var pe=V(),xe=B();j.exports=be;var v=new Uint8Array(4),ce=new Int32Array(v.buffer),ve=new Uint32Array(v.buffer);function be(r){var e=8,n=e,i;for(i=0;i<r.length;i++)e+=r[i].data.length,e+=12;var o=new Uint8Array(e);for(o[0]=137,o[1]=80,o[2]=78,o[3]=71,o[4]=13,o[5]=10,o[6]=26,o[7]=10,i=0;i<r.length;i++){var s=r[i],f=s.name,u=s.data,a=u.length,t=[f.charCodeAt(0),f.charCodeAt(1),f.charCodeAt(2),f.charCodeAt(3)];ve[0]=a,o[n++]=v[3],o[n++]=v[2],o[n++]=v[1],o[n++]=v[0],o[n++]=t[0],o[n++]=t[1],o[n++]=t[2],o[n++]=t[3];for(var l=0;l<a;)o[n++]=u[l++];var h=t.concat(pe(u)),d=xe.buf(h);ce[0]=d,o[n++]=v[3],o[n++]=v[2],o[n++]=v[1],o[n++]=v[0]}return o}});var Z=F((Le,W)=>{W.exports=we;function we(r,e){if(r=String(r),e=String(e),!/^[\x00-\xFF]+$/.test(r)||!/^[\x00-\xFF]+$/.test(e))throw new Error("Only Latin-1 characters are permitted in PNG tEXt chunks. You might want to consider base64 encoding and/or zEXt compression");if(r.length>=80)throw new Error('Keyword "'+r+'" is longer than the 79-character limit imposed by the PNG specification');for(var n=r.length+e.length+1,i=new Uint8Array(n),o=0,s,f=0;f<r.length;f++){if(!(s=r.charCodeAt(f)))throw new Error("0x00 character is not permitted in tEXt keywords");i[o++]=s}i[o++]=0;for(var u=0;u<e.length;u++){if(!(s=e.charCodeAt(u)))throw new Error("0x00 character is not permitted in tEXt content");i[o++]=s}return{name:"tEXt",data:i}}});var Y=F((Te,Q)=>{Q.exports=ye;function ye(r){r.data&&r.name&&(r=r.data);for(var e=!0,n="",i="",o=0;o<r.length;o++){var s=r[o];if(e)s?i+=String.fromCharCode(s):e=!1;else if(s)n+=String.fromCharCode(s);else throw new Error("Invalid NULL character found. 0x00 character is not permitted in tEXt content")}return{keyword:i,text:n}}});var k=F(R=>{R.encode=Z();R.decode=Y()});var T=()=>{if(typeof window>"u"||typeof window.CanvasRenderingContext2D>"u"||!n())return;let r=CanvasRenderingContext2D.prototype,e=r.drawImage;if(!e){console.error("This script requires a basic implementation of drawImage");return}r.drawImage=function(u,a,t){if(!(arguments.length===9))return e.apply(this,[...arguments]);let h=i(...arguments);if(!o(h))return e.apply(this,h)};function n(){let f=document.createElement("canvas").getContext("2d");f.fillRect(0,0,40,40),f.drawImage(f.canvas,-40,-40,80,80,50,50,20,20);let u=f.getImageData(50,50,30,30),a=new Uint32Array(u.data.buffer),t=(d,m)=>a[m*u.width+d],l=[[9,9],[20,9],[9,20],[20,20]],h=[[10,10],[19,10],[10,19],[19,19]];return l.some(([d,m])=>t(d,m)!==0)||h.some(([d,m])=>t(d,m)===0)}function i(f,u,a,t,l,h,d,m,g){let{width:b,height:y}=s(f);t<0&&(u+=t,t=Math.abs(t)),l<0&&(a+=l,l=Math.abs(l)),m<0&&(h+=m,m=Math.abs(m)),g<0&&(d+=g,g=Math.abs(g));let w=Math.max(u,0),p=Math.min(u+t,b),x=Math.max(a,0),C=Math.min(a+l,y),E=m/t,I=g/l;return[f,w,x,p-w,C-x,u<0?h-u*E:h,a<0?d-a*I:d,(p-w)*E,(C-x)*I]}function o(f){return[3,4,7,8].some(u=>!f[u])}function s(f){let u=a=>{let t=globalThis[a];return t&&f instanceof t};if(u("HTMLImageElement"))return{width:f.naturalWidth,height:f.naturalHeight};if(u("HTMLVideoElement"))return{width:f.videoWidth,height:f.videoHeight};if(u("SVGImageElement"))throw new TypeError("SVGImageElement isn't yet supported as source image.","UnsupportedError");if(u("HTMLCanvasElement")||u("ImageBitmap"))return f}};var M=U(J(),1),z=U(K(),1),N=U(k(),1);import{ref as Fe}from"vue";var A=Fe(null);function Ae(r){try{let e=r.toDataURL("image/png").split(",")[1],n=atob(e),i=new Uint8Array(n.length);for(let o=0;o<n.length;o++)i[o]=n.charCodeAt(o);return i}catch(e){return A.value="Failed to convert canvas to buffer: "+e.message,null}}function Ce(r,e){try{let n=`<metadata> <gun-data>${JSON.stringify(e)}</gun-data> </metadata>`;return r.replace("</svg>",`${n}</svg>`)}catch(n){return A.value="Failed to embed data in SVG: "+n.message,null}}function Ee(r){try{let e=r.match(/<gun-data>(.*?)<\/gun-data>/s);return e?JSON.parse(e[1]):null}catch(e){return A.value="Failed to extract data from SVG: "+e.message,null}}function S(r,e,n="png"){if(n==="svg"){let i=r.outerHTML||r;return Ce(i,e)}try{let i=Ae(r);if(!i)return null;let o=(0,M.default)(i);return o.splice(-1,0,N.default.encode("message",JSON.stringify(e))),(0,z.default)(o)}catch(i){return A.value="Failed to embed data: "+i.message,null}}function Ie(r,e="image/png"){if(e==="image/svg+xml"){let n=new TextDecoder().decode(r);return Ee(n)}try{let o=(0,M.default)(r).filter(s=>s.name==="tEXt").map(s=>N.default.decode(s.data)).find(s=>s.keyword==="message");return o?JSON.parse(o.text):null}catch(n){return A.value=n.message,null}}async function $e(r){try{if(!(r instanceof File))throw new Error("Input must be a File object");let e=await r.arrayBuffer(),n=new Uint8Array(e);return await Ie(n)}catch(e){return A.value=e.message,null}}var ee="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";function te(r){return r.split("").reduce((e,n)=>e*64+ee.indexOf(n),0)}function re(r){let e=ee.split(""),n=[],i=0;for(let o of r)n[i++]=e.indexOf(o)/64;return n}var $={};function D({pub:r,size:e=200,dark:n=!1,draw:i="circles",reflect:o=!0,round:s=!0,embed:f=!0}){let u=typeof window<"u"&&typeof document<"u";if(!Se(r))return"";if(!u)return Ue({pub:r,size:e,dark:n,embed:f});let a=JSON.stringify(arguments[0]);if($!=null&&$[a])return $[a];let t=document.createElement("canvas");t.width=t.height=e;let l=t.getContext("2d"),{decoded:h,finals:d}=P(r);if(De({ctx:l,top:d[0],bottom:d[1],size:e,dark:n}),i=="squares"?(l.filter="blur(20px)",ne(h[0],l,e),l.filter="blur(0px)",l.globalCompositeOperation="color-burn",ne(h[1],l,e)):(ae(h[0],l,e,.42*e),l.globalCompositeOperation="multiply",ae(h[1],l,e,.125*e)),o&&(l.globalCompositeOperation="source-over",l.scale(-1,1),l.translate(-e/2,0),l.drawImage(t,e/2,0,e,e,0,0,e,e),l.setTransform(1,0,0,1,0,0)),s){let g=l.getImageData(0,0,e,e);l.clearRect(0,0,e,e),l.fillStyle=n?"#cccccc":"#ffffff",l.fillRect(0,0,e,e),l.putImageData(g,0,0),l.globalCompositeOperation="destination-in",l.beginPath(),l.arc(e/2,e/2,e/2,0,Math.PI*2),l.closePath(),l.fill()}let m=t.toDataURL("image/png");if(f){let b=S(t,{pub:r,content:f});if(b){let y=new Blob([b],{type:"image/png"});m=URL.createObjectURL(y)}}return $[a]=m,m}function Se(r){return r&&typeof r=="string"&&r.length===87&&r.split(".").length===2}function P(r){let e=r.split("."),n=e.map(u=>re(u)),i=n.map(u=>u[42]),o=n.map(u=>u.reduce((a,t)=>a+t)/u.length),s=e.map(u=>te(u)%360),f=e.map((u,a)=>`hsl(${s[a]} ${i[a]*100}% ${o[a]*100}%)`);return{finals:i,decoded:n,angles:s,averages:o,colors:f}}function _(r,e=3){return[...Array(Math.ceil(r.length/e))].map(()=>r.splice(0,e))}function De({ctx:r,top:e=0,bottom:n=150,size:i=200,dark:o=!1}){let s=r.createLinearGradient(0,0,0,i),f=o?0:70;s.addColorStop(0,`hsla(0,0%,${f+e*30}%)`),s.addColorStop(1,`hsla(0,0%,${f+n*30}%)`),r.fillStyle=s,r.fillRect(0,0,i,i)}function ne(r,e,n){_(r,14).forEach(i=>{if(i.length===14){let[o,s,f,u,a,t,l,h,d,m,g,b,y,w]=i,p=n/8+f*n*(7/8),x=e.createLinearGradient(o*n+p*h,0,o*n+p*y,n);x.addColorStop(0,`hsla(${u*360},${a*100}%,${t*100}%,${l})`),x.addColorStop(1,`hsla(${d*360},${m*100}%,${g*100}%,${b})`),e.fillStyle=x,e.translate(o*n,s*n),e.rotate(w*Math.PI),e.fillRect(-p/2,-p/2,p,p),e.setTransform(1,0,0,1,0,0)}})}function ae(r,e,n,i){_(r,7).forEach(o=>{if(o.length===7){let[s,f,u,a,t,l,h]=o;e.beginPath(),e.arc(n/2+s*n/2,f*n,u*i,0,2*Math.PI),e.fillStyle=`hsla(${a*360},${t*100}%,${l*100}%,${h})`,e.closePath(),e.fill()}})}function Ue({pub:r,size:e=200,dark:n=!1,embed:i=!0}={}){let{decoded:o,finals:s}=P(r),f=n?"#333":"#eee",u=` <linearGradient id="bg" x1="0" y1="0" x2="0" y2="1"> <stop offset="0%" stop-color="hsla(0,0%,${(n?0:70)+s[0]*30}%)"/> <stop offset="100%" stop-color="hsla(0,0%,${(n?0:70)+s[1]*30}%)"/> </linearGradient> `,a=(l,h,d=!1)=>_(l,7).map(m=>{if(m.length!==7)return"";let[g,b,y,w,p,x,C]=m,E=e/2+g*e/2,I=b*e,G=y*h;return` <circle cx="${E}" cy="${I}" r="${G}" fill="hsla(${w*360},${p*100}%,${x*100}%,${C})" style="${d?"mix-blend-mode:multiply;":""}" /> <circle cx="${e-E}" cy="${I}" r="${G}" fill="hsla(${w*360},${p*100}%,${x*100}%,${C})" style="${d?"mix-blend-mode:multiply;":""}" /> `}).join(""),t=` <svg width="${e}" height="${e}" viewBox="0 0 ${e} ${e}" xmlns="http://www.w3.org/2000/svg"> <defs>${u}</defs> <rect width="${e}" height="${e}" fill="url(#bg)"/> ${a(o[0],.42*e)} ${a(o[1],.125*e,!0)} </svg> `;if(i){let l={pub:r};i&&i==!0&&(l.content=i),t=S(t,l,"svg")}return`data:image/svg+xml;base64,${Buffer.from(t).toString("base64")}`}function Oe(r="gun-avatar"){document.addEventListener("DOMContentLoaded",()=>{let e=document.getElementsByClassName(r);for(let n in e){let i=e[n];i.dataset.round!=="false"&&(i.style.borderRadius="100%");let o=i.dataset.embed;if(i.dataset.embed!=="true")try{o=JSON.parse(i.dataset.embed)}catch{console.warn("Invalid content JSON in data-embed attribute")}i.src=D({pub:i.dataset.pub,size:Number(i.dataset.size),dark:!!i.dataset.dark,draw:i.dataset.draw,reflect:i.dataset.reflect!=="false",embed:o==="false"?!1:o||!0})}})}function Be(r="gun-avatar"){let e=!1;if(e)return;class n extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.img=document.createElement("img"),this.shadowRoot.append(this.img)}render(){this.pub=this.getAttribute("pub")||"1234123455Ute2tFhdjDQgzR-1234lfSlZxgEZKuquI.2F-j1234434U1234Asj-5lxnECG5TDyuPD8gEiuI123",this.size=this.hasAttribute("size")?Number(this.getAttribute("size")):400,this.draw=this.getAttribute("draw")||"circles",this.reflect=this.hasAttribute("reflect")?this.getAttribute("reflect")!=="false":!0,this.round=this.hasAttribute("round")||this.getAttribute("round")==="",this.dark=this.hasAttribute("dark")||this.getAttribute("dark")==="",this.embed=this.hasAttribute("embed")?this.getAttribute("embed")!=="false":!0;let o=this.getAttribute("embed");if(this.getAttribute("embed"))try{o=JSON.parse(this.getAttribute("embed"))}catch{console.warn("Invalid content JSON in embed attribute")}this.img.style.borderRadius=this.round?"100%":"0%",this.img.src=D({pub:this.pub,size:this.size,dark:this.dark,draw:this.draw,reflect:this.reflect,embed:o==="false"?!1:o||!0})}connectedCallback(){this.render()}static get observedAttributes(){return["pub","round","size","dark","draw","reflect","embed"]}attributeChangedCallback(){this.render()}}customElements.define(r,n),e=!0}T();export{S as embedInImage,A as error,$e as extractFromFile,D as gunAvatar,Oe as mountClass,Be as mountElement,P as parsePub}; //# sourceMappingURL=index.js.map