Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

d3-force

Package Overview
Dependencies
Maintainers
1
Versions
37
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

d3-force - npm Package Compare versions

Comparing version 1.0.0 to 1.0.1

2

build/d3-force.js

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

// https://d3js.org/d3-force/ Version 1.0.0. Copyright 2016 Mike Bostock.
// https://d3js.org/d3-force/ Version 1.0.1. Copyright 2016 Mike Bostock.
(function (global, factory) {

@@ -3,0 +3,0 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-quadtree'), require('d3-collection'), require('d3-dispatch'), require('d3-timer')) :

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

// https://d3js.org/d3-force/ Version 1.0.0. Copyright 2016 Mike Bostock.
// https://d3js.org/d3-force/ Version 1.0.1. Copyright 2016 Mike Bostock.
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-quadtree"),require("d3-collection"),require("d3-dispatch"),require("d3-timer")):"function"==typeof define&&define.amd?define(["exports","d3-quadtree","d3-collection","d3-dispatch","d3-timer"],t):t(n.d3=n.d3||{},n.d3,n.d3,n.d3,n.d3)}(this,function(n,t,e,r,i){"use strict";function u(n,t){function e(){var e,i,u=r.length,o=0,f=0;for(e=0;e<u;++e)i=r[e],o+=i.x,f+=i.y;for(o=o/u-n,f=f/u-t,e=0;e<u;++e)i=r[e],i.x-=o,i.y-=f}var r;return null==n&&(n=0),null==t&&(t=0),e.initialize=function(n){r=n},e.x=function(t){return arguments.length?(n=+t,e):n},e.y=function(n){return arguments.length?(t=+n,e):t},e}function o(n){return function(){return n}}function f(){return 1e-6*(Math.random()-.5)}function a(n){return n.x+n.vx}function c(n){return n.y+n.vy}function l(n){function e(){function n(n,t,r,i,u){var o=n.data,a=n.r,c=g+a;{if(!o)return t>y+c||i<y-c||r>d+c||u<d-c;if(o.index>e){var h=y-o.x-o.vx,s=d-o.y-o.vy,p=h*h+s*s;p<c*c&&(0===h&&(h=f(),p+=h*h),0===s&&(s=f(),p+=s*s),p=(c-(p=Math.sqrt(p)))/p*l,v.vx+=(h*=p)*(c=(a*=a)/(x+a)),v.vy+=(s*=p)*c,o.vx-=h*(c=1-c),o.vy-=s*c)}}}for(var e,o,v,y,d,g,x,s=i.length,p=0;p<h;++p)for(o=t.quadtree(i,a,c).visitAfter(r),e=0;e<s;++e)v=i[e],g=u[e],x=g*g,y=v.x+v.vx,d=v.y+v.vy,o.visit(n)}function r(n){if(n.data)return n.r=u[n.data.index];for(var t=n.r=0;t<4;++t)n[t]&&n[t].r>n.r&&(n.r=n[t].r)}var i,u,l=1,h=1;return"function"!=typeof n&&(n=o(null==n?1:+n)),e.initialize=function(t){var e,r=(i=t).length;for(u=new Array(r),e=0;e<r;++e)u[e]=+n(i[e],e,i)},e.iterations=function(n){return arguments.length?(h=+n,e):h},e.strength=function(n){return arguments.length?(l=+n,e):l},e.radius=function(t){return arguments.length?(n="function"==typeof t?t:o(+t),e):n},e}function h(n,t){return t}function v(n){function t(n){return 1/Math.min(y[n.source.index],y[n.target.index])}function r(t){for(var e=0,r=n.length;e<p;++e)for(var i,u,o,a,h,v,y,g=0;g<r;++g)i=n[g],u=i.source,o=i.target,a=o.x+o.vx-u.x-u.vx||f(),h=o.y+o.vy-u.y-u.vy||f(),v=Math.sqrt(a*a+h*h),v=(v-l[g])/v*t*c[g],a*=v,h*=v,o.vx-=a*(y=d[g]),o.vy-=h*y,u.vx+=a*(y=1-y),u.vy+=h*y}function i(){if(v){var t,r,i=v.length,o=n.length,f=e.map(v,g);for(t=0,y=new Array(i);t<i;++t)y[t]=0;for(t=0;t<o;++t)r=n[t],r.index=t,"object"!=typeof r.source&&(r.source=f.get(r.source)),"object"!=typeof r.target&&(r.target=f.get(r.target)),++y[r.source.index],++y[r.target.index];for(t=0,d=new Array(o);t<o;++t)r=n[t],d[t]=y[r.source.index]/(y[r.source.index]+y[r.target.index]);c=new Array(o),u(),l=new Array(o),a()}}function u(){if(v)for(var t=0,e=n.length;t<e;++t)c[t]=+x(n[t],t,n)}function a(){if(v)for(var t=0,e=n.length;t<e;++t)l[t]=+s(n[t],t,n)}var c,l,v,y,d,g=h,x=t,s=o(30),p=1;return null==n&&(n=[]),r.initialize=function(n){v=n,i()},r.links=function(t){return arguments.length?(n=t,i(),r):n},r.id=function(n){return arguments.length?(g=n,r):g},r.iterations=function(n){return arguments.length?(p=+n,r):p},r.strength=function(n){return arguments.length?(x="function"==typeof n?n:o(+n),u(),r):x},r.distance=function(n){return arguments.length?(s="function"==typeof n?n:o(+n),a(),r):s},r}function y(n){return n.x}function d(n){return n.y}function g(n){function t(){u(),x.call("tick",a),c<l&&(g.stop(),x.call("end",a))}function u(){var t,e,r=n.length;for(c+=(v-c)*h,d.each(function(n){n(c)}),t=0;t<r;++t)e=n[t],null==e.fx?e.x+=e.vx*=y:(e.x=e.fx,e.vx=0),null==e.fy?e.y+=e.vy*=y:(e.y=e.fy,e.vy=0)}function o(){for(var t,e=0,r=n.length;e<r;++e){if(t=n[e],t.index=e,isNaN(t.x)||isNaN(t.y)){var i=M*Math.sqrt(e),u=e*q;t.x=i*Math.cos(u),t.y=i*Math.sin(u)}(isNaN(t.vx)||isNaN(t.vy))&&(t.vx=t.vy=0)}}function f(t){return t.initialize&&t.initialize(n),t}var a,c=1,l=.001,h=1-Math.pow(l,1/300),v=0,y=.6,d=e.map(),g=i.timer(t),x=r.dispatch("tick","end");return null==n&&(n=[]),o(),a={tick:u,restart:function(){return g.restart(t),a},stop:function(){return g.stop(),a},nodes:function(t){return arguments.length?(n=t,o(),d.each(f),a):n},alpha:function(n){return arguments.length?(c=+n,a):c},alphaMin:function(n){return arguments.length?(l=+n,a):l},alphaDecay:function(n){return arguments.length?(h=+n,a):+h},alphaTarget:function(n){return arguments.length?(v=+n,a):v},velocityDecay:function(n){return arguments.length?(y=1-n,a):1-y},force:function(n,t){return arguments.length>1?(null==t?d.remove(n):d.set(n,f(t)),a):d.get(n)},find:function(t,e,r){var i,u,o,f,a,c=0,l=n.length;for(null==r?r=1/0:r*=r,c=0;c<l;++c)f=n[c],i=t-f.x,u=e-f.y,o=i*i+u*u,o<r&&(a=f,r=o);return a},on:function(n,t){return arguments.length>1?(x.on(n,t),a):x.on(n)}}}function x(){function n(n){var e,o=u.length,f=t.quadtree(u,y,d).visitAfter(r);for(c=n,e=0;e<o;++e)a=u[e],f.visit(i)}function e(){if(u){var n,t=u.length;for(l=new Array(t),n=0;n<t;++n)l[n]=+h(u[n],n,u)}}function r(n){var t,e,r,i,u,o=0;if(n.length){for(r=i=u=0;u<4;++u)(t=n[u])&&(e=t.value)&&(o+=e,r+=e*t.x,i+=e*t.y);n.x=r/o,n.y=i/o}else{t=n,t.x=t.data.x,t.y=t.data.y;do o+=l[t.data.index];while(t=t.next)}n.value=o}function i(n,t,e,r){if(!n.value)return!0;var i=n.x-a.x,u=n.y-a.y,o=r-t,h=i*i+u*u;if(o*o/x<h)return h<g&&(0===i&&(i=f(),h+=i*i),0===u&&(u=f(),h+=u*u),h<v&&(h=Math.sqrt(v*h)),a.vx+=i*n.value*c/h,a.vy+=u*n.value*c/h),!0;if(!(n.length||h>=g)){(n.data!==a||n.next)&&(0===i&&(i=f(),h+=i*i),0===u&&(u=f(),h+=u*u),h<v&&(h=Math.sqrt(v*h)));do n.data!==a&&(o=l[n.data.index]*c/h,a.vx+=i*o,a.vy+=u*o);while(n=n.next)}}var u,a,c,l,h=o(-30),v=1,g=1/0,x=.81;return n.initialize=function(n){u=n,e()},n.strength=function(t){return arguments.length?(h="function"==typeof t?t:o(+t),e(),n):h},n.distanceMin=function(t){return arguments.length?(v=t*t,n):Math.sqrt(v)},n.distanceMax=function(t){return arguments.length?(g=t*t,n):Math.sqrt(g)},n.theta=function(t){return arguments.length?(x=t*t,n):Math.sqrt(x)},n}function s(n){function t(n){for(var t,e=0,o=r.length;e<o;++e)t=r[e],t.vx+=(u[e]-t.x)*i[e]*n}function e(){if(r){var t,e=r.length;for(i=new Array(e),u=new Array(e),t=0;t<e;++t)i[t]=isNaN(u[t]=+n(r[t],t,r))?0:+f(r[t],t,r)}}var r,i,u,f=o(.1);return"function"!=typeof n&&(n=o(null==n?0:+n)),t.initialize=function(n){r=n,e()},t.strength=function(n){return arguments.length?(f="function"==typeof n?n:o(+n),e(),t):f},t.x=function(r){return arguments.length?(n="function"==typeof r?r:o(+r),e(),t):n},t}function p(n){function t(n){for(var t,e=0,o=r.length;e<o;++e)t=r[e],t.vy+=(u[e]-t.y)*i[e]*n}function e(){if(r){var t,e=r.length;for(i=new Array(e),u=new Array(e),t=0;t<e;++t)i[t]=isNaN(u[t]=+n(r[t],t,r))?0:+f(r[t],t,r)}}var r,i,u,f=o(.1);return"function"!=typeof n&&(n=o(null==n?0:+n)),t.initialize=function(n){r=n,e()},t.strength=function(n){return arguments.length?(f="function"==typeof n?n:o(+n),e(),t):f},t.y=function(r){return arguments.length?(n="function"==typeof r?r:o(+r),e(),t):n},t}var M=10,q=Math.PI*(3-Math.sqrt(5));n.forceCenter=u,n.forceCollide=l,n.forceLink=v,n.forceManyBody=x,n.forceSimulation=g,n.forceX=s,n.forceY=p,Object.defineProperty(n,"__esModule",{value:!0})});
{
"name": "d3-force",
"version": "1.0.0",
"version": "1.0.1",
"description": "Force-directed graph layout using velocity Verlet integration.",

@@ -31,3 +31,3 @@ "keywords": [

"prepublish": "npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-force.js -c -m -o build/d3-force.min.js",
"postpublish": "VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-force.js ../d3.github.com/d3-force.v1.js && cp build/d3-force.min.js ../d3.github.com/d3-force.v1.min.js && cd ../d3.github.com && git add d3-force.v1.js d3-force.v1.min.js && git commit -m \"d3-force ${VERSION}\" && git push && cd - && zip -j build/d3-force.zip -- LICENSE README.md build/d3-force.js build/d3-force.min.js"
"postpublish": "VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3-force/build/d3-force.js d3-force.v1.js && cp ../d3-force/build/d3-force.min.js d3-force.v1.min.js && git add d3-force.v1.js d3-force.v1.min.js && git commit -m \"d3-force ${VERSION}\" && git push && cd - && zip -j build/d3-force.zip -- LICENSE README.md build/d3-force.js build/d3-force.min.js"
},

@@ -43,3 +43,3 @@ "dependencies": {

"package-preamble": "0.0",
"rollup": "0.33",
"rollup": "0.34",
"tape": "4",

@@ -46,0 +46,0 @@ "uglify-js": "2"

@@ -79,3 +79,3 @@ # d3-force

At the end of each [tick](#simulation_tick), after the application of any forces, a node with a defined *node*.fx has *node*.x reset to this value and *node*.vx set to zero; likewise, a node with a defined *node*.fy has *node*.y reset to this value and *node*.vy set to zero.
At the end of each [tick](#simulation_tick), after the application of any forces, a node with a defined *node*.fx has *node*.x reset to this value and *node*.vx set to zero; likewise, a node with a defined *node*.fy has *node*.y reset to this value and *node*.vy set to zero. To unfix a node that was previously fixed, set *node*.fx and *node*.fy to null, or delete these properties.

@@ -86,11 +86,11 @@ If the specified array of *nodes* is modified, such as when nodes are added to or removed from the simulation, this method must be called again with the new (or changed) array to notify the simulation and bound forces of the change; the simulation does not make a defensive copy of the specified array.

If *alpha* is specified, sets the current alpha to the specified number in [0,1] and returns this simulation. If *alpha* is not specified, returns the current alpha value, which defaults to 1.
If *alpha* is specified, sets the current alpha to the specified number in the range [0,1] and returns this simulation. If *alpha* is not specified, returns the current alpha value, which defaults to 1.
<a name="simulation_alphaMin" href="#simulation_alphaMin">#</a> <i>simulation</i>.<b>alphaMin</b>([<i>min</i>])
If *min* is specified, sets the minimum *alpha* to the specified number in [0,1] and returns this simulation. If *min* is not specified, returns the current minimum *alpha* value, which defaults to 0.001. The simulation’s internal timer stops when the current [*alpha*](#simulation_alpha) is less than the minimum *alpha*. The default [alpha decay rate](#simulation_alphaDecay) of ~0.0228 corresponds to 300 iterations.
If *min* is specified, sets the minimum *alpha* to the specified number in the range [0,1] and returns this simulation. If *min* is not specified, returns the current minimum *alpha* value, which defaults to 0.001. The simulation’s internal timer stops when the current [*alpha*](#simulation_alpha) is less than the minimum *alpha*. The default [alpha decay rate](#simulation_alphaDecay) of ~0.0228 corresponds to 300 iterations.
<a name="simulation_alphaDecay" href="#simulation_alphaDecay">#</a> <i>simulation</i>.<b>alphaDecay</b>([<i>decay</i>])
If *decay* is specified, sets the [*alpha*](#simulation_alpha) decay rate to the specified number in [0,1] and returns this simulation. If *decay* is not specified, returns the current *alpha* decay rate, which defaults to 0.0228… = 1 - *pow*(0.001, 1 / 300) where 0.001 is the default [minimum *alpha*](#simulation_alphaMin).
If *decay* is specified, sets the [*alpha*](#simulation_alpha) decay rate to the specified number in the range [0,1] and returns this simulation. If *decay* is not specified, returns the current *alpha* decay rate, which defaults to 0.0228… = 1 - *pow*(0.001, 1 / 300) where 0.001 is the default [minimum *alpha*](#simulation_alphaMin).

@@ -101,7 +101,7 @@ The alpha decay rate determines how quickly the current alpha interpolates towards the desired [target *alpha*](#simulation_alphaTarget); since the default target *alpha* is zero, by default this controls how quickly the simulation cools. Higher decay rates cause the simulation to stabilize more quickly, but risk getting stuck in a local minimum; lower values cause the simulation to take longer to run, but typically converge on a better layout. To have the simulation run forever at the current *alpha*, set the *decay* rate to zero; alternatively, set a [target *alpha*](#simulation_alphaTarget) greater than the [minimum *alpha*](#simulation_alphaMin).

If *target* is specified, sets the current target [*alpha*](#simulation_alpha) to the specified number in [0,1] and returns this simulation. If *target* is not specified, returns the current target alpha value, which defaults to 0.
If *target* is specified, sets the current target [*alpha*](#simulation_alpha) to the specified number in the range [0,1] and returns this simulation. If *target* is not specified, returns the current target alpha value, which defaults to 0.
<a name="simulation_velocityDecay" href="#simulation_velocityDecay">#</a> <i>simulation</i>.<b>velocityDecay</b>([<i>decay</i>])
If *decay* is specified, sets the velocity decay factor to the specified number in [0,1] and returns this simulation. If *decay* is not specified, returns the current velocity decay factor, which defaults to 0.4. The decay factor is akin to atmospheric friction; after the application of any forces during a [tick](#simulation_tick), each node’s velocity is multiplied by 1 - *decay*. As with lowering the [alpha decay rate](#simulation_alphaDecay), less velocity decay may converge on a better solution, but risks numerical instabilities and oscillation.
If *decay* is specified, sets the velocity decay factor to the specified number in the range [0,1] and returns this simulation. If *decay* is not specified, returns the current velocity decay factor, which defaults to 0.4. The decay factor is akin to atmospheric friction; after the application of any forces during a [tick](#simulation_tick), each node’s velocity is multiplied by 1 - *decay*. As with lowering the [alpha decay rate](#simulation_alphaDecay), less velocity decay may converge on a better solution, but risks numerical instabilities and oscillation.

@@ -129,5 +129,7 @@ <a name="simulation_force" href="#simulation_force">#</a> <i>simulation</i>.<b>force</b>(<i>name</i>[, <i>force</i>])

* `tick` - after each [tick](#simulation_tick) of the simulation.
* `end` - after the simulation ends, when *alpha* < [*alphaMin*](#simulation_alphaMin).
* `tick` - after each tick of the simulation’s internal timer.
* `end` - after the simulation’s timer stops when *alpha* < [*alphaMin*](#simulation_alphaMin).
Note that *tick* events are not dispatched when [*simulation*.tick](#simulation_tick) is called manually; events are only dispatched by the internal timer and are intended for interactive rendering of the simulation. To affect the simulation, register [forces](#simulation_force) instead of modifying nodes’ positions or velocities inside a tick event listener.
See [*dispatch*.on](https://github.com/d3/d3-dispatch#dispatch_on) for details.

@@ -207,3 +209,3 @@

If *strength* is specified, sets the force strength to the specified number in [0,1] and returns this force. If *strength* is not specified, returns the current strength which defaults to 0.7.
If *strength* is specified, sets the force strength to the specified number in the range [0,1] and returns this force. If *strength* is not specified, returns the current strength which defaults to 0.7.

@@ -322,3 +324,3 @@ Overlapping nodes are resolved through iterative relaxation. For each node, the other nodes that are anticipated to overlap at the the at the next tick (using the anticipated positions ⟨*x* + *vx*,*y* + *vy*⟩) are determined; the node’s velocity is then modified to push the node out of each overlapping node. The change in velocity is dampened by the force’s strength such that the resolution of simultaneous overlaps can be blended together to find a stable solution.

The many-body (or *n*-body) force applies mutally amongst all [nodes](#simulation_nodes). It can be used to simulate gravity (attraction) if the [strength](#manyBody_strength) is positive, or electrostatic charge (repulsion) if the strength is negative. This implementation uses quadtrees and the [Barnes–Hut approximation](https://en.wikipedia.org/wiki/Barnes–Hut_simulation) to greatly improve performance; the accuracy can be customized using the [theta](#manyBody_theta) parameter.
The many-body (or *n*-body) force applies mutually amongst all [nodes](#simulation_nodes). It can be used to simulate gravity (attraction) if the [strength](#manyBody_strength) is positive, or electrostatic charge (repulsion) if the strength is negative. This implementation uses quadtrees and the [Barnes–Hut approximation](https://en.wikipedia.org/wiki/Barnes–Hut_simulation) to greatly improve performance; the accuracy can be customized using the [theta](#manyBody_theta) parameter.

@@ -325,0 +327,0 @@ Unlike links, which only affect two linked nodes, the charge force is global: every node affects every other node, even if they are on disconnected subgraphs.

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