@graphery/svg
Version:
Graphery SVG library
1 lines • 2.45 kB
JavaScript
let n=new WeakMap;function p(r,e){Object.assign(e.prototype,{resizeObserver(s){let a=this,t=this.el.tagName.toLowerCase()==="svg"?this.el:this.parent("svg").el;if(n.has(t))return n.get(t).push(s);n.set(t,[s]);let l={};let c=()=>{let o=t.getScreenCTM();if(o!==null&&(o.a!==l.a||o.b!==l.b||o.c!==l.c||o.d!==l.d||o.e!==l.e||o.f!==l.f)){let k=n.get(t);for(let m of k)m(a,o,l);l=o}window.requestAnimationFrame(c)};return c(),a}})}function b(r,e){Object.assign(e.prototype,{styleObserver(s,a){let t=this,l=this.el.tagName.toLowerCase()==="svg"?this.el:this.closest("svg").el;return S(l,s,a),t}})}let v=100;let u=0,f=0,i=new Map,d=!1;function S(r,e,s){typeof e=="string"&&(e=[e]);let a;i.has(r)?a=i.get(r):(a={computedStyles:getComputedStyle(r),styles:{},keys:[]},i.set(r,a));for(let t of e)a.styles[t]||(a.styles[t]={lastValue:a.computedStyles[t],callbacks:new Set},a.keys.push(t)),a.styles[t].callbacks.add(s);g()}function g(r){if(!d||r-f<v){d=!0,u=window.requestAnimationFrame(g);return}if(!r)return;f=r;let e=null;for(let[s,a]of i.entries()){for(let t of a.keys){let l=a.computedStyles.getPropertyValue(t),c=a.styles[t].lastValue;if(l!==c){e||(e=new Map);for(let o of a.styles[t].callbacks)e.has(o)?e.get(o)[t]={current:l,last:c}:e.set(o,{[t]:{current:l,last:c}});a.styles[t].lastValue=l}}if(e){for(let[t,l]of e.entries())t.call(s,l);e=null}}u=window.requestAnimationFrame(g)}function y(r,e){p(r,e),b(r,e),Object.assign(e.prototype,{keepAspect(){let s=this.closest("svg");switch(this.el.tagName.toLowerCase()){case"text":O(s,this);break;case"line":V(s,this);break;default:h(s,this)}return this}})}function h(r,e){let s=r.getScreenCTM()||{a:1,d:1},a=0;r.resizeObserver((t,l)=>{let c=Math.max(l.a/s.a,l.d/s.d);e.stroke_width(a/c)}),r.styleObserver("stroke-width",t=>{let l=r.getScreenCTM();a=Number.parseFloat(t["stroke-width"].current);let c=Math.max(l.a/s.a,l.d/s.d);e.stroke_width(a/c)})}function O(r,e){let s=r.getScreenCTM()||{a:1,d:1};e.el._keepX=e.x(),e.el._keepY=e.y(),r.resizeObserver((a,t)=>{e.transform(`scale( ${s.a/t.a}, ${s.d/t.d})`),e.x(e.el._keepX/(s.a/t.a)),e.y(e.el._keepY/(s.d/t.d))})}function V(r,e){let s=r.getScreenCTM()||{a:1,d:1};e.el._keepX1=e.x1(),e.el._keepX2=e.x2(),e.el._keepY1=e.y1(),e.el._keepY2=e.y2(),r.resizeObserver((a,t)=>{e.transform(`scale( ${s.a/t.a}, ${s.d/t.d})`),e.x1(e.el._keepX1/(s.a/t.a)),e.x2(e.el._keepX2/(s.a/t.a)),e.y1(e.el._keepY1/(s.d/t.d)),e.y2(e.el._keepY2/(s.d/t.d))})}var j=y;export{j as default};