UNPKG

lean-qr

Version:
2 lines (1 loc) 1.35 kB
"use strict";const t="http://www.w3.org/2000/svg",e=(e,s,o,r=[],n=e.createElementNS(t,s))=>(Object.entries(o).map(([t,e])=>n.setAttribute(t,e)),n.replaceChildren(...r),n),s=(t,e,s,o=[])=>[`<${e}`,...Object.entries(s).map(([t,e])=>` ${t}="${`${e}`.replace(/[^ -~]|["&]/g,"")}"`),">",...o,`</${e}>`].join(""),o=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("")},r=(e,{on:s="black",off:r,pad:n=4,padX:i=n,padY:a=n,width:c,height:l,scale:g=1},h,p,d)=>{const x=e.size+2*i,$=e.size+2*a;return h(p,"svg",{xmlns:t,version:"1.1",viewBox:`${-i} ${-a} ${x} ${$}`,width:c??x*g,height:l??$*g,"shape-rendering":"crispedges"},[r?h(p,"rect",{x:-i,y:-a,width:x,height:$,fill:r}):"",h(p,"path",{d:o(e),fill:s})],d)},n=(t,e={})=>(e.xmlDeclaration?'<?xml version="1.0" encoding="UTF-8" ?>':"")+r(t,e,s);exports.toSvg=(t,s,o={})=>s.body?r(t,o,e,s):r(t,o,e,s.ownerDocument,s),exports.toSvgDataURL=(t,e)=>"data:image/svg+xml;base64,"+btoa(n(t,{xmlDeclaration:1,...e})),exports.toSvgPath=o,exports.toSvgSource=n;