UNPKG

lean-qr

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