UNPKG

lean-qr

Version:
2 lines (1 loc) 1.39 kB
"use strict";const t="http://www.w3.org/2000/svg",e=/[^-a-zA-Z0-9 .,:/#%()]/g,s=(e,s,o,r=[],n=e.createElementNS(t,s))=>(Object.entries(o).forEach((([t,e])=>n.setAttribute(t,e))),n.replaceChildren(...r),n),o=(t,s,o=[])=>[`<${t}`,...Object.entries(s).map((([t,s])=>` ${t}="${`${s}`.replaceAll(e,"")}"`)),">",...o,`</${t}>`].join(""),r=t=>{const e=new Map,s=[],o=t=>{const s=e.get(t);return e.delete(t),s};for(let r=0;r<=t.size;++r)for(let n=0;n<=t.size;++n){const i=t.get(n,r),a=t.get(n,r-1),c=[t.get(n-1,r)!==i&&n+" "+(r+1),n+" "+r,a!==i&&n+1+" "+r].filter((t=>t));if(c.length>1){i||c.reverse();const t=c.pop(),r=o(c[0])||[],n=o(t);r.push(...c),r===n?s.push(r):(n?n.unshift(...r):e.set(t,r),e.set(r[0],n||r))}}return s.map((t=>`M${t.join("L")}Z`)).join("")},n=(e,{on:s="black",off:o,padX:n=4,padY:i=4,width:a,height:c,scale:l=1},g,h)=>{const p=e.size+2*n,d=e.size+2*i;return g("svg",{xmlns:t,version:"1.1",viewBox:`${-n} ${-i} ${p} ${d}`,width:a??p*l,height:c??d*l,"shape-rendering":"crispedges"},[o?g("rect",{x:-n,y:-i,width:p,height:d,fill:o}):"",g("path",{d:r(e),fill:s})],h)},i=(t,e={})=>(e.xmlDeclaration?'<?xml version="1.0" encoding="UTF-8" ?>':"")+n(t,e,o);exports.toSvg=(t,e,o={})=>e.body?n(t,o,s.bind(0,e)):n(t,o,s.bind(0,e.ownerDocument),e),exports.toSvgDataURL=(t,e)=>"data:image/svg+xml;base64,"+btoa(i(t,{xmlDeclaration:1,...e})),exports.toSvgPath=r,exports.toSvgSource=i;