Socket
Socket
Sign inDemoInstall

perfect-freehand

Package Overview
Dependencies
Maintainers
1
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

perfect-freehand - npm Package Compare versions

Comparing version 0.5.3 to 0.5.4

tutorial/script.md

2

dist/cjs/index.js

@@ -1,1 +0,1 @@

var me=Object.defineProperty;var xe=e=>me(e,"__esModule",{value:!0});var ge=(e,t)=>{xe(e);for(var n in t)me(e,n,{get:t[n],enumerable:!0})};ge(exports,{default:()=>Ee,getStrokeOutlinePoints:()=>de,getStrokePoints:()=>fe});function d(e,t){return[e[0]+t[0],e[1]+t[1]]}function h(e,t){return[e[0]-t[0],e[1]-t[1]]}function W(e,t){return[t[0]-e[0],t[1]-e[1]]}function i(e,t){return[e[0]*t,e[1]*t]}function ke(e,t){return[e[0]/t,e[1]/t]}function y(e){return[e[1],-e[0]]}function le(e,t){return e[0]*t[0]+e[1]*t[1]}function Se(e){return Math.hypot(e[0],e[1])}function Pe(e){return e[0]*e[0]+e[1]*e[1]}function te(e,t){return Pe(h(e,t))}function I(e){return ke(e,Se(e))}function F(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function ae(e,t){return i(d(e,t),.5)}function G(e,t,n){let c=Math.sin(n),w=Math.cos(n),p=e[0]-t[0],k=e[1]-t[1],v=p*w-k*c,R=p*c+k*w;return[v+t[0],R+t[1]]}function H(e,t,n){return d(e,i(W(e,t),n))}function X(e,t){return e[0]===t[0]&&e[1]===t[1]}function be(e,t,n){return e*(1-n)+t*n}function ne(e,t,n){return Math.max(t,Math.min(n,e))}function ve(e){return Array.isArray(e[0])?e.map(([t,n,c=.5])=>[t,n,c]):e.map(({x:t,y:n,pressure:c=.5})=>[t,n,c])}function $(e,t,n,c=.5){return t?(c=ne(n(c),0,1),(t<0?be(e,e+e*ne(t,-.95,-.05),c):be(e-e*ne(t,.05,.95),e,c))/2):e/2}var{min:J,PI:Y}=Math;function fe(e,t={}){let{streamline:n=.5,last:c=!1}=t,{simulatePressure:w=!0}=t;if(e.length===0)return[];n=n/(w?3:2);let p=ve(e);p.length===1&&p.push([...d(p[0],[1,1]),p[0][2]]);let k=[],v={point:[p[0][0],p[0][1]],pressure:p[0][2],vector:[0,0],distance:0,runningLength:0};k.push(v);let R=p.length,V;for(let E=0;E<R;E++){V=p[E];let K=c&&E===R-1?V:H(v.point,V,1-n);if(X(v.point,K))continue;let M=I(h(v.point,K)),Z=F(K,v.point),B=v.runningLength+Z;v={point:K,pressure:V[2],vector:M,distance:Z,runningLength:B},k.push(v)}return k}function de(e,t={}){let{size:n=8,thinning:c=.5,smoothing:w=.5,simulatePressure:p=!0,easing:k=r=>r,start:v={},end:R={},last:V=!1}=t,{streamline:E=.5}=t;E/=2;let{cap:K=!0,taper:M=0,easing:Z=r=>r*(2-r)}=v,{cap:B=!0,taper:T=0,easing:he=r=>--r*r*r+1}=R,j=e.length;if(j===0)return[];let re=e[j-1].runningLength,f=[],S=[],z=e.slice(0,10).reduce((r,g)=>{let a=g.pressure;if(p){let o=J(1,g.distance/n),b=J(1,1-o);a=J(1,r+(b-r)*(o/4))}return(r+a)/2},e[0].pressure),P=$(n,c,k,e[j-1].pressure),ue,oe=e[0].vector,C=e[0].point,N=C,m=C,l=N,_=!0;for(let r=0;r<j-1;r++){let{pressure:g}=e[r],{point:a,vector:o,distance:b,runningLength:u}=e[r];if(r>0&&_&&u<n/2)continue;if(_&&(_=!1),c){if(p){let U=J(1,b/n),D=J(1,1-U);g=J(1,z+(D-z)*(U/4))}P=$(n,c,k,g)}else P=n/2;ue===void 0&&(ue=P);let s=u<M?Z(u/M):1,Q=re-u<T?he((re-u)/T):1;P=Math.max(.01,P*Math.min(s,Q));let O=e[r+1].vector,ee=le(o,O);if(ee<0){let U=i(y(oe),P);for(let D=0;D<1;D+=.2)l=G(d(a,U),a,Y*-D),m=G(h(a,U),a,Y*D),S.push(l),f.push(m);C=m,N=l;continue}let ce=i(y(H(O,o,ee)),P);m=h(a,ce),l=d(a,ce);let ie=r<2||ee<.25,pe=Math.pow(Math.max((u>n?n:n/2)*w,1),2);(ie||te(C,m)>pe)&&(f.push(H(C,m,E)),C=m),(ie||te(N,l)>pe)&&(S.push(H(N,l,E)),N=l),z=g,oe=o}let x=e[0],se=e[j-1],A=_||S.length<2||f.length<2;if(A&&(!(M||T)||V)){let r=0;for(let o=0;o<j;o++){let{pressure:b,runningLength:u}=e[o];if(u>n){r=$(n,c,k,b);break}}let g=h(x.point,i(y(I(W(se.point,x.point))),r||P)),a=[];for(let o=0,b=.1;o<=1;o+=b)a.push(G(g,x.point,Y*2*o));return a}let L=[],q=[];if(f.length>1&&S.length>1){l=S[1];for(let u=1;u<f.length;u++)if(!X(l,f[u])){m=f[u];break}if(K||M)if(!M&&!(T&&A)){if(!X(l,m)){let u=h(x.point,i(I(W(l,m)),F(l,m)/2));for(let s=0,Q=.1;s<=1;s+=Q){let O=G(u,x.point,Y*s);if(F(O,m)<1)break;L.push(O)}f.shift(),S.shift()}}else L.push(x.point,d(x.point,[.1,.1]));else if(!X(l,m)){let u=I(W(l,m)),s=F(l,m)/2;L.push(h(x.point,i(u,s*.95))),L.push(h(x.point,i(u,s))),L.push(d(x.point,i(u,s))),L.push(d(x.point,i(u,s*.95))),f.shift(),S.shift()}let r=f[f.length-1],g=S[S.length-1],a=ae(r,g),o=se.point,b=I(h(o,a));if(B||T)if(!T&&!(M&&A)){let u=d(o,i(y(b),P));for(let s=0,Q=.1;s<=1;s+=Q){let O=G(u,o,Y*3*s);if(F(O,g)<1)break;q.push(O)}}else q.push(o);else{let u=H(a,o,.95),s=P*.95;q.push(d(u,i(y(b),s))),q.push(d(o,i(y(b),s))),q.push(h(o,i(y(b),s))),q.push(h(u,i(y(b),s)))}}return f.concat(q,S.reverse(),L)}function ye(e,t={}){return de(fe(e,t),t)}var Ee=ye;
var me=Object.defineProperty;var ke=e=>me(e,"__esModule",{value:!0});var Se=(e,t)=>{ke(e);for(var n in t)me(e,n,{get:t[n],enumerable:!0})};Se(exports,{default:()=>Me,getStroke:()=>xe,getStrokeOutlinePoints:()=>he,getStrokePoints:()=>fe});function d(e,t){return[e[0]+t[0],e[1]+t[1]]}function h(e,t){return[e[0]-t[0],e[1]-t[1]]}function U(e,t){return[t[0]-e[0],t[1]-e[1]]}function i(e,t){return[e[0]*t,e[1]*t]}function Pe(e,t){return[e[0]/t,e[1]/t]}function y(e){return[e[1],-e[0]]}function le(e,t){return e[0]*t[0]+e[1]*t[1]}function ye(e){return Math.hypot(e[0],e[1])}function Ee(e){return e[0]*e[0]+e[1]*e[1]}function te(e,t){return Ee(h(e,t))}function D(e){return Pe(e,ye(e))}function F(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function ae(e,t){return i(d(e,t),.5)}function G(e,t,n){let c=Math.sin(n),R=Math.cos(n),p=e[0]-t[0],k=e[1]-t[1],v=p*R-k*c,w=p*c+k*R;return[v+t[0],w+t[1]]}function H(e,t,n){return d(e,i(U(e,t),n))}function W(e,t){return e[0]===t[0]&&e[1]===t[1]}function be(e,t,n){return e*(1-n)+t*n}function ne(e,t,n){return Math.max(t,Math.min(n,e))}function ve(e){return Array.isArray(e[0])?e.map(([t,n,c=.5])=>[t,n,c]):e.map(({x:t,y:n,pressure:c=.5})=>[t,n,c])}function $(e,t,n,c=.5){return t?(c=ne(n(c),0,1),(t<0?be(e,e+e*ne(t,-.95,-.05),c):be(e-e*ne(t,.05,.95),e,c))/2):e/2}var{min:I,PI:X}=Math;function fe(e,t={}){let{streamline:n=.5}=t,{simulatePressure:c=!0,last:R=!1}=t;if(e.length===0)return[];n=n/(c?3:2);let p=ve(e);p.length===1&&p.push([...d(p[0],[1,1]),p[0][2]]);let k=[],v={point:[p[0][0],p[0][1]],pressure:p[0][2],vector:[0,0],distance:0,runningLength:0};k.push(v);let w=p.length,T;for(let E=0;E<w;E++){T=p[E];let V=R&&E===w-1?T:H(v.point,T,1-n);if(W(v.point,V))continue;let M=D(h(v.point,V)),Y=F(V,v.point),A=v.runningLength+Y;v={point:V,pressure:T[2],vector:M,distance:Y,runningLength:A},k.push(v)}return k}var de=.3;function he(e,t={}){let{size:n=8,thinning:c=.5,smoothing:R=.5,simulatePressure:p=!0,easing:k=r=>r,start:v={},end:w={},last:T=!1}=t,{streamline:E=.5}=t;E/=2;let{cap:V=!0,taper:M=0,easing:Y=r=>r*(2-r)}=v,{cap:A=!0,taper:C=0,easing:ge=r=>--r*r*r+1}=w,K=e.length;if(K===0)return[];let re=e[K-1].runningLength,f=[],S=[],B=e.slice(0,10).reduce((r,g)=>{let a=g.pressure;if(p){let o=I(1,g.distance/n),b=I(1,1-o);a=I(1,r+(b-r)*(o*de))}return(r+a)/2},e[0].pressure),P=$(n,c,k,e[K-1].pressure),ue,oe=e[0].vector,_=e[0].point,N=_,m=_,l=N,Z=!0;for(let r=0;r<K-1;r++){let{pressure:g}=e[r],{point:a,vector:o,distance:b,runningLength:u}=e[r];if(r>0&&Z&&u<n/2)continue;if(Z&&(Z=!1),c){if(p){let Q=I(1,b/n),j=I(1,1-Q);g=I(1,B+(j-B)*(Q*de))}P=$(n,c,k,g)}else P=n/2;ue===void 0&&(ue=P);let s=u<M?Y(u/M):1,J=re-u<C?ge((re-u)/C):1;P=Math.max(.01,P*Math.min(s,J));let O=e[r+1].vector,ee=le(o,O);if(ee<0){let Q=i(y(oe),P);for(let j=0;j<1;j+=.2)l=G(d(a,Q),a,X*-j),m=G(h(a,Q),a,X*j),S.push(l),f.push(m);_=m,N=l;continue}let ce=i(y(H(O,o,ee)),P);m=h(a,ce),l=d(a,ce);let ie=r<2||ee<.25,pe=Math.pow(Math.max((u>n?n:n/2)*R,1),2);(ie||te(_,m)>pe)&&(f.push(H(_,m,E)),_=m),(ie||te(N,l)>pe)&&(S.push(H(N,l,E)),N=l),B=g,oe=o}let x=e[0],se=e[K-1],z=Z||S.length<2||f.length<2;if(z&&(!(M||C)||T)){let r=0;for(let o=0;o<K;o++){let{pressure:b,runningLength:u}=e[o];if(u>n){r=$(n,c,k,b);break}}let g=h(x.point,i(y(D(U(se.point,x.point))),r||P)),a=[];for(let o=0,b=.1;o<=1;o+=b)a.push(G(g,x.point,X*2*o));return a}let L=[],q=[];if(f.length>1&&S.length>1){l=S[1];for(let u=1;u<f.length;u++)if(!W(l,f[u])){m=f[u];break}if(V||M)if(!M&&!(C&&z)){if(!W(l,m)){let u=h(x.point,i(D(U(l,m)),F(l,m)/2));for(let s=0,J=.1;s<=1;s+=J){let O=G(u,x.point,X*s);if(F(O,m)<1)break;L.push(O)}f.shift(),S.shift()}}else L.push(x.point,d(x.point,[.1,.1]));else if(!W(l,m)){let u=D(U(l,m)),s=F(l,m)/2;L.push(h(x.point,i(u,s*.95))),L.push(h(x.point,i(u,s))),L.push(d(x.point,i(u,s))),L.push(d(x.point,i(u,s*.95))),f.shift(),S.shift()}let r=f[f.length-1],g=S[S.length-1],a=ae(r,g),o=se.point,b=D(h(o,a));if(A||C)if(!C&&!(M&&z)){let u=d(o,i(y(b),P));for(let s=0,J=.1;s<=1;s+=J){let O=G(u,o,X*3*s);if(F(O,g)<1)break;q.push(O)}}else q.push(o);else{let u=H(a,o,.95),s=P*.95;q.push(d(u,i(y(b),s))),q.push(d(o,i(y(b),s))),q.push(h(o,i(y(b),s))),q.push(h(u,i(y(b),s)))}}return f.concat(q,S.reverse(),L)}function xe(e,t={}){return he(fe(e,t),t)}var Me=xe;

@@ -85,4 +85,4 @@ // src/vec.ts

function getStrokePoints(points, options = {}) {
let { streamline = 0.5, last: isComplete = false } = options;
const { simulatePressure = true } = options;
let { streamline = 0.5 } = options;
const { simulatePressure = true, last: isComplete = false } = options;
if (points.length === 0)

@@ -124,2 +124,3 @@ return [];

}
var RATE_OF_CHANGE = 0.3;
function getStrokeOutlinePoints(points, options = {}) {

@@ -159,3 +160,3 @@ const {

const rp = min(1, 1 - sp);
pressure = min(1, acc + (rp - acc) * (sp / 4));
pressure = min(1, acc + (rp - acc) * (sp * RATE_OF_CHANGE));
}

@@ -184,3 +185,3 @@ return (acc + pressure) / 2;

const rp = min(1, 1 - sp);
pressure = min(1, prevPressure + (rp - prevPressure) * (sp / 4));
pressure = min(1, prevPressure + (rp - prevPressure) * (sp * RATE_OF_CHANGE));
}

@@ -318,4 +319,5 @@ radius = getStrokeRadius(size, thinning, easing, pressure);

src_default as default,
getStroke,
getStrokeOutlinePoints,
getStrokePoints
};

@@ -50,2 +50,3 @@ import type { StrokeOptions, StrokePoint } from './types';

export default getStroke;
export { getStroke };
export { StrokeOptions };
{
"version": "0.5.3",
"version": "0.5.4",
"name": "perfect-freehand",

@@ -64,3 +64,3 @@ "private": false,

},
"gitHead": "d2a334f923a58ffa869060b5ce80281f18af919d"
"gitHead": "b52b4d22b7b12fbfc5cff300c7416ca7786aba15"
}
/* eslint-disable */
const fs = require('fs')
const esbuild = require('esbuild')
const { gzip } = require('zlib')

@@ -8,34 +9,42 @@ const name = process.env.npm_package_name || ''

async function main() {
try {
esbuild.buildSync({
entryPoints: ['./src/index.ts'],
outdir: 'dist/cjs',
minify: true,
bundle: true,
format: 'cjs',
target: 'es6',
tsconfig: './tsconfig.build.json',
})
await esbuild.build({
entryPoints: ['./src/index.ts'],
outdir: 'dist/cjs',
minify: true,
bundle: true,
format: 'cjs',
target: 'es6',
tsconfig: './tsconfig.build.json',
})
esbuild.buildSync({
entryPoints: ['./src/index.ts'],
outdir: 'dist/esm',
minify: true,
bundle: true,
format: 'esm',
target: 'es6',
tsconfig: './tsconfig.build.json',
})
const esmResult = await esbuild.build({
entryPoints: ['./src/index.ts'],
outdir: 'dist/esm',
minify: true,
bundle: true,
format: 'esm',
target: 'es6',
tsconfig: './tsconfig.build.json',
metafile: true,
})
fs.copyFile('./README.md', './dist/README.md', (err) => {
if (err) throw err
let esmSize = 0
Object.values(esmResult.metafile.outputs).forEach((output) => {
esmSize += output.bytes
})
fs.readFile('./dist/esm/index.js', (_err, data) => {
gzip(data, (_err, result) => {
console.log(
`✔ ${name}: Built package. ${(esmSize / 1000).toFixed(2)}kb (${(
result.length / 1000
).toFixed(2)}kb minified)`
)
})
console.log(`✔ ${name}: Built package.`)
} catch (e) {
console.log(`× ${name}: Build failed due to an error.`)
console.log(e)
}
})
}
main()
main().catch((e) => {
console.log(`× ${name}: Build failed due to an error.`)
console.log(e)
})

@@ -22,3 +22,3 @@ /* eslint-disable */

}
console.log(`✔ ${name}: Rebuilt.`)
console.log(`✔ ${name}: Rebuilt perfect-freehand.`)
},

@@ -25,0 +25,0 @@ },

@@ -18,4 +18,4 @@ import { toPointsArray, getStrokeRadius } from './utils'

): StrokePoint[] {
let { streamline = 0.5, last: isComplete = false } = options
const { simulatePressure = true } = options
let { streamline = 0.5 } = options
const { simulatePressure = true, last: isComplete = false } = options

@@ -94,2 +94,4 @@ // If we don't have any points, return an empty array.

const RATE_OF_CHANGE = 0.3
/**

@@ -160,5 +162,8 @@ * ## getStrokeOutlinePoints

if (simulatePressure) {
// Speed of change - how fast should the the pressure changing?
const sp = min(1, curr.distance / size)
// Rate of change - how much of a change is there?
const rp = min(1, 1 - sp)
pressure = min(1, acc + (rp - acc) * (sp / 4))
// Accelerate the pressure
pressure = min(1, acc + (rp - acc) * (sp * RATE_OF_CHANGE))
}

@@ -220,3 +225,6 @@

const rp = min(1, 1 - sp)
pressure = min(1, prevPressure + (rp - prevPressure) * (sp / 4))
pressure = min(
1,
prevPressure + (rp - prevPressure) * (sp * RATE_OF_CHANGE)
)
}

@@ -507,2 +515,3 @@

export default getStroke
export { getStroke }
export { StrokeOptions }

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc