UNPKG

lean-qr

Version:
2 lines (1 loc) 1.36 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).map((([t,e])=>n.setAttribute(t,e))),n.replaceChildren(...r),n),o=(t,s,o,r=[])=>[`<${s}`,...Object.entries(o).map((([t,s])=>` ${t}="${`${s}`.replace(e,"")}"`)),">",...r,`</${s}>`].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-1,r)^i&&n+" "+(r+1),n+" "+r,t.get(n,r-1)^i&&n+1+" "+r].filter((t=>t));if(a.length>1){i||a.reverse();const t=a.pop(),r=o(a[0])||[],n=o(t);r.push(...a),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,p)=>{const d=e.size+2*n,x=e.size+2*i;return g(h,"svg",{xmlns:t,version:"1.1",viewBox:`${-n} ${-i} ${d} ${x}`,width:a??d*l,height:c??x*l,"shape-rendering":"crispedges"},[o?g(h,"rect",{x:-n,y:-i,width:d,height:x,fill:o}):"",g(h,"path",{d:r(e),fill:s})],p)},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,e):n(t,o,s,e.ownerDocument,e),exports.toSvgDataURL=(t,e)=>"data:image/svg+xml;base64,"+btoa(i(t,{xmlDeclaration:1,...e})),exports.toSvgPath=r,exports.toSvgSource=i;