fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
5 lines • 3.98 kB
JavaScript
import{_defineProperty as e}from"../../_virtual/_@oxc-project_runtime@0.126.0/helpers/defineProperty.min.mjs";import{iMatrix as t}from"../constants.min.mjs";import{classRegistry as n}from"../ClassRegistry.min.mjs";import{uid as r}from"../util/internals/uid.min.mjs";import{pick as i}from"../util/misc/pick.min.mjs";import{matrixToSVG as a}from"../util/misc/svgExport.min.mjs";import{isPath as o}from"../util/typeAssertions.min.mjs";import{escapeXml as s}from"../util/lang_string.min.mjs";import{isSafeSvgStyleValue as c}from"../util/internals/svgExportCheck.min.mjs";import{Color as l}from"../color/Color.min.mjs";import{parseTransformAttribute as u}from"../parser/parseTransformAttribute.min.mjs";import{linearDefaultCoords as d,radialDefaultCoords as f}from"./constants.min.mjs";import{parseColorStops as p}from"./parser/parseColorStops.min.mjs";import{parseGradientUnits as m,parseType as h}from"./parser/misc.min.mjs";import{parseCoords as g}from"./parser/parseCoords.min.mjs";var _=class{constructor(e){let{type:t=`linear`,gradientUnits:n=`pixels`,coords:i={},colorStops:a=[],offsetX:o=0,offsetY:s=0,gradientTransform:c,id:l}=e||{};Object.assign(this,{type:t,gradientUnits:n,coords:{...t===`radial`?f:d,...i},colorStops:a,offsetX:o,offsetY:s,gradientTransform:c,id:l?`${l}_${r()}`:r()})}addColorStop(e){for(let t in e)this.colorStops.push({offset:parseFloat(t),color:e[t]});return this}toObject(e){return{...i(this,e),type:this.type,coords:{...this.coords},colorStops:this.colorStops.map(e=>({...e})),offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?[...this.gradientTransform]:void 0}}toSVG(e,{additionalTransform:n}={}){let r=[],i=this.gradientTransform?this.gradientTransform.concat():t.concat(),u=this.gradientUnits===`pixels`?`userSpaceOnUse`:`objectBoundingBox`,d=this.colorStops.map(e=>({...e})).sort((e,t)=>e.offset-t.offset),f=-this.offsetX,p=-this.offsetY;u===`objectBoundingBox`?(f/=e.width,p/=e.height):(f+=e.width/2,p+=e.height/2),o(e)&&this.gradientUnits!==`percentage`&&(f-=e.pathOffset.x,p-=e.pathOffset.y),i[4]-=f,i[5]-=p;let m=[`id="SVGID_${s(String(this.id))}"`,`gradientUnits="${u}"`,`gradientTransform="${n?n+` `:``}${a(i)}"`,``].join(` `),h=e=>parseFloat(String(e));if(this.type===`linear`){let{x1:e,y1:t,x2:n,y2:i}=this.coords,a=h(e),o=h(t),s=h(n),c=h(i);r.push(`<linearGradient `,m,` x1="`,a,`" y1="`,o,`" x2="`,s,`" y2="`,c,`">
`)}else if(this.type===`radial`){let{x1:e,y1:t,x2:n,y2:i,r1:a,r2:o}=this.coords,s=h(e),c=h(t),l=h(n),u=h(i),f=h(a),p=h(o),g=f>p;r.push(`<radialGradient `,m,` cx="`,g?s:l,`" cy="`,g?c:u,`" r="`,g?f:p,`" fx="`,g?l:s,`" fy="`,g?u:c,`">
`),g&&(d.reverse(),d.forEach(e=>{e.offset=1-e.offset}));let _=Math.min(f,p);if(_>0){let e=_/Math.max(f,p);d.forEach(t=>{t.offset+=e*(1-t.offset)})}}return d.forEach(({color:e,offset:t})=>{let n=String(e),i=c(n)?n:new l(n).toRgba();r.push(`<stop offset="${100*t}%" style="stop-color:${s(i)};"/>\n`)}),r.push(this.type===`linear`?`</linearGradient>`:`</radialGradient>`,`
`),r.join(``)}toLive(e){let{x1:t,y1:n,x2:r,y2:i,r1:a,r2:o}=this.coords,s=this.type===`linear`?e.createLinearGradient(t,n,r,i):e.createRadialGradient(t,n,a,r,i,o);return this.colorStops.forEach(({color:e,offset:t})=>{s.addColorStop(t,e)}),s}static async fromObject(e){let{colorStops:t,gradientTransform:n}=e;return new this({...e,colorStops:t?t.map(e=>({...e})):void 0,gradientTransform:n?[...n]:void 0})}static fromElement(e,t,n){let r=m(e),i=t._findCenterFromElement();return new this({id:e.getAttribute(`id`)||void 0,type:h(e),coords:g(e,{width:n.viewBoxWidth||n.width,height:n.viewBoxHeight||n.height}),colorStops:p(e,n.opacity),gradientUnits:r,gradientTransform:u(e.getAttribute(`gradientTransform`)||``),...r===`pixels`?{offsetX:t.width/2-i.x,offsetY:t.height/2-i.y}:{offsetX:0,offsetY:0}})}};e(_,`type`,`Gradient`),n.setClass(_,`gradient`),n.setClass(_,`linear`),n.setClass(_,`radial`);export{_ as Gradient};
//# sourceMappingURL=Gradient.min.mjs.map