1 line
430 KiB
Plaintext
1 line
430 KiB
Plaintext
{"_id":"d3-transition","_rev":"57-412df63bf104282a75843bf035d17248","name":"d3-transition","description":"Animated transitions for D3 selections.","dist-tags":{"latest":"3.0.1","next":"2.0.0-rc.6"},"versions":{"0.0.2":{"name":"d3-transition","version":"0.0.2","description":"Animated transitions for D3 selections.","jsnext:main":"index","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && d3-bundler -- test/d3.js > build/d3.js","test":"faucet `find test -name '*-test.js'`"},"devDependencies":{"d3-bundler":"~0.2.2","d3-selection":"~0.4.5","faucet":"0.0","jsdom":"3","requirejs":"2","tape":"4"},"gitHead":"80490a22cfa67e1673050d355aed9a2fac7ac6fe","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"homepage":"https://github.com/d3/d3-transition","_id":"d3-transition@0.0.2","_shasum":"018df3fe5389d661cdc3a6dabb863fac0b95b827","_from":".","_npmVersion":"2.7.5","_nodeVersion":"0.12.2","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mbostock@gmail.com"}],"dist":{"shasum":"018df3fe5389d661cdc3a6dabb863fac0b95b827","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.0.2.tgz","integrity":"sha512-V2kHO37W6M9hKwOEHgKq6SYm3lGeW24SOttE96tu1DF+jm8Ri2a1RkV7/ZtNbupcCjbFT1DCHS5JpJbigp9hBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICeW4P1P0L6rlGAJ3TjfP4lWSL4S5YyZHDcDYrI3hVVVAiEA8S+q4cN5DxgicIWYu46ZOXOKe+AfWPMDfAiXN53veEw="}]},"directories":{}},"0.0.3":{"name":"d3-transition","version":"0.0.3","description":"Animated transitions for D3 selections.","main":"build/d3","jsnext:main":"index","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && d3-bundler --polyfill-raf --format=cjs -- d3.js > build/d3.js","test":"faucet `find test -name '*-test.js'`","prepublish":"npm run test"},"devDependencies":{"d3-bundler":"~0.2.5","d3-ease":"~0.0.1","d3-selection":"~0.4.5","faucet":"0.0","jsdom":"3","tape":"4"},"gitHead":"4ff96a1942848862f2d5a1a8b64007312499d7fb","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"homepage":"https://github.com/d3/d3-transition","_id":"d3-transition@0.0.3","_shasum":"32e96b52b82fcca5e08a71099abbf155356166ff","_from":".","_npmVersion":"2.7.5","_nodeVersion":"0.12.2","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"shasum":"32e96b52b82fcca5e08a71099abbf155356166ff","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.0.3.tgz","integrity":"sha512-6lFSJfw5ZTI5QLAexSNhwcbrqoMxoJAMlNkN6VA9xliiWKxf9nt9fPfx8tfdp3RMX1aUIQnTtlNdmLpkieBETQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQh9sLFVa6FHwNjoNqu1y2L1fErPn2Q2KvmZvmjSfENgIhAPrT5PxfLxRuwL45ahpeTP/kes3I1Q7zm6e3msrwYZHo"}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"directories":{}},"0.0.4":{"name":"d3-transition","version":"0.0.4","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3","jsnext:main":"index","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && d3-bundler --polyfill-map --polyfill-raf --format=umd --name=d3 -- d3.js > build/d3.js","test":"faucet `find test -name '*-test.js'`","prepublish":"npm run test && uglifyjs build/d3.js -c -m -o build/d3.min.js && rm -f build/d3.zip && zip -j build/d3.zip -- LICENSE README.md build/d3.js build/d3.min.js"},"devDependencies":{"d3-bundler":"~0.2.5","d3-ease":"~0.1.1","d3-selection":"~0.4.5","d3-timer":"~0.0.1","faucet":"0.0","jsdom":"3","tape":"4","uglifyjs":"2"},"gitHead":"350b9aca9961b883083a3301a6b5c4e3eb08f26d","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.0.4","_shasum":"334f51a856a5070669a4ff2743f78db3f492196a","_from":".","_npmVersion":"2.7.5","_nodeVersion":"0.12.2","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"334f51a856a5070669a4ff2743f78db3f492196a","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.0.4.tgz","integrity":"sha512-9LJXG71WIxzJ4fjAnYz5bc4tYLdEWiw7AWczIxBu6nvuxi7mW9lWL4odlS7l3BqI/BFswIYWh9GgFmlJR2v1Bg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB8ZF30xhSyA9uh00j8ZheFtCEQnSpaYcksz887r0RB1AiEAgq35Kg2gZOtriqWiyJqY1PnZSyBFtCA4c/lx2MRYbzg="}]},"directories":{}},"0.0.5":{"name":"d3-transition","version":"0.0.5","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/transition.cjs","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && d3-bundler -x -f cjs -o build/transition.cjs.js","test":"faucet `find test -name '*-test.js'`","prepublish":"npm run test && d3-bundler -n transition -o build/transition.js && uglifyjs build/transition.js -c -m -o build/transition.min.js && rm -f build/transition.zip && zip -j build/transition.zip -- LICENSE README.md build/transition.js build/transition.min.js"},"dependencies":{"d3-ease":"~0.1.4","d3-selection":"~0.4.10","d3-timer":"~0.0.5"},"devDependencies":{"d3-bundler":"~0.4.0","faucet":"0.0","jsdom":"7","tape":"4","uglify-js":"2"},"gitHead":"1eb39416beb0ec2733b677ecff9b9a9a048e2e50","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.0.5","_shasum":"5310c743a041e9d9523710b41b91c7e55289fea4","_from":".","_npmVersion":"3.3.9","_nodeVersion":"5.0.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"5310c743a041e9d9523710b41b91c7e55289fea4","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.0.5.tgz","integrity":"sha512-SdCrpu5INbZznZXiJUsbexCXpk1swZ0BrjMoKq4g38bP8KO+0k2TCbk56uA58SLINtCRzVH5ItYoHcbGqhZefA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAaxm98xeQPVzoNzHoWGSDyZ3i88nDwMEV0PZqpo96xJAiEAnbuCGi24BtSV6dJBN2wHfTxIzqRFnWV3NFm99h0AvCI="}]},"directories":{}},"0.0.6":{"name":"d3-transition","version":"0.0.6","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-ease:d3_ease,d3-selection:d3_selection,d3-timer:d3_timer -u d3-transition -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'`","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-ease":"~0.1.5","d3-selection":"~0.4.12","d3-timer":"~0.0.6"},"devDependencies":{"faucet":"0.0","rollup":"0.20.5","jsdom":"7","tape":"4","uglify-js":"2"},"gitHead":"f038f2d62775bff3b457c8627df32d38eeffccc9","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.0.6","_shasum":"bcb3af8632cea613834d929c0d481dc454722089","_from":".","_npmVersion":"3.3.9","_nodeVersion":"5.0.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"bcb3af8632cea613834d929c0d481dc454722089","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.0.6.tgz","integrity":"sha512-HCdFKwCPYSAhqgdfuP/e+vWLLcl2piHz45IMX+Y+QaXt/kfctU8E0LLjUSba6mrPKdE20QNeNY2iDTtfSHgGYQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC345Mokth0aiGSLWrcnR6GcS2b069irLA2VeQEfksoSQIhAKkD2i1T9igMh15W9EZEdfJYR0usUwBQvA93oUQFnGsH"}]},"directories":{}},"0.0.7":{"name":"d3-transition","version":"0.0.7","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git tag -am \"Release $VERSION.\" v${VERSION} && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.0.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.0.min.js && cd ../d3.github.com && git add d3-transition.v0.0.js d3-transition.v0.0.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-ease":"~0.6.0","d3-interpolate":"~0.5.0","d3-selection":"~0.6.7","d3-timer":"~0.1.2"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"15b0c34435d60b260837d72e400e2f0593027b91","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.0.7","_shasum":"323a44c4c4ff8411591dabf338c28560a46d14a1","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"323a44c4c4ff8411591dabf338c28560a46d14a1","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.0.7.tgz","integrity":"sha512-mciB5+Gch6RMqZAID8awTmuioLoFUNtRBHdBIrpIy5+7SSs3lnCzh1ygh3j1XUBHrtxEAf8vn5K4J5nZOuVDdA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHC0TWQS0ZOQcjBxJGJHXQMYGVtDpxA6cnoFjp1taQZSAiEA7lTaClo7WhJpPIqgVtlwZyZ+PZ/tEcYuQFNFlqPkSh8="}]},"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/d3-transition-0.0.7.tgz_1454522456315_0.3310138981323689"},"directories":{}},"0.0.8":{"name":"d3-transition","version":"0.0.8","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git tag -am \"Release $VERSION.\" v${VERSION} && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.0.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.0.min.js && cd ../d3.github.com && git add d3-transition.v0.0.js d3-transition.v0.0.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.3.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.6.7","d3-timer":"~0.1.2"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"6715fd9e50c271a07dc30e90983481c3bbd2f1f4","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.0.8","_shasum":"bc478e5b7c195deb147c6c1b27eaad8db34f8433","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"bc478e5b7c195deb147c6c1b27eaad8db34f8433","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.0.8.tgz","integrity":"sha512-7kd2bA3YbabrHm428cvlUz9tc+aye0RW2qPWURVwxqyCLysgvfy5aTszfeo1UW7dpUgbxMZCvQz2GXsmGcLQcw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBXfCLky5FB6qgG5ZROnxbHokk5+7nXMDImVvPTVfk93AiAu4mFNqGc4NeyvZOUHPxbBb5vi8By22qnbGt8jtEnHGA=="}]},"_npmOperationalInternal":{"host":"packages-6-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.0.8.tgz_1454636946259_0.023632526397705078"},"directories":{}},"0.0.9":{"name":"d3-transition","version":"0.0.9","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git tag -am \"Release $VERSION.\" v${VERSION} && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.0.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.0.min.js && cd ../d3.github.com && git add d3-transition.v0.0.js d3-transition.v0.0.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.6.8","d3-timer":"~0.3.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"feed95a30e484257e12deef6235ca9153f47e233","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.0.9","_shasum":"ded19dbf8b31b43ae3efdf376869653c18cf9851","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"ded19dbf8b31b43ae3efdf376869653c18cf9851","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.0.9.tgz","integrity":"sha512-U1YZulMj7hlN7Y6ZU32QePwb9l162VU9XC6l/IQcXhOzcl/cyJHzI6gkdFjxLm1EyWwPLAluog1xwd5AchM/RA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAfY5V+yx/4WWmaNXzzhabQj6mzpi+DO/6AINTAACAMnAiEAuOyCbYwwXrw0rwQvir/oZZwoZz0MCrKH+F+N62jYGPk="}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.0.9.tgz_1455133995521_0.9918528539128602"},"directories":{}},"0.1.0":{"name":"d3-transition","version":"0.1.0","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git tag -am \"Release $VERSION.\" v${VERSION} && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.1.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.1.min.js && cd ../d3.github.com && git add d3-transition.v0.1.js d3-transition.v0.1.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.6.10","d3-timer":"~0.3.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"45c28c439a66dbb85c8b0c7590d9c3bbfb1ae4e8","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.1.0","_shasum":"c4ca1d256ca05500b1df0a004ce918e35472d0aa","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"c4ca1d256ca05500b1df0a004ce918e35472d0aa","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.1.0.tgz","integrity":"sha512-rjFGiQRB8xbVlo5MUAVHkJLSn//JHvIqocKR0n8K0oul218FcJ1Irh5zkeAAm3iyu40XVrOgBHPsCfR6vIObXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFrWe5dzToChBzTTMHgPwd2FAAYgDOwYhWZs7VX8Vn1AIhALdtL0HrSEdQrd0VrbH0YcZ2GAEgn6nXAF5jhKYOXvLj"}]},"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/d3-transition-0.1.0.tgz_1455231726130_0.586096626939252"},"directories":{}},"0.1.1":{"name":"d3-transition","version":"0.1.1","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git tag -am \"Release $VERSION.\" v${VERSION} && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.1.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.1.min.js && cd ../d3.github.com && git add d3-transition.v0.1.js d3-transition.v0.1.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.6.10","d3-timer":"~0.3.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"4d6f3a6b24fa994173fb2f4ee5e9142ffb24aa5c","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.1.1","_shasum":"065df4b98cd3a5fdc53c40f6dff54830dbb060a9","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"065df4b98cd3a5fdc53c40f6dff54830dbb060a9","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.1.1.tgz","integrity":"sha512-P67hGb91E43DBzrpy2bBHsgDwOZHfrZlH8qCJw3vjnbKZRIjuejag5B8Nd395rNiFY0ZpIpY6Yh3l7bpbh+RRQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5RS0Vd2nf49ft4VlRbboox3wCXhQjAoMshmHCIR/KlQIhAKtygDUrYEC/8tyXamx75CxjfI3dzeBJbPCwtj7MUHez"}]},"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/d3-transition-0.1.1.tgz_1455313945444_0.9764890088699758"},"directories":{}},"0.1.2":{"name":"d3-transition","version":"0.1.2","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git tag -am \"Release $VERSION.\" v${VERSION} && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.1.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.1.min.js && cd ../d3.github.com && git add d3-transition.v0.1.js d3-transition.v0.1.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.6.10","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"96c50352d0a7e2e809c4cd30b8892da9223ac486","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.1.2","_shasum":"de7f99d4f1c2036fcd39fe0840fe3b8177ffeb7c","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"de7f99d4f1c2036fcd39fe0840fe3b8177ffeb7c","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.1.2.tgz","integrity":"sha512-2RfZ6oLa6JvW+fg/3+89+P8+fSt0r62lwAo27zlJCRykm1rNUSnopQfbl+xHg2eJyfAxy/6/90UmzcHgsJpWPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpW6HsaGfmbWMqj+mHof9lAIn9LNFrKF44+RXQtFYD0AIhAMJS3rF8/9eFS/YzMKGRVDXBwUcUNOi5AC/mk2LzLmde"}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.1.2.tgz_1455318018094_0.22408281499519944"},"directories":{}},"0.1.3":{"name":"d3-transition","version":"0.1.3","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.1.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.1.min.js && cd ../d3.github.com && git add d3-transition.v0.1.js d3-transition.v0.1.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.6.10","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"ba090c2309ebc33b275c59d99cf9e71bec3139e1","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.1.3","_shasum":"6a7cf7a677e9c562b7118b31a35ea0b5583b527c","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"shasum":"6a7cf7a677e9c562b7118b31a35ea0b5583b527c","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.1.3.tgz","integrity":"sha512-R1sUtRXik7MlUrHPrZIR+xQAkyrWwzEJepp+Uh0IRAi2FmBv57noC9GdTFmrUJT4CraksNsRKQTnP9tsbAWlyQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7chNQImqaz/pema9EprHIVDgY/ttMQ/DicV6brg3B7AIhANrOj/r8K0pMI2X6M+XHls+EpPfG/qYM2VvQsPhQPwN/"}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.1.3.tgz_1456099846424_0.1388462190516293"},"directories":{}},"0.2.0":{"name":"d3-transition","version":"0.2.0","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"f57cfb67fcda5e263df8a7f5ab5069537a8d3f80","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.0","_shasum":"41c5a3a07a3a87319a90567defa0decec799b92e","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.6.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"41c5a3a07a3a87319a90567defa0decec799b92e","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.0.tgz","integrity":"sha512-BlaAqLk6iU4ZHI9UvdqV57ywKyklzJHzMtC8O2yj2GtNhF0DQ6cdP1C/ve0XJWspH7gzWTLJFwYL6G6qr94YNA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3DBMBCu6MjpvfQEbi8WOzk4GPnXf+ZMwLF5WjO1Ca8AiBroOpXj3ru+42EfGIXSnipl7P8DB2kiq0MIXq5h0mfew=="}]},"_npmOperationalInternal":{"host":"packages-6-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.0.tgz_1456184074376_0.43749488261528313"},"directories":{}},"0.2.1":{"name":"d3-transition","version":"0.2.1","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"56655da73248481ed03d8c60f8e41031a1716a00","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.1","_shasum":"e751b3f967691d5933522e92a445c4cfa3cce251","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.6.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"e751b3f967691d5933522e92a445c4cfa3cce251","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.1.tgz","integrity":"sha512-s+t6ziY1sftQ6XCVTB+MJAG+JR3LxG+PNyPshvMIR/pWO2pk1sCjxiyU0d4EAqgSfUfnzaajwpXEp5QtIbu3kw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbhiCFXPwqYOf32QouJY6BV0pAvSqjEA17myancYopogIhALFjX+Wholqzpy6c2lF9Zfyw00Fcxqb+RwqQvOiK4P4b"}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.1.tgz_1456203165719_0.8083444284275174"},"directories":{}},"0.2.2":{"name":"d3-transition","version":"0.2.2","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.5.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"04d39f73b97bb33c98d8147c2dd2b4c6a07c070e","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.2","_shasum":"e1292912f2f528ebccd172bd6ec1e6d885b96563","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.6.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"e1292912f2f528ebccd172bd6ec1e6d885b96563","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.2.tgz","integrity":"sha512-yXjIG9ZWReurmV+5RSCZjXn9860udWt5zL5zJFHhCSWCwrY9nVIoYUqowSpS3U1ymceFuagXr2bLg+YusSHsJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHnFpNg0RYeVfSJC4U4HG5f8OT1co7su9aYoN8NFboRAIhAObgeKm1GkTLTjelJ+6dXSVSwV3L5B3TXsoMnZy0EsbA"}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.2.tgz_1456292202091_0.7623725549783558"},"directories":{}},"0.2.3":{"name":"d3-transition","version":"0.2.3","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.6.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"16cd5c02adf9ec24b6f667d5677dbb1968ac7dce","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.3","_shasum":"5a76a11dbedba40aabea6279e0cef58d1668d129","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.7.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"5a76a11dbedba40aabea6279e0cef58d1668d129","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.3.tgz","integrity":"sha512-TPVEHb+k/PxEyZpuCR0cNUodW4Kr9QorlR4Ukb3wHVWfBMpFBpA8PHutjDNgOtSHK8yP42gSTCORHdVyO8jOmQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1ALQeG9eHJVaEU2gX5m7KRqADWb8/Z9Z4eeE3fU2n8AiBy6cjU6DLQGZY/DI9c/lxLrCBvZ0Q2geDWzwYrIoNDUw=="}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.3.tgz_1456522964956_0.7576098477002233"},"directories":{}},"0.2.4":{"name":"d3-transition","version":"0.2.4","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.6.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"cc059577f32b01448a58e40c0be3901bbf0b332a","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.4","_shasum":"b1837e5260594d511121eae6d4958a662430134d","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.7.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"b1837e5260594d511121eae6d4958a662430134d","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.4.tgz","integrity":"sha512-DB8dj9KKhYnLI58ui8XOyU8KHslv4eynN3VIQmKxB1KOUozAEqRS17DkB9vCl197i2fGhm3sQADORJpJE1IgCw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB/jvAEoeZrEe9x1k9KoayfYh9LLpJZIwO7pj+u4szQwAiAkB01Egp9t5fJ12AgKfyQpYzY9aGVq3N68GNBLUtqv9g=="}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.4.tgz_1456529320217_0.7131664410699159"},"directories":{}},"0.2.5":{"name":"d3-transition","version":"0.2.5","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"var version = \\\"\" + require(\"./package.json\").version + \"\\\"; export * from \\\"../index\\\"; export {version};\");' > build/bundle.js && rollup -f umd -g d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- build/bundle.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.7.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"428c82d51e142d648aa2779082433f9cae64cc41","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.5","_shasum":"51b638dbd3fd17d29fa842c6096f13a158a81103","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.7.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"51b638dbd3fd17d29fa842c6096f13a158a81103","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.5.tgz","integrity":"sha512-CaKRpx1038T+a1Kax8nDA92Jh/QQ+/j+9/lSDeltlnuOEAP9oGe0QhlJuFdgMQ/WbtCEQY3Z44nbmhqjFNngOw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+I7b4jBNauQCWftKIAEXDkEsWK2Tj1/zKBGuVM/M58AIhAJL+aUQVt7SYAk08dk5uZr+A88nApry1bRvSnGFVzhoh"}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.5.tgz_1456680932874_0.7403366141952574"},"directories":{}},"0.2.6":{"name":"d3-transition","version":"0.2.6","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"export var version = \\\"\" + require(\"./package.json\").version + \"\\\";\\n\");' > build/version.js && rollup -f umd -g d3-color:d3_color,d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- index.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-color":"~0.4.0","d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.7.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"abd1ccd552e22780e9ffa5e34cd81dfeca9fc7a4","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.6","_shasum":"83e23448820d89ad104f33697275014769249cac","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.7.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"83e23448820d89ad104f33697275014769249cac","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.6.tgz","integrity":"sha512-Gu7JEZ7pMUedBZQ1Im3GZd0QnKOQbwlaB341rhdd4g+EI7cm86hPuUtk7P0ezkvM0f/53F2i8WtNU6u/FMvpeg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICVHB6OYf1DVfEIEwN7aIroni6m7J+RMAqIE+JuWAITtAiBDejDpJkVZzC03auvB5FeG1/hEPFu6D2rllWvsmQkMsw=="}]},"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.6.tgz_1456959971658_0.1636620513163507"},"directories":{}},"0.2.7":{"name":"d3-transition","version":"0.2.7","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"export var version = \\\"\" + require(\"./package.json\").version + \"\\\";\\n\");' > build/version.js && rollup -f umd -g d3-color:d3_color,d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- index.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push"},"dependencies":{"d3-color":"~0.4.0","d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.7.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"f91c4b66c39e1fafe07658795259712acc1c738f","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.7","_shasum":"f29632502221c7680ceb2c83ec6734f6c2f0d1af","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.7.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"f29632502221c7680ceb2c83ec6734f6c2f0d1af","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.7.tgz","integrity":"sha512-bDSYzH9LqhZsHXDcDZmvj8vH/nIIq+1b2YxXgVCm9yEAkef3jaukn5shiwVmnYj0eQF6i+w8uV+pnBXLHICvZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD78lgU/3CYLgphq4mTFP5DVjFhYTxbD4uMPnPh6U001QIhAKfi93EnTPfiqnF5uD9pEMNPZ6VN5x7CkglV6sLcvGvC"}]},"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.7.tgz_1456985014395_0.6885563107207417"},"directories":{}},"0.2.8":{"name":"d3-transition","version":"0.2.8","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"mkdir -p build && node -e 'process.stdout.write(\"export var version = \\\"\" + require(\"./package.json\").version + \"\\\";\\n\");' > build/version.js && rollup -f umd -g d3-color:d3_color,d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- index.js","test":"faucet `find test -name '*-test.js'` && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js && rm -f build/d3-transition.zip","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"~0.4.0","d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.7.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"faucet":"0.0","rollup":"0.25","jsdom":"8","tape":"4","uglify-js":"2"},"gitHead":"54933f7bde5c15af5a9fd96620a286cc2f729185","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.8","_shasum":"afa21fdbab8cc1941d77119ee9ec880a592c8478","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"shasum":"afa21fdbab8cc1941d77119ee9ec880a592c8478","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.8.tgz","integrity":"sha512-1Yg507asX5dwNyozSfIZPpN2Uyl7ajAcogu2XjMahOJAve4kpWhY3cSBKDF0AbqAjeadj/jHcy+QCB3VUQS0Kg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFOHj70MFdzzhGbP0TzBYUmI7Se88rJ+tbcZ1ewb3EFdAiEArx2IajiLfSETJ062s4C2WWynX0Q0ZneKxuPOHN94Hto="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.8.tgz_1457305023436_0.6386694435495883"},"directories":{}},"0.2.9":{"name":"d3-transition","version":"0.2.9","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && json2module package.json > build/package.js && rollup -f umd -g d3-color:d3_color,d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"~0.4.0","d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.7.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"eslint":"2","json2module":"0.0","rollup":"0.26","jsdom":"9","tape":"4","uglify-js":"2"},"gitHead":"9b0e33fecd44232a5ba942930d813a5677eefd2b","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.9","_shasum":"60c4f56393d175997e518d8c9aa358a8dcc2731b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.1.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"60c4f56393d175997e518d8c9aa358a8dcc2731b","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.9.tgz","integrity":"sha512-teZ+f43iQnxa9qhccKoQ6+o1mmS3PhAC6l7RepfiWgowxzTfAFvsHKWrP+JUMT5PPQzOGg34ZrMoqIO/MJ/xRg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGVD7tj66C3O4sQjJBjzCoEM3rgLq06lULN1hIWcgTGPAiEAoxHbQ/rd80R8ZxXJMlJ/2i3j+FOxrd+76FX+bzW8EzU="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.9.tgz_1463434382449_0.781560905277729"},"directories":{}},"0.2.10":{"name":"d3-transition","version":"0.2.10","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://github.com/d3/d3-transition","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && json2module package.json > build/package.js && rollup -f umd -g d3-color:d3_color,d3-interpolate:d3_interpolate,d3-ease:d3_ease,d3-dispatch:d3_dispatch,d3-selection:d3_selection,d3-timer:d3_timer -n d3_transition -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs build/d3-transition.js -c -m -o build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.2.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.2.min.js && cd ../d3.github.com && git add d3-transition.v0.2.js d3-transition.v0.2.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"~0.4.0","d3-dispatch":"~0.4.0","d3-ease":"~0.7.0","d3-interpolate":"~0.8.0","d3-selection":"~0.7.0","d3-timer":"~0.4.0"},"devDependencies":{"eslint":"2","json2module":"0.0","rollup":"0.26","jsdom":"9","tape":"4","uglify-js":"2"},"gitHead":"cf2b2d222f715b335cc60a1c60838e0f7748b187","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.2.10","_shasum":"73227d2bb2d0939bf464092e7cc9b39730559c94","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"73227d2bb2d0939bf464092e7cc9b39730559c94","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.2.10.tgz","integrity":"sha512-4HZSDMxWbuFJXyzdvF7yq6fAJH4S3Xz4HBTXNrGDalYuFIxytsxhpGRcXzKhlGjX14fNgu7PISQXju46xeu4mw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCh4JXUvBbgI+lDwGVUSQ4iR2Ffl7lQH20s6LVb4Th2UQIgHjDVgG+fKBYZGt958o+YeUI8Ibsfr36YIQL538b8SZI="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/d3-transition-0.2.10.tgz_1463778890366_0.2929878339637071"},"directories":{}},"0.3.0":{"name":"d3-transition","version":"0.3.0","description":"Animated transitions for D3 selections.","keywords":["d3","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.3.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.3.min.js && cd ../d3.github.com && git add d3-transition.v0.3.js d3-transition.v0.3.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"~0.5.0","d3-dispatch":"~0.5.0","d3-ease":"~0.8.0","d3-interpolate":"~0.9.0","d3-selection":"~0.8.0","d3-timer":"~0.5.0"},"devDependencies":{"eslint":"2","package-preamble":"0.0","rollup":"0.27","jsdom":"9","tape":"4","uglify-js":"2"},"gitHead":"6a3ef1121fb7c5cef73af975505f4a5f188af3ac","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.3.0","_shasum":"e473d401f85d06e6c0e3cd1784f6d39342049eba","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"e473d401f85d06e6c0e3cd1784f6d39342049eba","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.3.0.tgz","integrity":"sha512-A9ObCU4JT0v104XeW9/6KaNlw8J7iUBZww+xIWZB5tmZpk4vTKxhRlz9hem8EaqGB2iz1R9XUIDuCgb0HZ47Bg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7OxQ3Swbmku74dvNClvnXMbPpKNPNz88GuWCsmgBtsAIhAMiNZTx8yOZPCheNLhPFVru/hXovap26ZhmgMQVYvmyV"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/d3-transition-0.3.0.tgz_1465357411190_0.880094938678667"},"directories":{}},"0.3.1":{"name":"d3-transition","version":"0.3.1","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v0.3.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v0.3.min.js && cd ../d3.github.com && git add d3-transition.v0.3.js d3-transition.v0.3.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"~0.9.0","d3-timer":"1"},"devDependencies":{"eslint":"2","package-preamble":"0.0","rollup":"0.31","jsdom":"9","tape":"4","uglify-js":"2"},"gitHead":"d3944e9a9733c22c42b2850542114e367354dbb5","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@0.3.1","_shasum":"b283fa8545a4be9af1d2e64f75f2d66e06311b26","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"shasum":"b283fa8545a4be9af1d2e64f75f2d66e06311b26","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-0.3.1.tgz","integrity":"sha512-plfZCuU6jdRePjKWfGukKDnQQZKVmzB9ul+WBZBsZoGmnC1S4dcojmwtt/lwrL41wn5eCgPZTKzx1sYs2Rz0Sg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHYBhCIdxl0UAK0NwciSDTxKG+Xpdwhfc/LKXd8RovAEAiEA3SBq9GLqHsPKSQtwRXIKDgglyhdCeozJaDbIbUB8QxI="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/d3-transition-0.3.1.tgz_1466354061782_0.31246731407009065"},"directories":{}},"1.0.0":{"name":"d3-transition","version":"1.0.0","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.min.js","postpublish":"VERSION=`node -e 'console.log(require(\"./package.json\").version)'`; git push && git push --tags && cp build/d3-transition.js ../d3.github.com/d3-transition.v1.js && cp build/d3-transition.min.js ../d3.github.com/d3-transition.v1.min.js && cd ../d3.github.com && git add d3-transition.v1.js d3-transition.v1.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"1","d3-timer":"1"},"devDependencies":{"eslint":"2","package-preamble":"0.0","rollup":"0.33","jsdom":"9","tape":"4","uglify-js":"2"},"gitHead":"b29d9e7f41ac4feaf92cadb6e9456b0af9629e0d","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.0.0","_shasum":"a4f50f277bb08493603a30fb904519f3edd4cd23","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"a4f50f277bb08493603a30fb904519f3edd4cd23","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.0.0.tgz","integrity":"sha512-vLlw1qNA+HFEPlpVB4MnOPk/eFhxC5w3SrHo1ppdrpy4kU4GfqI2ToFMRS9G5KHAx+TMNCiXk3QX4jCM7Xsv8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA5UHW/3QIXiFIPbxlFDHrJajU9GeThK+u0mzqN8ubRgAiBGbOa78K4WFqgUUD3M7YE38HbbzkftFfphI+41fQkxWQ=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/d3-transition-1.0.0.tgz_1466791363512_0.6650182735174894"},"directories":{}},"1.0.1":{"name":"d3-transition","version":"1.0.1","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","module":"index","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.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-transition/build/d3-transition.js d3-transition.v1.js && cp ../d3-transition/build/d3-transition.min.js d3-transition.v1.min.js && git add d3-transition.v1.js d3-transition.v1.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"1","d3-timer":"1"},"devDependencies":{"eslint":"2","package-preamble":"0.0","rollup":"0.34","jsdom":"9","tape":"4","uglify-js":"2"},"gitHead":"d24c845e63d169b8dab48d2c2132f6e75fd733d8","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.0.1","_shasum":"03fcf34d2ff102a1785768ee52dd6b9c190af7c8","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"03fcf34d2ff102a1785768ee52dd6b9c190af7c8","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.0.1.tgz","integrity":"sha512-/Q3YLm6X8gyXT0cFSY/95YKEGoU7R1m1tdj/DWANkNrtUvnCDrcCAIdV6uJEiXiP1eIomdSFPMMusy7ge7KdwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWNsg09FGr/qe4bwgpgQWYLsUjzZn8DfarLLDtqYPc9AiEAlkvx8E9AebXwR/xmlNuTU/Eqva+gyf11dyI5oPSoiR8="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/d3-transition-1.0.1.tgz_1470173128288_0.675799002405256"},"directories":{}},"1.0.2":{"name":"d3-transition","version":"1.0.2","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","module":"index","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.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-transition/build/d3-transition.js d3-transition.v1.js && cp ../d3-transition/build/d3-transition.min.js d3-transition.v1.min.js && git add d3-transition.v1.js d3-transition.v1.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"1","d3-timer":"1"},"devDependencies":{"eslint":"2","package-preamble":"0.0","rollup":"0.34","jsdom":"9","tape":"4","uglify-js":"2"},"gitHead":"43c7e6ace2d54506d1b35667c7758ca58f6de3ef","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.0.2","_shasum":"987b4e350099ae2f1783fe259a94b45db7209963","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"987b4e350099ae2f1783fe259a94b45db7209963","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.0.2.tgz","integrity":"sha512-+gSwIcK3lthkbrPAEQK7cTBYGhKpivpGkeRVvf+4xRcYj4vahCrYjNXfhQ2TkcP85rAJke66mYhHua4KK23Y6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7DdAYUj1youNVB5MYY53oNDFFHj4Qkfcj6C8l7Q2mqgIgPmdfmHD0gPcqYCMwPjvs624w0cnFLol1rb6GARTJRac="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/d3-transition-1.0.2.tgz_1472244675975_0.5970090467017144"},"directories":{}},"1.0.3":{"name":"d3-transition","version":"1.0.3","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","module":"index","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.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-transition/build/d3-transition.js d3-transition.v1.js && cp ../d3-transition/build/d3-transition.min.js d3-transition.v1.min.js && git add d3-transition.v1.js d3-transition.v1.min.js && git commit -m \"d3-transition ${VERSION}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"1","d3-timer":"1"},"devDependencies":{"eslint":"3","package-preamble":"0.0","rollup":"0.36","jsdom":"9","tape":"4","uglify-js":"2"},"gitHead":"f671708269e03535f3865c9d72f05d956a9a59cd","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.0.3","_shasum":"91dc986bddb30973639320a85db72ce4ab1a27bb","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"mbostock","email":"mbostock@gmail.com"},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"91dc986bddb30973639320a85db72ce4ab1a27bb","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.0.3.tgz","integrity":"sha512-Facxcbma0nA2GVrx7B/Mgnn5ju6SwUMzGa9YcYmQjpqmaIq1Zbp5vVJLjtH6b08Lu0vcX7O6a4z+AlLmdCxrCQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNaEf5Q1iLBrD5Plgv/OaCB+9VNcGDr8mTYH33vdYlvgIge0Pq5tJp0cPUJqKo31kDrA4lJfjXEni/i+edfQSo4hU="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/d3-transition-1.0.3.tgz_1476985724309_0.324111849302426"},"directories":{}},"1.0.4":{"name":"d3-transition","version":"1.0.4","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","module":"index","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.min.js","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3-transition/build/d3-transition.js d3-transition.v1.js && cp ../d3-transition/build/d3-transition.min.js d3-transition.v1.min.js && git add d3-transition.v1.js d3-transition.v1.min.js && git commit -m \"d3-transition ${npm_package_version}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"1","d3-timer":"1"},"devDependencies":{"eslint":"3","package-preamble":"0.0","rollup":"0.41","jsdom":"9","tape":"4","uglify-js":"^2.8.11"},"gitHead":"97609307b08141ba09eeeca8678908d4bfa095df","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.0.4","_shasum":"e1a9ebae3869a9d9c2874ab00841fa8313ae5de5","_from":".","_npmVersion":"3.10.10","_nodeVersion":"7.3.0","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"shasum":"e1a9ebae3869a9d9c2874ab00841fa8313ae5de5","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.0.4.tgz","integrity":"sha512-OWM1+Jhr97HDnlN+rb8iGehQVY3YK4dhownXxsLmO/P5RA4Tl09PkHVsuKPnSEgUlbO9QKLejXkTOxIbbZwzLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFrI9I8sMZ869Kz/O69HV+X/fELTlBEgoNxKIUUGXGmQIgH9+a+d8ZFwnMWVWnTjeUQu4RjO/DW7Vz7JOc8GjWDmM="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/d3-transition-1.0.4.tgz_1489167765157_0.5949167441576719"},"directories":{}},"1.1.0":{"name":"d3-transition","version":"1.1.0","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","module":"index","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.min.js","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3-transition/build/d3-transition.js d3-transition.v1.js && cp ../d3-transition/build/d3-transition.min.js d3-transition.v1.min.js && git add d3-transition.v1.js d3-transition.v1.min.js && git commit -m \"d3-transition ${npm_package_version}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"3","package-preamble":"0.1","rollup":"0.41","jsdom":"10","tape":"4","uglify-js":"^2.8.11"},"gitHead":"328cc9a5705ceecadfcf7da558bbf0f6b9e23d9d","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.1.0","_shasum":"cfc85c74e5239324290546623572990560c3966f","_from":".","_npmVersion":"3.10.10","_nodeVersion":"7.3.0","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"shasum":"cfc85c74e5239324290546623572990560c3966f","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.0.tgz","integrity":"sha512-ALRQj7bWk36Q6gwXQ+oSI5K1X70D8XAx+sMxXymiUXTTY2dBcvRj43Ell7BxM9WqwxvA5y4IKTrnRrpsoWqixA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEkcMBYFVflufxpcRMVjvblIJZLaf1nhE1IxnNpotZ3xAiEA2EitRPrx/TN9lEivfa4VKgS9fOiWe+pN55/VuQzesI4="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/d3-transition-1.1.0.tgz_1494871788747_0.12148871622048318"},"directories":{}},"1.1.1":{"name":"d3-transition","version":"1.1.1","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"build/d3-transition.js","module":"index","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-color:d3,d3-interpolate:d3,d3-ease:d3,d3-dispatch:d3,d3-selection:d3,d3-timer:d3 -n d3 -o build/d3-transition.js -- index.js","test":"tape 'test/**/*-test.js' && eslint index.js src test","prepublish":"npm run test && uglifyjs --preamble \"$(preamble)\" build/d3-transition.js -c -m -o build/d3-transition.min.js","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3-transition/build/d3-transition.js d3-transition.v1.js && cp ../d3-transition/build/d3-transition.min.js d3-transition.v1.min.js && git add d3-transition.v1.js d3-transition.v1.min.js && git commit -m \"d3-transition ${npm_package_version}\" && git push && cd - && zip -j build/d3-transition.zip -- LICENSE README.md build/d3-transition.js build/d3-transition.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"3","package-preamble":"0.1","rollup":"0.41","jsdom":"10","tape":"4","uglify-js":"^2.8.11"},"gitHead":"f09357690900a61e77fec5c86af5c03d1196ce9a","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.1.1","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"integrity":"sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==","shasum":"d8ef89c3b848735b060e54a39b32aaebaa421039","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4J1aAkE1nkHQD5I8C+3uXxdlPsIyg8cKH1H5SVtWwIQIgUY5kHJFmMAaYofnzEL41z3x/6YQWC9NeCSNSu3JLzhM="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition-1.1.1.tgz_1511301106905_0.9064738154411316"},"directories":{}},"1.1.2":{"name":"d3-transition","version":"1.1.2","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"dist/d3-transition.min.js","module":"index","jsnext:main":"index","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint index.js src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v1.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v1.min.js && git add ${npm_package_name}.v1.js ${npm_package_name}.v1.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"5","jsdom":"12","rollup":"0.64","rollup-plugin-terser":"1","tape":"4"},"gitHead":"60f680eca64f31dca7c82bcd1fb5d5650bab92b2","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.1.2","_npmVersion":"6.2.0","_nodeVersion":"10.8.0","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"integrity":"sha512-AERegJ2OKeqKuRNBSKmMSGkPdk0q8Z55hETOFQ2zJXjx57nFMANsNgYqS0dlAzr4tzglkmXqt0AHqVwzZWlpFw==","shasum":"f082787f6d9c29d7bf98458d77717f8dea4fd6bc","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.2.tgz","fileCount":34,"unpackedSize":148270,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbgFuACRA9TVsSAnZWagAArYUP/3fkYzckH57i+dv0W8L6\nVZj0xme7Fb8WGw8ni4ndUM0anqWu3K+N25Swq6E6U/pY+MXcUvuU9aSj7qrs\nTmcoFdV1NK+GiJriipa1GXilrKvBH5KQO0OdyV2UVlsXqcAGkLUKpl+M0z6W\nDdnAfgRVLEHDgb/BprC/ZLWHkkv4ecvJ2F9iCoVrXSjgt85gNv8wQl3B6PRQ\neh+uOdPevyE6T+l+BbjlE97Cqlrls2hauL8IYdD0OcgRKxZ8hCEOb+RTBmuG\nbN+oOuD0kHsO2HmiQSGbX583excw5X8rpuZyk9lGI+4RDpgN6T9DQUww0b0B\neEPjmQNQnL9JT+W+22ejYsqyES/JH2YZjB4n8zpq7zgY1o/Dt8GNWkGchKDt\nRtKsYUHJ7ZJqmA4CkOQEs2TtfCdMGLecUx25f5MlA/9X53lgr1OElKKnBbhH\nipZ50TC49vTHhfJZAerEmwNo+952Qtxi8lXLxaQEcacUSkhUtH5DoVX9XJrJ\nd7q45b9C53tNvSsUl/8Cue9NQgP9ops55t0KYNLkSYBe5jetxUpaHON5Xw0C\ntMC88X1cGDpPRaPRUHxCeYz2XZasvmiJLZFQXnbXHm3SR/X+caITiq5BRPYP\nhf/VWpBi+PpJnyYySYQPlC1qp9ZqytCb1f3kfQQ8Y1ndav//VeWwOuzAGb4U\n9WzW\r\n=z4Tx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChVq5wxSX6CcPqp2c5PsZQ1KYGAgIXchHbc/BLaKl7XgIgex5a0VsY05ms39mxJTb/B4EW6Ekf79qjUF+85mRDzJg="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_1.1.2_1535138687523_0.48632013036253885"},"_hasShrinkwrap":false},"1.1.3":{"name":"d3-transition","version":"1.1.3","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"5","jsdom":"12","rollup":"0.64","rollup-plugin-terser":"1","tape":"4"},"gitHead":"2a44471cc975328a4b6dc5787a8ebe2dfa8afadc","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.1.3","_npmVersion":"6.2.0","_nodeVersion":"10.8.0","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"integrity":"sha512-tEvo3qOXL6pZ1EzcXxFcPNxC/Ygivu5NoBY6mbzidATAeML86da+JfVIUzon3dNM6UX6zjDx+xbYDmMVtTSjuA==","shasum":"3a435b05ce9cef9524fe0d38121cfb6905331ca6","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.3.tgz","fileCount":34,"unpackedSize":148473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbgHk2CRA9TVsSAnZWagAAf+MQAKSXHlyznr5zTEYGkSfO\nY6KpGpAoIwTNYVycWgkTR4tu2fFu+RBhwBnQckwocmCXYgArDxB/20UE7V6q\nkLRVvjpchVOfoZRmmDhC68j5cHuuuvVbHstz5v0OiVbjKiQynjaN5C+CZvPR\nP1KdhxWxDXgIaCZuZPXaaZki40tfxfk/t3FnFu5yDbecxsSlML8hVHCcHpM5\npBrsDasxaUk8EBxoRmFSxZC39zjX34wqbzd7/c1jnzrGIr57UFrbkgBUPFag\nNXGFLnnEKu7dSlTZkmEDS+DcY5TNko0UQarBjUs/M5+8QDJoNHzkDZeoBdIb\nGMu57kNJoOPGWsUQid2lf28kKKSHHwX0fd+fIfmo2TZRnBSypvxDXeh2A7qp\nPmpRVFzK1VBFUfU9jJ6Rg1YQVFOrcYXU9O+SbBmOiM3UfHxBMe0vTVxhvWGH\nVbwkxw4myZGD0Ls3hI4AoaoOuMt/HUwptgplV5VbFUU/hFy7+pZN49o8ArvA\naMCaH3+r6DzlRO6NGMtDgQps7knPhAWqWnfmfILwV3mzLoZPI7bSqEtDtXP/\nO0oxPohTucKMarMwwIWpiqR2KDsooxNZM6XfIhK3sY1Oc8TfixfzE64Y3nvk\nMOosuutSDbtGeBbagG/KMPjkdpXfHVkSCBpw3dXC9CmhKToxtbOZqr9V2klW\nMdY4\r\n=0OYN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdKXsXqQBVBErM1gDno8rfIwBq0R1xx40APeJyPa9I9gIhAIJHTtOHE6AfgdSAUAyJy8t/g8I12rz13episvbdEq7j"}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_1.1.3_1535146293226_0.9601276325717212"},"_hasShrinkwrap":false},"1.2.0":{"name":"d3-transition","version":"1.2.0","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"http://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"5","jsdom":"12","rollup":"0.64","rollup-plugin-terser":"1","tape":"4"},"gitHead":"a447cef94c0e37a2b818b9aca60858ccd9cd6600","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.2.0","_npmVersion":"6.4.1","_nodeVersion":"10.14.1","_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"dist":{"integrity":"sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==","shasum":"f538c0e21b2aa1f05f3e965f8567e81284b3b2b8","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.2.0.tgz","fileCount":35,"unpackedSize":149863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSmI3CRA9TVsSAnZWagAA+YkP/jLQQ03MHrUyAwQvieAC\nZp1F85NCV6591KZLwVaHFoDH9tnrx3YkEHxa23Nf/EoPXMYXt0cVtfLvXPno\n2hF7AqbQ1xq/tJ0LefhH2VQLTZa7pZnYbb2WEXxmXaSQT535I6rx5zetDSF7\nT2yRY95E2e8oW6oO0XdHYksRrud97Kxtof3cIScMTl8cpvnBNKsMB5igv0kj\n7iwWOEEOkjWxQ7RMBVXzu/abqU4ertfamM5AgikXKPZ5fc9TiT23xyopCmn4\ndf02oqHQNnRBu2X+s/WP9D9gHqUxWhaIJSKVW66B2chuB+gp9n0rqAEO8S/i\njanBU1axoL1jrPwYrGII8wm3LfMUspAytBRyCUNGQyVsclnGl39/G+pVFmPC\nOAloi3MC2LKGyPP8T+PXHNYT/+V5s+T2tUwk1qgQ6Psnzy9xdzoamTh9jF4Y\nVSrjujR+6A+YmolbJrtHhA3q79bBnEBt7GcoG3dZ178BCQH1hDj9YjITZWQn\nZVtyqhWU45tmzyqzfO2ZOC3ia+8FtZr8klcOiNrJMuSnAF9yB0nRD/lWibwE\n5wDIB71GoRzU9oD/MD4C6SnlwSRClAdI8JrV3z2EP5luv0x7nUD8OfdTzhTD\nMuGX5P3ZJmWA8T7oupSj3fRsvtY+tbO2WbhwKvYcaBTAQo//7Z2HsIq0X3gs\ntrYy\r\n=nktg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAQWgPMYXmLYN4Yg5wmCKc7ppez4nfiUv60MP1MHGph6AiEAuSv53ka3y7SxzZjzsu3BcIsv6S2LDhQzvGjSoA2/I9M="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_1.2.0_1548378677879_0.1455252067646624"},"_hasShrinkwrap":false},"1.2.1":{"name":"d3-transition","version":"1.2.1","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":false,"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"gitHead":"8889f4d433307fe8afb482f99000947b8c6ae296","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.2.1","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0cnceCDDmFEAFu6VRLZ6SO5MR+15znpt/B68A5uInn7y2lcIVbCPZBiDmDw5pMtnSLZoCMvZtjgWc9l1m7/BWg==","shasum":"a417cfec731a659e8df5dbad5c9a30b98c4a3ce4","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.2.1.tgz","fileCount":32,"unpackedSize":104010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0E+WCRA9TVsSAnZWagAAHysP/3UE/7yMJhcasqtoERjx\nS/ZvZ/rlDtT3mRWKWiGmkYR2SYJ8fWUelkDv1fLwQDSkgBtDQjxV8MRkGOwq\n8gQ0NHeDvqLYHONCnxz14U5pgvzCXWmvZPh06mIYK5UbncWpOZGNdHI7MLPp\npZ3/ZU7710kmRTtTwJPhJdxPpV2DNvl4TGqyAcuJBpphmFkSUNeS8+2ZMsd5\n40ctktsifdOkcvFFGYwzBbC5A7JPcBYxWvMhyG9iJvdX27Fl4prf1iHHNw1O\neltsEMZooWdBaO5mvd6M2Af8rosjoFDeJLUvrg2ZlKstG8lvCsNOYET1U6oL\n0BepaKFB2i0G+6rE0VYpnveaIyJfEHUKq66ZO7o+GeqtYedZQqu7P587rGkU\nKxzrG0lkD75w9Gh6CCMRFPPf2Ybz/74k9yBWiLCC5BwVdq8bwZ8VMYw1gacD\nNtSDnYL7eNt3/1kFlZZWvuxx4MREbUJgylbcfAhKbat5BdAHJF0+HQu/DNLY\n9F8Ad0thjf1aovJ+F03C8GAHqaO9xoLE7S8y7RdfRs0Lh8MOxGbgSWTVKHwh\nG6oXrgdlF7foDBknDN17XgUoyuZ1ERoXMOd14w7fyzSQp+RI++MgMNG61oEh\nciYMj1Z+6d2r7VShorzYKmBQKdEERGSPNY7brW4pdiYygAsBtBodeuQGTkN9\n407n\r\n=SJVY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3VmslbMGIZYUOs+wk4V0OU3JcPlx7wmHZ25FHdXUY+gIhANV9APToYJV95hwSiqrx153xyc6xzdnoLvQUl6FHlQrU"}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_1.2.1_1573932949852_0.2096752114196445"},"_hasShrinkwrap":false},"1.3.0":{"name":"d3-transition","version":"1.3.0","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":false,"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"gitHead":"652a7f638436007f2526e0d4c1655db26b782cc7","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.3.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-pMwnuuxXct70H8l/nXKmh5lXSesn9kJ0APf4LqrztmWA8Ri4u4fHHZAlIgkvfotCa9FXYlQNvnZfAwF9tuvEKw==","shasum":"b41e7ff898f988990c8a75d6f4fa283ba77f033b","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.0.tgz","fileCount":33,"unpackedSize":107123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0OlFCRA9TVsSAnZWagAAOtcQAIpJJFh4fUxHFsq5Kqhu\ndOM0Oc3+sJMxQC1+wy6SEg5FRoshytR9DwjiiAkZph1znaxzPqAAkDf/AQ3L\ngNDa6hliJLjw4fDtJ7nOsYk9+GE01P1BpV0bScGqFcvR/gUmMOt5DLUq9EDh\nyEKVyF44fE6W0JsR18Q6rtLuKV4ofCqKkcMYaCUBDU7nl2Dfr+80y7vwoqX/\n+H/VKS2RpyCXNo6+gLWBJE10KOJwAXmjsBjIo4rGSE0j+KM9KHJK6amxa1l2\nsgDZwqovUkQ5Is3GfA4d7BY1wX0yw3n6gff7+joXV4P1wc9qyPPqZe2cAAtr\nCw1remDt2vHiLKTdJ5lbZMhL3X3RVUtW6f5as6MSOwrAlybwOLo8JU46gdct\neZuucBIEaHpzVx7HMrHUIV00/UAXni8rDQlsUutMzQnE1N+Mmb6CrPSBF22k\nUf6GAvMN0RPxpwLRsS1VFD3jsFK+rW014oUMHeHQoltC65elOP7/u+nMLNRt\ndkgFZgzF6YHHWgnpSivldJbOvXoVLWRMIh97yt+o3u9URe2Y/PxERMO95nmz\nzCmrrfEL7ghr4YmPTDDUD2/p6u9BSN7CfmxCQaQ/oYDqSaXeWniRw79UyTw9\n9Jj7jmZi2sCVE01yerlPlZ6Sx1vR5/KUgY9oeKCAhW3/F0C8XFGbf7TVwW0V\nigCf\r\n=X56H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFTmPmYNOWgjHkfBTvi+YvFzrrTnuPvHCtv2nFrU/YABAiAeqjS7oBE/GyE99jYyeMDNgCXNRFlT+zMgItT5sl5zBA=="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_1.3.0_1573972293050_0.09173112999542798"},"_hasShrinkwrap":false},"1.3.1":{"name":"d3-transition","version":"1.3.1","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":false,"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"gitHead":"91b71d2e82f0f50421d76b90c0c7f6ec5189143a","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.3.1","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bZYkOFBZaX+2ixSK3jnKJvGBoDWGlSOc80i0HBKg7iVCFmUDvMQgYFrofNfjAxN72rP20sfUSfQ/qtpP3v3ajw==","shasum":"3bce9a6a85f12fac107db05e798b49731800378d","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.1.tgz","fileCount":33,"unpackedSize":107251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0c4PCRA9TVsSAnZWagAAxlUQAIVFnlYL+uLs2nxurz1q\nt6HMzd0AsY6L8ZdzEJqccdWxP9V33IWm05vV+Rev7Pw3nbDKt9czRA5I0pV2\njHwiTR/S6ZztIbBAqlHtLAIe2s8I4hBmT70nYtvlspPElOfUqasXzPSdlMyF\nVhaOM3R8/AT9J6xwGCQCcLx1pyX4qy1nOTDGq0D13KHH76x/1MLQtQMkRaNy\niLeJAPKrpdqzX12QmcBoUarB7QXvaskq++BSEOB8Q1iuWL03KS/lafsICDi1\nTzK7quUotChSVRyYvNAsV+uev9I/+VB0AW4BMXaTv0/JgvxMByEKuEAQy0DG\nFb+BRmhh+nY+w1bCT8zJAMOk6N79uSZO7MEAR3eg73+D4+NbmNI4YVonGhnS\nG5YZ82OoWTpODxB/ovzvBpU3VHtPMvvITjfvbK1L2GDirrc/5UVqPfUHWR7t\n8rL9L1ZQMW8+ZuZlE6fs+65lGvNses4ClTow+Gm0P39y/bnqgCsg4tt3cTVP\n6ElAXsgux2ApU0ZgstEjlmAuo5UbcW5PEXRSKUtxPmbeBL7owEr7is6JN549\nrK1TsSeqfDXpexUUhGRlLujOGQwhjCfPLnxG4MH6suKI8VBZ81Uqg1lSYolT\nQ3hKf8yGO1JOp9Q/ov+YmavNLuxdPfPNrBQq9x1haJkOyPrNaKXp+teA/9fP\nBUTQ\r\n=kN/1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDu1JfsXfUeAtR/HxJjlbhl1DmhL2neYgEbhDFm5fRQYAiEA0cWrEV3qu+ZHYQBdTW3cNyMKgaHpE+bGdkhr1VQmwUc="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_1.3.1_1574030863016_0.8355880873708796"},"_hasShrinkwrap":false},"1.3.2":{"name":"d3-transition","version":"1.3.2","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":true,"dependencies":{"d3-color":"1","d3-dispatch":"1","d3-ease":"1","d3-interpolate":"1","d3-selection":"^1.1.0","d3-timer":"1"},"devDependencies":{"eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"gitHead":"5e7e1246d20f5c7ee3665b9c5403cb8b3fa0a18d","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@1.3.2","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==","shasum":"a98ef2151be8d8600543434c1ca80140ae23b398","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz","fileCount":33,"unpackedSize":107250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0sybCRA9TVsSAnZWagAALwsP+gIoXtuv0gg8a+QMrwkK\nMZ2bsQ/z7PeL0umachuwl3RXK+w4XGnaoU8HwyJ0v4hjNhHVQNYyk4vfKn4n\n0vM5jfLHWYrR57tkPp5Qln+e5lZieTChEqTa6gsOJ8ymRgYm8XejERqmaoH5\njeoea6DodLFv7ku4FyJE5buS4hFS9fsfaaJRt/LJNbKYy/+GQ1RVnjP4NzJP\nM/9Kt+nE8MjwSDpizXbzkilt8rg8VB/tEH/Bem+HtPyIkhq03QI4UP3nx65U\n2mOF3Mr2oI2zCvbi5wwEL5XHm2sqVHQ/puI7+uBEsZJeLoEubk2DgOi6fALP\nBvtL01l/Q6p1by3KFJB1098r6HfMe1jiapghX3laX8Pu6uCxgGucRcvbDaIQ\nFpljAs1vMe/PW5C43uTnzWRjhNMzv2/zdC/KPCvmDomwC9PAs7yyvqZ5MKsD\npDUvWNYUHiBIaxv4+Vdh5eAQuMP85Q8WOm15ttR9ltPasbR0AWqsaixXdtS/\n8R1JaNjLFlxzGHFHFWrhaJcRggoz6nvrf8phz4rnOOUHPO54TvPoKQR4UiRf\ndMeOY1svrHbcLFhijQz256N7N62i75l+c4PD7GNJi/2uE5rKXIJFxs5/y4Jc\nR9GkheEs1cnDOY/RI4OD9KvKWBtfBa+n5lqgksu2EQPdw2TscPwldKczTsgJ\nk58K\r\n=5D8I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHxrMZLOV9G8tnBJXgsLDTKROV7Ealvut3TpHjtV6+7kAiA6zzh9hE6t1jWcrlW8F7+zN7ZuRmhcc4cKesk28DSV9g=="}]},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_1.3.2_1574096026548_0.5091180503990709"},"_hasShrinkwrap":false},"2.0.0-rc.1":{"name":"d3-transition","version":"2.0.0-rc.1","publishConfig":{"tag":"next"},"description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":true,"dependencies":{"d3-color":"1 - 2","d3-dispatch":"1 - 2","d3-ease":"1 - 2","d3-interpolate":"1 - 2","d3-timer":"1 - 2"},"peerDependencies":{"d3-selection":"2.0.0.rc.3"},"devDependencies":{"d3-selection":"1.1.0 - 2","eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"readmeFilename":"README.md","readme":"# d3-transition\n\nA transition is a [selection](https://github.com/d3/d3-selection)-like interface for animating changes to the DOM. Instead of applying changes instantaneously, transitions smoothly interpolate the DOM from its current state to the desired target state over a given duration.\n\nTo apply a transition, select elements, call [*selection*.transition](#selection_transition), and then make the desired changes. For example:\n\n```js\nd3.select(\"body\")\n .transition()\n .style(\"background-color\", \"red\");\n```\n\nTransitions support most selection methods (such as [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style) in place of [*selection*.attr](https://github.com/d3/d3-selection#selection_attr) and [*selection*.style](https://github.com/d3/d3-selection#selection_style)), but not all methods are supported; for example, you must [append](https://github.com/d3/d3-selection#selection_append) elements or [bind data](https://github.com/d3/d3-selection#joining-data) before a transition starts. A [*transition*.remove](#transition_remove) operator is provided for convenient removal of elements when the transition ends.\n\nTo compute intermediate state, transitions leverage a variety of [built-in interpolators](https://github.com/d3/d3-interpolate). [Colors](https://github.com/d3/d3-interpolate#interpolateRgb), [numbers](https://github.com/d3/d3-interpolate#interpolateNumber), and [transforms](https://github.com/d3/d3-interpolate#interpolateTransform) are automatically detected. [Strings](https://github.com/d3/d3-interpolate#interpolateString) with embedded numbers are also detected, as is common with many styles (such as padding or font sizes) and paths. To specify a custom interpolator, use [*transition*.attrTween](#transition_attrTween), [*transition*.styleTween](#transition_styleTween) or [*transition*.tween](#transition_tween).\n\n## Installing\n\nIf you use NPM, `npm install d3-transition`. Otherwise, download the [latest release](https://github.com/d3/d3-transition/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-transition.v2.min.js) or as part of [D3](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n<script src=\"https://d3js.org/d3-color.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-dispatch.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-ease.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-interpolate.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-selection.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-timer.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-transition.v2.min.js\"></script>\n<script>\n\nvar transition = d3.transition();\n\n</script>\n```\n\n[Try d3-transition in your browser.](https://tonicdev.com/npm/d3-transition)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Timing](#timing)\n* [Control Flow](#control-flow)\n* [The Life of a Transition](#the-life-of-a-transition)\n\n### Selecting Elements\n\nTransitions are derived from [selections](https://github.com/d3/d3-selection) via [*selection*.transition](#selection_transition). You can also create a transition on the document root element using [d3.transition](#transition).\n\n<a name=\"selection_transition\" href=\"#selection_transition\">#</a> <i>selection</i>.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js)\n\nReturns a new transition on the given *selection* with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name.\n\nIf the *name* is a [transition](#transition) instance, the returned transition has the same id and name as the specified transition. If a transition with the same id already exists on a selected element, the existing transition is returned for that element. Otherwise, the timing of the returned transition is inherited from the existing transition of the same id on the nearest ancestor of each selected element. Thus, this method can be used to synchronize a transition across multiple selections, or to re-select a transition for specific elements and modify its configuration. For example:\n\n```js\nvar t = d3.transition()\n .duration(750)\n .ease(d3.easeLinear);\n\nd3.selectAll(\".apple\").transition(t)\n .style(\"fill\", \"red\");\n\nd3.selectAll(\".orange\").transition(t)\n .style(\"fill\", \"orange\");\n```\n\nIf the specified *transition* is not found on a selected node or its ancestors (such as if the transition [already ended](#the-life-of-a-transition)), the default timing parameters are used; however, in a future release, this will likely be changed to throw an error. See [#59](https://github.com/d3/d3-transition/issues/59).\n\n<a name=\"selection_interrupt\" href=\"#selection_interrupt\">#</a> <i>selection</i>.<b>interrupt</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the selected elements, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used.\n\nInterrupting a transition on an element has no effect on any transitions on any descendant elements. For example, an [axis transition](https://github.com/d3/d3-axis) consists of multiple independent, synchronized transitions on the descendants of the axis [G element](https://www.w3.org/TR/SVG/struct.html#Groups) (the tick lines, the tick labels, the domain path, *etc.*). To interrupt the axis transition, you must therefore interrupt the descendants:\n\n```js\nselection.selectAll(\"*\").interrupt();\n```\n\nThe [universal selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors), `*`, selects all descendant elements. If you also want to interrupt the G element itself:\n\n```js\nselection.interrupt().selectAll(\"*\").interrupt();\n```\n\n<a name=\"interrupt\" href=\"#interrupt\">#</a> d3.<b>interrupt</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the specified *node*, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used. See also [*selection*.interrupt](#selection_interrupt).\n\n<a name=\"transition\" href=\"#transition\">#</a> d3.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29)\n\nReturns a new transition on the root element, `document.documentElement`, with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name. The *name* may also be a [transition](#transition) instance; see [*selection*.transition](#selection_transition). This method is equivalent to:\n\n```js\nd3.selection()\n .transition(name)\n```\n\nThis function can also be used to test for transitions (`instanceof d3.transition`) or to extend the transition prototype.\n\n<a name=\"transition_select\" href=\"#transition_select\">#</a> <i>transition</i>.<b>select</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/select.js)\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.select](https://github.com/d3/d3-selection#selection_select), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .select(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectAll\" href=\"#transition_selectAll\">#</a> <i>transition</i>.<b>selectAll</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js)\n\nFor each selected element, selects all descendant elements that match the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectAll](https://github.com/d3/d3-selection#selection_selectAll), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectAll(selector)\n .transition(transition)\n```\n\n<a name=\"transition_filter\" href=\"#transition_filter\">#</a> <i>transition</i>.<b>filter</b>(<i>filter</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js)\n\nFor each selected element, selects only the elements that match the specified *filter*, and returns a transition on the resulting selection. The *filter* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.filter](https://github.com/d3/d3-selection#selection_filter), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .filter(filter)\n .transition(transition)\n```\n\n<a name=\"transition_merge\" href=\"#transition_merge\">#</a> <i>transition</i>.<b>merge</b>(<i>other</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js)\n\nReturns a new transition merging this transition with the specified *other* transition, which must have the same id as this transition. The returned transition has the same number of groups, the same parents, the same name and the same id as this transition. Any missing (null) elements in this transition are filled with the corresponding element, if present (not null), from the *other* transition.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), merging with the selection likewise derived from the *other* transition via [*selection*.merge](https://github.com/d3/d3-selection#selection_merge), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .merge(other.selection())\n .transition(transition)\n```\n\n<a name=\"transition_transition\" href=\"#transition_transition\">#</a> <i>transition</i>.<b>transition</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js)\n\nReturns a new transition on the same selected elements as this transition, scheduled to start when this transition ends. The new transition inherits a reference time equal to this transition’s time plus its [delay](#transition_delay) and [duration](#transition_duration). The new transition also inherits this transition’s name, duration, and [easing](#transition_ease). This method can be used to schedule a sequence of chained transitions. For example:\n\n```js\nd3.selectAll(\".apple\")\n .transition() // First fade to green.\n .style(\"fill\", \"green\")\n .transition() // Then red.\n .style(\"fill\", \"red\")\n .transition() // Wait one second. Then brown, and remove.\n .delay(1000)\n .style(\"fill\", \"brown\")\n .remove();\n```\n\nThe delay for each transition is relative to its previous transition. Thus, in the above example, apples will stay red for one second before the last transition to brown starts.\n\n<a name=\"transition_selection\" href=\"#transition_selection\">#</a> <i>transition</i>.<b>selection</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js)\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n<a name=\"active\" href=\"#active\">#</a> d3.<b>active</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/active.js)\n\nReturns the active transition on the specified *node* with the specified *name*, if any. If no *name* is specified, null is used. Returns null if there is no such active transition on the specified node. This method is useful for creating chained transitions. For example, to initiate disco mode:\n\n```js\nd3.selectAll(\"circle\").transition()\n .delay(function(d, i) { return i * 50; })\n .on(\"start\", function repeat() {\n d3.active(this)\n .style(\"fill\", \"red\")\n .transition()\n .style(\"fill\", \"green\")\n .transition()\n .style(\"fill\", \"blue\")\n .transition()\n .on(\"start\", repeat);\n });\n```\n\nSee [chained transitions](https://bl.ocks.org/mbostock/70d5541b547cc222aa02) for an example.\n\n### Modifying Elements\n\nAfter selecting elements and creating a transition with [*selection*.transition](#selection_transition), use the transition’s transformation methods to affect document content.\n\n<a name=\"transition_attr\" href=\"#transition_attr\">#</a> <i>transition</i>.<b>attr</b>(<i>name</i>, <i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js)\n\nFor each selected element, assigns the [attribute tween](#transition_attrTween) for the attribute with the specified *name* to the specified target *value*. The starting value of the tween is the attribute’s value when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the attribute is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.attrTween](#transition_attrTween).\n\n<a name=\"transition_attrTween\" href=\"#transition_attrTween\">#</a> <i>transition</i>.<b>attrTween</b>(<i>name</i>[, <i>factory</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js)\n\nIf *factory* is specified and not null, assigns the attribute [tween](#transition_tween) for the attribute with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the attribute value. The interpolator must return a string. (To remove an attribute at the start of a transition, use [*transition*.attr](#transition_attr); to remove an attribute at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned attribute tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for attribute with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill attribute from red to blue:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as one that understands [SVG paths](https://bl.ocks.org/mbostock/3916621). A useful technique is *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used (say, with a [shape](https://github.com/d3/d3-shape)) to compute the new attribute value.\n\n<a name=\"transition_style\" href=\"#transition_style\">#</a> <i>transition</i>.<b>style</b>(<i>name</i>, <i>value</i>[, <i>priority</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/style.js)\n\nFor each selected element, assigns the [style tween](#transition_styleTween) for the style with the specified *name* to the specified target *value* with the specified *priority*. The starting value of the tween is the style’s inline value if present, and otherwise its computed value, when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the style is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.styleTween](#transition_styleTween).\n\n<a name=\"transition_styleTween\" href=\"#transition_styleTween\">#</a> <i>transition</i>.<b>styleTween</b>(<i>name</i>[, <i>factory</i>[, <i>priority</i>]])) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js)\n\nIf *factory* is specified and not null, assigns the style [tween](#transition_tween) for the style with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the style value with the specified *priority*. The interpolator must return a string. (To remove an style at the start of a transition, use [*transition*.style](#transition_style); to remove an style at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned style tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for style with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill style from red to blue:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.style](#transition_style):\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(this.style.fill, \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as with *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used to compute the new style value.\n\n<a name=\"transition_text\" href=\"#transition_text\">#</a> <i>transition</i>.<b>text</b>(<i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/text.js)\n\nFor each selected element, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified target *value* when the transition starts. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nTo interpolate text rather than to set it on start, use [*transition*.textTween](#transition_textTween) or append a replacement element and cross-fade opacity. Text is not interpolated by default because it is usually undesirable.\n\n<a name=\"transition_textTween\" href=\"#transition_textTween\">#</a> <i>transition</i>.<b>textTween</b>(<i>factory</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js), [Examples](https://observablehq.com/@d3/transition-texttween)\n \nIf *factory* is specified and not null, assigns the text [tween](#transition_tween) to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the text. The interpolator must return a string.\n\nFor example, to interpolate the text with integers from 0 to 100:\n\n```js\ntransition.textTween(function() {\n return d3.interpolateRound(0, 100);\n});\n```\n\nIf the specified *factory* is null, removes the previously-assigned text tween, if any. If *factory* is not specified, returns the current interpolator factory for text, or undefined if no such tween exists.\n\n<a name=\"transition_remove\" href=\"#transition_remove\">#</a> <i>transition</i>.<b>remove</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js)\n\nFor each selected element, [removes](https://github.com/d3/d3-selection#selection_remove) the element when the transition ends, as long as the element has no other active or pending transitions. If the element has other active or pending transitions, does nothing.\n\n<a name=\"transition_tween\" href=\"#transition_tween\">#</a> <i>transition</i>.<b>tween</b>(<i>name</i>[, <i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js)\n\nFor each selected element, assigns the tween with the specified *name* with the specified *value* function. The *value* must be specified as a function that returns a function. When the transition starts, the *value* function is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned function is then invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. If the specified *value* is null, removes the previously-assigned tween of the specified *name*, if any.\n\nFor example, to interpolate the fill attribute to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.tween(\"attr.fill\", function() {\n var i = d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n return function(t) {\n this.setAttribute(\"fill\", i(t));\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, or to perform side-effects, say to animate the [scroll offset](https://bl.ocks.org/mbostock/1649463).\n\n### Timing\n\nThe [easing](#transition_ease), [delay](#transition_delay) and [duration](#transition_duration) of a transition is configurable. For example, a per-element delay can be used to [stagger the reordering](https://observablehq.com/@d3/sortable-bar-chart) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n<a name=\"transition_delay\" href=\"#transition_delay\">#</a> <i>transition</i>.<b>delay</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js)\n\nFor each selected element, sets the transition delay to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition delay. If a delay is not specified, it defaults to zero.\n\nIf a *value* is not specified, returns the current value of the delay for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\nSetting the delay to a multiple of the index `i` is a convenient way to stagger transitions across a set of elements. For example:\n\n```js\ntransition.delay(function(d, i) { return i * 10; });\n```\n\nOf course, you can also compute the delay as a function of the data, or [sort the selection](https://github.com/d3/d3-selection#selection_sort) before computed an index-based delay.\n\n<a name=\"transition_duration\" href=\"#transition_duration\">#</a> <i>transition</i>.<b>duration</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js)\n\nFor each selected element, sets the transition duration to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition duration. If a duration is not specified, it defaults to 250ms.\n\nIf a *value* is not specified, returns the current value of the duration for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_ease\" href=\"#transition_ease\">#</a> <i>transition</i>.<b>ease</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js)\n\nSpecifies the transition [easing function](https://github.com/d3/d3-ease) for all selected elements. The *value* must be specified as a function. The easing function is invoked for each frame of the animation, being passed the normalized time *t* in the range [0, 1]; it must then return the eased time *tʹ* which is typically also in the range [0, 1]. A good easing function should return 0 if *t* = 0 and 1 if *t* = 1. If an easing function is not specified, it defaults to [d3.easeCubic](https://github.com/d3/d3-ease#easeCubic).\n\nIf a *value* is not specified, returns the current easing function for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_easeVarying\" href=\"#transition_easeVarying\">#</a> <i>transition</i>.<b>easeVarying</b>(<i>factory</i>) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/easeVarying.js \"Source\")\n\nSpecifies a factory for the transition [easing function](https://github.com/d3/d3-ease). The *factory* must be a function. It is invoked for each node of the selection, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. It must return an easing function.\n\n### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n<a name=\"transition_end\" href=\"#transition_end\">#</a> <i>transition</i>.<b>end</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/end.js)\n\nReturns a promise that resolves when every selected element finishes transitioning. If any element’s transition is cancelled or interrupted, the promise rejects.\n\n<a name=\"transition_on\" href=\"#transition_on\">#</a> <i>transition</i>.<b>on</b>(<i>typenames</i>[, <i>listener</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/on.js)\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is one of the following string event types:\n\n* `start` - when the transition starts.\n* `end` - when the transition ends.\n* `interrupt` - when the transition is interrupted.\n* `cancel` - when the transition is cancelled.\n\nSee [The Life of a Transition](#the-life-of-a-transition) for more. Note that these are *not* native DOM events as implemented by [*selection*.on](https://github.com/d3/d3-selection#selection_on) and [*selection*.dispatch](https://github.com/d3/d3-selection#selection_dispatch), but transition events!\n\nThe type may be optionally followed by a period (`.`) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as `start.foo` and `start.bar`. To specify multiple typenames, separate typenames with spaces, such as `interrupt end` or `start.foo start.bar`.\n\nWhen a specified transition event is dispatched on a selected node, the specified *listener* will be invoked for the transitioning element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. Listeners always see the latest datum for their element, but the index is a property of the selection and is fixed when the listener is assigned; to update the index, re-assign the listener.\n\nIf an event listener was previously registered for the same *typename* on a selected element, the old listener is removed before the new listener is added. To remove a listener, pass null as the *listener*. To remove all listeners for a given name, pass null as the *listener* and `.foo` as the *typename*, where `foo` is the name; to remove all listeners with no name, specify `.` as the *typename*.\n\nIf a *listener* is not specified, returns the currently-assigned listener for the specified event *typename* on the first (non-null) selected element, if any. If multiple typenames are specified, the first matching listener is returned.\n\n<a name=\"transition_each\" href=\"#transition_each\">#</a> <i>transition</i>.<b>each</b>(<i>function</i>) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/each.js)\n\nInvokes the specified *function* for each selected element, passing in the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. This method can be used to invoke arbitrary code for each selected element, and is useful for creating a context to access parent and child data simultaneously. Equivalent to [*selection*.each](https://github.com/d3/d3-selection#selection_each).\n\n<a name=\"transition_call\" href=\"#transition_call\">#</a> <i>transition</i>.<b>call</b>(<i>function</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/call.js)\n\nInvokes the specified *function* exactly once, passing in this transition along with any optional *arguments*. Returns this transition. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several attributes in a reusable function:\n\n```js\nfunction color(transition, fill, stroke) {\n transition\n .style(\"fill\", fill)\n .style(\"stroke\", stroke);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").transition().call(color, \"red\", \"blue\");\n```\n\nThis is equivalent to:\n\n```js\ncolor(d3.selectAll(\"div\").transition(), \"red\", \"blue\");\n```\n\nEquivalent to [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n<a name=\"transition_empty\" href=\"#transition_empty\">#</a> <i>transition</i>.<b>empty</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js)\n\nReturns true if this transition contains no (non-null) elements. Equivalent to [*selection*.empty](https://github.com/d3/d3-selection#selection_empty).\n\n<a name=\"transition_nodes\" href=\"#transition_nodes\">#</a> <i>transition</i>.<b>nodes</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js)\n\nReturns an array of all (non-null) elements in this transition. Equivalent to [*selection*.nodes](https://github.com/d3/d3-selection#selection_nodes).\n\n<a name=\"transition_node\" href=\"#transition_node\">#</a> <i>transition</i>.<b>node</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/node.js)\n\nReturns the first (non-null) element in this transition. If the transition is empty, returns null. Equivalent to [*selection*.node](https://github.com/d3/d3-selection#selection_node).\n\n<a name=\"transition_size\" href=\"#transition_size\">#</a> <i>transition</i>.<b>size</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/size.js)\n\nReturns the total number of elements in this transition. Equivalent to [*selection*.size](https://github.com/d3/d3-selection#selection_size).\n\n### The Life of a Transition\n\nImmediately after creating a transition, such as by [*selection*.transition](#selection_transition) or [*transition*.transition](#transition_transition), you may configure the transition using methods such as [*transition*.delay](#transition_delay), [*transition*.duration](#transition_duration), [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style). Methods that specify target values (such as *transition*.attr) are evaluated synchronously; however, methods that require the starting value for interpolation, such as [*transition*.attrTween](#transition_attrTween) and [*transition*.styleTween](#transition_styleTween), must be deferred until the transition starts.\n\nShortly after creation, either at the end of the current frame or during the next frame, the transition is scheduled. At this point, the delay and `start` event listeners may no longer be changed; attempting to do so throws an error with the message “too late: already scheduled” (or if the transition has ended, “transition not found”).\n\nWhen the transition subsequently starts, it interrupts the active transition of the same name on the same element, if any, dispatching an `interrupt` event to registered listeners. (Note that interrupts happen on start, not creation, and thus even a zero-delay transition will not immediately interrupt the active transition: the old transition is given a final frame. Use [*selection*.interrupt](#selection_interrupt) to interrupt immediately.) The starting transition also cancels any pending transitions of the same name on the same element that were created before the starting transition. The transition then dispatches a `start` event to registered listeners. This is the last moment at which the transition may be modified: the transition’s timing, tweens, and listeners may not be changed when it is running; attempting to do so throws an error with the message “too late: already running” (or if the transition has ended, “transition not found”). The transition initializes its tweens immediately after starting.\n\nDuring the frame the transition starts, but *after* all transitions starting this frame have been started, the transition invokes its tweens for the first time. Batching tween initialization, which typically involves reading from the DOM, improves performance by avoiding interleaved DOM reads and writes.\n\nFor each frame that a transition is active, it invokes its tweens with an [eased](#transition_ease) *t*-value ranging from 0 to 1. Within each frame, the transition invokes its tweens in the order they were registered.\n\nWhen a transition ends, it invokes its tweens a final time with a (non-eased) *t*-value of 1. It then dispatches an `end` event to registered listeners. This is the last moment at which the transition may be inspected: after ending, the transition is deleted from the element, and its configuration is destroyed. (A transition’s configuration is also destroyed on interrupt or cancel.) Attempting to inspect a transition after it is destroyed throws an error with the message “transition not found”.\n","licenseText":"Copyright (c) 2010-2015, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTERMS OF USE - EASING EQUATIONS\n\nOpen source under the BSD License.\n\nCopyright 2001 Robert Penner\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n- Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n- Neither the name of the author nor the names of contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n","_id":"d3-transition@2.0.0-rc.1","dist":{"shasum":"9ddee96ba56a4671123a792234d5a2c6f91a7bd0","integrity":"sha512-TgdGMkkJtBrtKqs/cBmtaS7XVIbllrANvSVRXbLtL8ACEr7lfChcLaY5U47+v9vVCmhIbe133+r2/PbsbwABaw==","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-2.0.0-rc.1.tgz","fileCount":39,"unpackedSize":109511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGXksCRA9TVsSAnZWagAArnIP/iG8cbefS5Rwk9EnRXWt\nemqZMOyUp4wP7Yu9cFPtNKU0i4Uqhw367tjjnmASZjpEjx8cgq1O4+nwjap2\nDIVJvD64LSzOIxSPyHZIbiqFV4+XJkhu0dP5jrzHeFiUnlyiPPrTMA83KlKG\njETj2hyTp5P1iL4uGT1M21logYNIyxJ6JMHWWjhYLg5cTU3fbYfXdP0HQShJ\nyQl+LMfG77J0M5nwnLMDcuw1Kh1R/SBbh2aQzZiNgZ5iemr1iNK9MQl9obmF\nEnb21z+8ODVFCDH+U3mPqCeUASw8X8NG+kFBhKdWjaZ9cqkkuIREVlsoyVj5\nvLr/FPFiO9W8ON4Cov6Wtqps0slNSaQL/BS0xxGF9j9VNSVzlO3+HIFOwATN\nVq0g7qgAYbDtgcsSKEW06efGmP4Cy5cEvFnV0D0iKtWJjZnIlZvv9XzLm/JC\nKRjJNN/SUKfUa+5i5wAMvmPGU6qV1qBNV7EfasHulHzb5HZVoZkSyVfmbTJR\nRcnvilTpK8fK8d1Dzg8K/EzivLXpYBqrwtlrTyZmKtQNe96ixPK7eENbkgrf\neBmMiz0pUOtctUxHvxI3aZ0FmeE1vVYsR18L/ZTqVY405dHc8/mrTYWYZLZj\n8+HluCU5kDIg4zsRdPSCPt1hKEw8TfM4i0yYwwuXmliEX0Yg0jPnnmcwAbqv\nZsQ8\r\n=GRye\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH4CI6Z6D7WyRMA1L6MtFB4z7BAuxGg9VgFqxyxTiOthAiEAotPpltZPhhTWPZZ5jVt5Sn7EyGeo7a340vl1WOIx+/0="}]},"maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"fil@rezo.net","name":"recifs"}],"_npmUser":{"name":"recifs","email":"fil@rezo.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_2.0.0-rc.1_1595504939877_0.8638885062563779"},"_hasShrinkwrap":false},"2.0.0-rc.2":{"name":"d3-transition","version":"2.0.0-rc.2","publishConfig":{"tag":"next"},"description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":true,"dependencies":{"d3-color":"1 - 2","d3-dispatch":"1 - 2","d3-ease":"1 - 2","d3-interpolate":"1 - 2","d3-timer":"1 - 2"},"peerDependencies":{"d3-selection":"2.0.0-rc.3"},"devDependencies":{"d3-selection":"1.1.0 - 2","eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"readmeFilename":"README.md","readme":"# d3-transition\n\nA transition is a [selection](https://github.com/d3/d3-selection)-like interface for animating changes to the DOM. Instead of applying changes instantaneously, transitions smoothly interpolate the DOM from its current state to the desired target state over a given duration.\n\nTo apply a transition, select elements, call [*selection*.transition](#selection_transition), and then make the desired changes. For example:\n\n```js\nd3.select(\"body\")\n .transition()\n .style(\"background-color\", \"red\");\n```\n\nTransitions support most selection methods (such as [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style) in place of [*selection*.attr](https://github.com/d3/d3-selection#selection_attr) and [*selection*.style](https://github.com/d3/d3-selection#selection_style)), but not all methods are supported; for example, you must [append](https://github.com/d3/d3-selection#selection_append) elements or [bind data](https://github.com/d3/d3-selection#joining-data) before a transition starts. A [*transition*.remove](#transition_remove) operator is provided for convenient removal of elements when the transition ends.\n\nTo compute intermediate state, transitions leverage a variety of [built-in interpolators](https://github.com/d3/d3-interpolate). [Colors](https://github.com/d3/d3-interpolate#interpolateRgb), [numbers](https://github.com/d3/d3-interpolate#interpolateNumber), and [transforms](https://github.com/d3/d3-interpolate#interpolateTransform) are automatically detected. [Strings](https://github.com/d3/d3-interpolate#interpolateString) with embedded numbers are also detected, as is common with many styles (such as padding or font sizes) and paths. To specify a custom interpolator, use [*transition*.attrTween](#transition_attrTween), [*transition*.styleTween](#transition_styleTween) or [*transition*.tween](#transition_tween).\n\n## Installing\n\nIf you use NPM, `npm install d3-transition`. Otherwise, download the [latest release](https://github.com/d3/d3-transition/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-transition.v2.min.js) or as part of [D3](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n<script src=\"https://d3js.org/d3-color.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-dispatch.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-ease.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-interpolate.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-selection.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-timer.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-transition.v2.min.js\"></script>\n<script>\n\nvar transition = d3.transition();\n\n</script>\n```\n\n[Try d3-transition in your browser.](https://tonicdev.com/npm/d3-transition)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Timing](#timing)\n* [Control Flow](#control-flow)\n* [The Life of a Transition](#the-life-of-a-transition)\n\n### Selecting Elements\n\nTransitions are derived from [selections](https://github.com/d3/d3-selection) via [*selection*.transition](#selection_transition). You can also create a transition on the document root element using [d3.transition](#transition).\n\n<a name=\"selection_transition\" href=\"#selection_transition\">#</a> <i>selection</i>.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js)\n\nReturns a new transition on the given *selection* with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name.\n\nIf the *name* is a [transition](#transition) instance, the returned transition has the same id and name as the specified transition. If a transition with the same id already exists on a selected element, the existing transition is returned for that element. Otherwise, the timing of the returned transition is inherited from the existing transition of the same id on the nearest ancestor of each selected element. Thus, this method can be used to synchronize a transition across multiple selections, or to re-select a transition for specific elements and modify its configuration. For example:\n\n```js\nvar t = d3.transition()\n .duration(750)\n .ease(d3.easeLinear);\n\nd3.selectAll(\".apple\").transition(t)\n .style(\"fill\", \"red\");\n\nd3.selectAll(\".orange\").transition(t)\n .style(\"fill\", \"orange\");\n```\n\nIf the specified *transition* is not found on a selected node or its ancestors (such as if the transition [already ended](#the-life-of-a-transition)), the default timing parameters are used; however, in a future release, this will likely be changed to throw an error. See [#59](https://github.com/d3/d3-transition/issues/59).\n\n<a name=\"selection_interrupt\" href=\"#selection_interrupt\">#</a> <i>selection</i>.<b>interrupt</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the selected elements, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used.\n\nInterrupting a transition on an element has no effect on any transitions on any descendant elements. For example, an [axis transition](https://github.com/d3/d3-axis) consists of multiple independent, synchronized transitions on the descendants of the axis [G element](https://www.w3.org/TR/SVG/struct.html#Groups) (the tick lines, the tick labels, the domain path, *etc.*). To interrupt the axis transition, you must therefore interrupt the descendants:\n\n```js\nselection.selectAll(\"*\").interrupt();\n```\n\nThe [universal selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors), `*`, selects all descendant elements. If you also want to interrupt the G element itself:\n\n```js\nselection.interrupt().selectAll(\"*\").interrupt();\n```\n\n<a name=\"interrupt\" href=\"#interrupt\">#</a> d3.<b>interrupt</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the specified *node*, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used. See also [*selection*.interrupt](#selection_interrupt).\n\n<a name=\"transition\" href=\"#transition\">#</a> d3.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29)\n\nReturns a new transition on the root element, `document.documentElement`, with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name. The *name* may also be a [transition](#transition) instance; see [*selection*.transition](#selection_transition). This method is equivalent to:\n\n```js\nd3.selection()\n .transition(name)\n```\n\nThis function can also be used to test for transitions (`instanceof d3.transition`) or to extend the transition prototype.\n\n<a name=\"transition_select\" href=\"#transition_select\">#</a> <i>transition</i>.<b>select</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/select.js)\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.select](https://github.com/d3/d3-selection#selection_select), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .select(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectAll\" href=\"#transition_selectAll\">#</a> <i>transition</i>.<b>selectAll</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js)\n\nFor each selected element, selects all descendant elements that match the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectAll](https://github.com/d3/d3-selection#selection_selectAll), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectAll(selector)\n .transition(transition)\n```\n\n<a name=\"transition_filter\" href=\"#transition_filter\">#</a> <i>transition</i>.<b>filter</b>(<i>filter</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js)\n\nFor each selected element, selects only the elements that match the specified *filter*, and returns a transition on the resulting selection. The *filter* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.filter](https://github.com/d3/d3-selection#selection_filter), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .filter(filter)\n .transition(transition)\n```\n\n<a name=\"transition_merge\" href=\"#transition_merge\">#</a> <i>transition</i>.<b>merge</b>(<i>other</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js)\n\nReturns a new transition merging this transition with the specified *other* transition, which must have the same id as this transition. The returned transition has the same number of groups, the same parents, the same name and the same id as this transition. Any missing (null) elements in this transition are filled with the corresponding element, if present (not null), from the *other* transition.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), merging with the selection likewise derived from the *other* transition via [*selection*.merge](https://github.com/d3/d3-selection#selection_merge), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .merge(other.selection())\n .transition(transition)\n```\n\n<a name=\"transition_transition\" href=\"#transition_transition\">#</a> <i>transition</i>.<b>transition</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js)\n\nReturns a new transition on the same selected elements as this transition, scheduled to start when this transition ends. The new transition inherits a reference time equal to this transition’s time plus its [delay](#transition_delay) and [duration](#transition_duration). The new transition also inherits this transition’s name, duration, and [easing](#transition_ease). This method can be used to schedule a sequence of chained transitions. For example:\n\n```js\nd3.selectAll(\".apple\")\n .transition() // First fade to green.\n .style(\"fill\", \"green\")\n .transition() // Then red.\n .style(\"fill\", \"red\")\n .transition() // Wait one second. Then brown, and remove.\n .delay(1000)\n .style(\"fill\", \"brown\")\n .remove();\n```\n\nThe delay for each transition is relative to its previous transition. Thus, in the above example, apples will stay red for one second before the last transition to brown starts.\n\n<a name=\"transition_selection\" href=\"#transition_selection\">#</a> <i>transition</i>.<b>selection</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js)\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n<a name=\"active\" href=\"#active\">#</a> d3.<b>active</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/active.js)\n\nReturns the active transition on the specified *node* with the specified *name*, if any. If no *name* is specified, null is used. Returns null if there is no such active transition on the specified node. This method is useful for creating chained transitions. For example, to initiate disco mode:\n\n```js\nd3.selectAll(\"circle\").transition()\n .delay(function(d, i) { return i * 50; })\n .on(\"start\", function repeat() {\n d3.active(this)\n .style(\"fill\", \"red\")\n .transition()\n .style(\"fill\", \"green\")\n .transition()\n .style(\"fill\", \"blue\")\n .transition()\n .on(\"start\", repeat);\n });\n```\n\nSee [chained transitions](https://bl.ocks.org/mbostock/70d5541b547cc222aa02) for an example.\n\n### Modifying Elements\n\nAfter selecting elements and creating a transition with [*selection*.transition](#selection_transition), use the transition’s transformation methods to affect document content.\n\n<a name=\"transition_attr\" href=\"#transition_attr\">#</a> <i>transition</i>.<b>attr</b>(<i>name</i>, <i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js)\n\nFor each selected element, assigns the [attribute tween](#transition_attrTween) for the attribute with the specified *name* to the specified target *value*. The starting value of the tween is the attribute’s value when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the attribute is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.attrTween](#transition_attrTween).\n\n<a name=\"transition_attrTween\" href=\"#transition_attrTween\">#</a> <i>transition</i>.<b>attrTween</b>(<i>name</i>[, <i>factory</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js)\n\nIf *factory* is specified and not null, assigns the attribute [tween](#transition_tween) for the attribute with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the attribute value. The interpolator must return a string. (To remove an attribute at the start of a transition, use [*transition*.attr](#transition_attr); to remove an attribute at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned attribute tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for attribute with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill attribute from red to blue:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as one that understands [SVG paths](https://bl.ocks.org/mbostock/3916621). A useful technique is *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used (say, with a [shape](https://github.com/d3/d3-shape)) to compute the new attribute value.\n\n<a name=\"transition_style\" href=\"#transition_style\">#</a> <i>transition</i>.<b>style</b>(<i>name</i>, <i>value</i>[, <i>priority</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/style.js)\n\nFor each selected element, assigns the [style tween](#transition_styleTween) for the style with the specified *name* to the specified target *value* with the specified *priority*. The starting value of the tween is the style’s inline value if present, and otherwise its computed value, when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the style is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.styleTween](#transition_styleTween).\n\n<a name=\"transition_styleTween\" href=\"#transition_styleTween\">#</a> <i>transition</i>.<b>styleTween</b>(<i>name</i>[, <i>factory</i>[, <i>priority</i>]])) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js)\n\nIf *factory* is specified and not null, assigns the style [tween](#transition_tween) for the style with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the style value with the specified *priority*. The interpolator must return a string. (To remove an style at the start of a transition, use [*transition*.style](#transition_style); to remove an style at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned style tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for style with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill style from red to blue:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.style](#transition_style):\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(this.style.fill, \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as with *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used to compute the new style value.\n\n<a name=\"transition_text\" href=\"#transition_text\">#</a> <i>transition</i>.<b>text</b>(<i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/text.js)\n\nFor each selected element, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified target *value* when the transition starts. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nTo interpolate text rather than to set it on start, use [*transition*.textTween](#transition_textTween) or append a replacement element and cross-fade opacity. Text is not interpolated by default because it is usually undesirable.\n\n<a name=\"transition_textTween\" href=\"#transition_textTween\">#</a> <i>transition</i>.<b>textTween</b>(<i>factory</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js), [Examples](https://observablehq.com/@d3/transition-texttween)\n \nIf *factory* is specified and not null, assigns the text [tween](#transition_tween) to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the text. The interpolator must return a string.\n\nFor example, to interpolate the text with integers from 0 to 100:\n\n```js\ntransition.textTween(function() {\n return d3.interpolateRound(0, 100);\n});\n```\n\nIf the specified *factory* is null, removes the previously-assigned text tween, if any. If *factory* is not specified, returns the current interpolator factory for text, or undefined if no such tween exists.\n\n<a name=\"transition_remove\" href=\"#transition_remove\">#</a> <i>transition</i>.<b>remove</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js)\n\nFor each selected element, [removes](https://github.com/d3/d3-selection#selection_remove) the element when the transition ends, as long as the element has no other active or pending transitions. If the element has other active or pending transitions, does nothing.\n\n<a name=\"transition_tween\" href=\"#transition_tween\">#</a> <i>transition</i>.<b>tween</b>(<i>name</i>[, <i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js)\n\nFor each selected element, assigns the tween with the specified *name* with the specified *value* function. The *value* must be specified as a function that returns a function. When the transition starts, the *value* function is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned function is then invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. If the specified *value* is null, removes the previously-assigned tween of the specified *name*, if any.\n\nFor example, to interpolate the fill attribute to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.tween(\"attr.fill\", function() {\n var i = d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n return function(t) {\n this.setAttribute(\"fill\", i(t));\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, or to perform side-effects, say to animate the [scroll offset](https://bl.ocks.org/mbostock/1649463).\n\n### Timing\n\nThe [easing](#transition_ease), [delay](#transition_delay) and [duration](#transition_duration) of a transition is configurable. For example, a per-element delay can be used to [stagger the reordering](https://observablehq.com/@d3/sortable-bar-chart) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n<a name=\"transition_delay\" href=\"#transition_delay\">#</a> <i>transition</i>.<b>delay</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js)\n\nFor each selected element, sets the transition delay to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition delay. If a delay is not specified, it defaults to zero.\n\nIf a *value* is not specified, returns the current value of the delay for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\nSetting the delay to a multiple of the index `i` is a convenient way to stagger transitions across a set of elements. For example:\n\n```js\ntransition.delay(function(d, i) { return i * 10; });\n```\n\nOf course, you can also compute the delay as a function of the data, or [sort the selection](https://github.com/d3/d3-selection#selection_sort) before computed an index-based delay.\n\n<a name=\"transition_duration\" href=\"#transition_duration\">#</a> <i>transition</i>.<b>duration</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js)\n\nFor each selected element, sets the transition duration to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition duration. If a duration is not specified, it defaults to 250ms.\n\nIf a *value* is not specified, returns the current value of the duration for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_ease\" href=\"#transition_ease\">#</a> <i>transition</i>.<b>ease</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js)\n\nSpecifies the transition [easing function](https://github.com/d3/d3-ease) for all selected elements. The *value* must be specified as a function. The easing function is invoked for each frame of the animation, being passed the normalized time *t* in the range [0, 1]; it must then return the eased time *tʹ* which is typically also in the range [0, 1]. A good easing function should return 0 if *t* = 0 and 1 if *t* = 1. If an easing function is not specified, it defaults to [d3.easeCubic](https://github.com/d3/d3-ease#easeCubic).\n\nIf a *value* is not specified, returns the current easing function for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_easeVarying\" href=\"#transition_easeVarying\">#</a> <i>transition</i>.<b>easeVarying</b>(<i>factory</i>) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/easeVarying.js \"Source\")\n\nSpecifies a factory for the transition [easing function](https://github.com/d3/d3-ease). The *factory* must be a function. It is invoked for each node of the selection, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. It must return an easing function.\n\n### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n<a name=\"transition_end\" href=\"#transition_end\">#</a> <i>transition</i>.<b>end</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/end.js)\n\nReturns a promise that resolves when every selected element finishes transitioning. If any element’s transition is cancelled or interrupted, the promise rejects.\n\n<a name=\"transition_on\" href=\"#transition_on\">#</a> <i>transition</i>.<b>on</b>(<i>typenames</i>[, <i>listener</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/on.js)\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is one of the following string event types:\n\n* `start` - when the transition starts.\n* `end` - when the transition ends.\n* `interrupt` - when the transition is interrupted.\n* `cancel` - when the transition is cancelled.\n\nSee [The Life of a Transition](#the-life-of-a-transition) for more. Note that these are *not* native DOM events as implemented by [*selection*.on](https://github.com/d3/d3-selection#selection_on) and [*selection*.dispatch](https://github.com/d3/d3-selection#selection_dispatch), but transition events!\n\nThe type may be optionally followed by a period (`.`) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as `start.foo` and `start.bar`. To specify multiple typenames, separate typenames with spaces, such as `interrupt end` or `start.foo start.bar`.\n\nWhen a specified transition event is dispatched on a selected node, the specified *listener* will be invoked for the transitioning element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. Listeners always see the latest datum for their element, but the index is a property of the selection and is fixed when the listener is assigned; to update the index, re-assign the listener.\n\nIf an event listener was previously registered for the same *typename* on a selected element, the old listener is removed before the new listener is added. To remove a listener, pass null as the *listener*. To remove all listeners for a given name, pass null as the *listener* and `.foo` as the *typename*, where `foo` is the name; to remove all listeners with no name, specify `.` as the *typename*.\n\nIf a *listener* is not specified, returns the currently-assigned listener for the specified event *typename* on the first (non-null) selected element, if any. If multiple typenames are specified, the first matching listener is returned.\n\n<a name=\"transition_each\" href=\"#transition_each\">#</a> <i>transition</i>.<b>each</b>(<i>function</i>) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/each.js)\n\nInvokes the specified *function* for each selected element, passing in the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. This method can be used to invoke arbitrary code for each selected element, and is useful for creating a context to access parent and child data simultaneously. Equivalent to [*selection*.each](https://github.com/d3/d3-selection#selection_each).\n\n<a name=\"transition_call\" href=\"#transition_call\">#</a> <i>transition</i>.<b>call</b>(<i>function</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/call.js)\n\nInvokes the specified *function* exactly once, passing in this transition along with any optional *arguments*. Returns this transition. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several attributes in a reusable function:\n\n```js\nfunction color(transition, fill, stroke) {\n transition\n .style(\"fill\", fill)\n .style(\"stroke\", stroke);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").transition().call(color, \"red\", \"blue\");\n```\n\nThis is equivalent to:\n\n```js\ncolor(d3.selectAll(\"div\").transition(), \"red\", \"blue\");\n```\n\nEquivalent to [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n<a name=\"transition_empty\" href=\"#transition_empty\">#</a> <i>transition</i>.<b>empty</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js)\n\nReturns true if this transition contains no (non-null) elements. Equivalent to [*selection*.empty](https://github.com/d3/d3-selection#selection_empty).\n\n<a name=\"transition_nodes\" href=\"#transition_nodes\">#</a> <i>transition</i>.<b>nodes</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js)\n\nReturns an array of all (non-null) elements in this transition. Equivalent to [*selection*.nodes](https://github.com/d3/d3-selection#selection_nodes).\n\n<a name=\"transition_node\" href=\"#transition_node\">#</a> <i>transition</i>.<b>node</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/node.js)\n\nReturns the first (non-null) element in this transition. If the transition is empty, returns null. Equivalent to [*selection*.node](https://github.com/d3/d3-selection#selection_node).\n\n<a name=\"transition_size\" href=\"#transition_size\">#</a> <i>transition</i>.<b>size</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/size.js)\n\nReturns the total number of elements in this transition. Equivalent to [*selection*.size](https://github.com/d3/d3-selection#selection_size).\n\n### The Life of a Transition\n\nImmediately after creating a transition, such as by [*selection*.transition](#selection_transition) or [*transition*.transition](#transition_transition), you may configure the transition using methods such as [*transition*.delay](#transition_delay), [*transition*.duration](#transition_duration), [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style). Methods that specify target values (such as *transition*.attr) are evaluated synchronously; however, methods that require the starting value for interpolation, such as [*transition*.attrTween](#transition_attrTween) and [*transition*.styleTween](#transition_styleTween), must be deferred until the transition starts.\n\nShortly after creation, either at the end of the current frame or during the next frame, the transition is scheduled. At this point, the delay and `start` event listeners may no longer be changed; attempting to do so throws an error with the message “too late: already scheduled” (or if the transition has ended, “transition not found”).\n\nWhen the transition subsequently starts, it interrupts the active transition of the same name on the same element, if any, dispatching an `interrupt` event to registered listeners. (Note that interrupts happen on start, not creation, and thus even a zero-delay transition will not immediately interrupt the active transition: the old transition is given a final frame. Use [*selection*.interrupt](#selection_interrupt) to interrupt immediately.) The starting transition also cancels any pending transitions of the same name on the same element that were created before the starting transition. The transition then dispatches a `start` event to registered listeners. This is the last moment at which the transition may be modified: the transition’s timing, tweens, and listeners may not be changed when it is running; attempting to do so throws an error with the message “too late: already running” (or if the transition has ended, “transition not found”). The transition initializes its tweens immediately after starting.\n\nDuring the frame the transition starts, but *after* all transitions starting this frame have been started, the transition invokes its tweens for the first time. Batching tween initialization, which typically involves reading from the DOM, improves performance by avoiding interleaved DOM reads and writes.\n\nFor each frame that a transition is active, it invokes its tweens with an [eased](#transition_ease) *t*-value ranging from 0 to 1. Within each frame, the transition invokes its tweens in the order they were registered.\n\nWhen a transition ends, it invokes its tweens a final time with a (non-eased) *t*-value of 1. It then dispatches an `end` event to registered listeners. This is the last moment at which the transition may be inspected: after ending, the transition is deleted from the element, and its configuration is destroyed. (A transition’s configuration is also destroyed on interrupt or cancel.) Attempting to inspect a transition after it is destroyed throws an error with the message “transition not found”.\n","licenseText":"Copyright (c) 2010-2015, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTERMS OF USE - EASING EQUATIONS\n\nOpen source under the BSD License.\n\nCopyright 2001 Robert Penner\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n- Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n- Neither the name of the author nor the names of contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n","_id":"d3-transition@2.0.0-rc.2","dist":{"shasum":"de33a90d2f753641d85f3333a11ac5802d3190c6","integrity":"sha512-/LFCu2OdPgdDjTG9qTFHzCEaqFWXNRzuuyMWctAp0VO4thlApAsO/YGDDoKxK3Vf9DubYpB52fwLWiohgKiCbA==","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-2.0.0-rc.2.tgz","fileCount":39,"unpackedSize":109511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGXnJCRA9TVsSAnZWagAAsNsP+gKQ9BZKEZ0omNP7GyTA\nLd63wQPt6c1TopaUEVjG9MRaT/7s0lMtdcpiY5hcgpqbFUB8Cl1cIlpd34d6\njtIRpj/EExG+s4QO5nnw9mSHNYZVCCdEG99BnFyHWFgrkZO8XIaLsSw+vHVq\nedW7XguEefO27KugBpefpsMI+ohMC8kyadEPOP9LdaYrYt3A5kenjmHnRbe4\naBNkxStYw8Hy1jdQkfcaMAsMXI3OEcBhJx1dNhk1+PWzGyzMwzq5QlJrUSMx\n+jkjxCl9B0FYnuT26E9GNHRWXGfeFJUl+ROnSVppGMJ0dXyBdHq2ARQqpGaJ\nWe1TrIln6tKeHuyYLwuenbgXxNdbHeXYuYSL4ZZ7AGXbZxk7wDKV7QSgkXGp\nSEZbZk7nakGSXxgEa0g2BNZxt+ZimiXBdwD58VppSnXhSBAxOxRNCtOY7fYK\nvUZ/mNbB93G3mcNHQv+LnTIqQdRPigDla7kZCxrTWdEKgNb0jSOstKXxyySe\nAqrhv0R0yLMdIFWLe5YbJ4nC+ZCf0ctSCTC0O1I7Q0dpR5qVvWP72ZiOTza9\n6lYCkFzU9P7vPumkCFo5NJuo99kmwWePDGxZr7M+OOJ3vMjXdkltoz71osyC\n0ZnxcNYlczFBcPSaTQscbOboSROM7umFAD8AO1MT3nKmi/zK+neyfML/Y+Cc\nqs+T\r\n=9dcW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQ+X3C6w+6t1Zpz5C4Su5A7wCHo9FWospo20vWBIjR0wIgFvVZ3/O/B3bVCvHU/A5FPRARK/DJ5pZgLkXnvuCm528="}]},"maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"fil@rezo.net","name":"recifs"}],"_npmUser":{"name":"recifs","email":"fil@rezo.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_2.0.0-rc.2_1595505097287_0.09806790277986965"},"_hasShrinkwrap":false},"2.0.0-rc.3":{"name":"d3-transition","version":"2.0.0-rc.3","publishConfig":{"tag":"next"},"description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":true,"dependencies":{"d3-color":">=2.0.0-rc.1","d3-dispatch":">=2.0.0-rc.1","d3-ease":">=2.0.0-rc.1","d3-interpolate":">=2.0.0-rc.1","d3-timer":">=2.0.0-rc.1"},"peerDependencies":{"d3-selection":"2.0.0-rc.3"},"devDependencies":{"d3-selection":">=2.0.0-rc.1","eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"readmeFilename":"README.md","readme":"# d3-transition\n\nA transition is a [selection](https://github.com/d3/d3-selection)-like interface for animating changes to the DOM. Instead of applying changes instantaneously, transitions smoothly interpolate the DOM from its current state to the desired target state over a given duration.\n\nTo apply a transition, select elements, call [*selection*.transition](#selection_transition), and then make the desired changes. For example:\n\n```js\nd3.select(\"body\")\n .transition()\n .style(\"background-color\", \"red\");\n```\n\nTransitions support most selection methods (such as [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style) in place of [*selection*.attr](https://github.com/d3/d3-selection#selection_attr) and [*selection*.style](https://github.com/d3/d3-selection#selection_style)), but not all methods are supported; for example, you must [append](https://github.com/d3/d3-selection#selection_append) elements or [bind data](https://github.com/d3/d3-selection#joining-data) before a transition starts. A [*transition*.remove](#transition_remove) operator is provided for convenient removal of elements when the transition ends.\n\nTo compute intermediate state, transitions leverage a variety of [built-in interpolators](https://github.com/d3/d3-interpolate). [Colors](https://github.com/d3/d3-interpolate#interpolateRgb), [numbers](https://github.com/d3/d3-interpolate#interpolateNumber), and [transforms](https://github.com/d3/d3-interpolate#interpolateTransform) are automatically detected. [Strings](https://github.com/d3/d3-interpolate#interpolateString) with embedded numbers are also detected, as is common with many styles (such as padding or font sizes) and paths. To specify a custom interpolator, use [*transition*.attrTween](#transition_attrTween), [*transition*.styleTween](#transition_styleTween) or [*transition*.tween](#transition_tween).\n\n## Installing\n\nIf you use NPM, `npm install d3-transition`. Otherwise, download the [latest release](https://github.com/d3/d3-transition/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-transition.v2.min.js) or as part of [D3](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n<script src=\"https://d3js.org/d3-color.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-dispatch.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-ease.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-interpolate.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-selection.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-timer.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-transition.v2.min.js\"></script>\n<script>\n\nvar transition = d3.transition();\n\n</script>\n```\n\n[Try d3-transition in your browser.](https://tonicdev.com/npm/d3-transition)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Timing](#timing)\n* [Control Flow](#control-flow)\n* [The Life of a Transition](#the-life-of-a-transition)\n\n### Selecting Elements\n\nTransitions are derived from [selections](https://github.com/d3/d3-selection) via [*selection*.transition](#selection_transition). You can also create a transition on the document root element using [d3.transition](#transition).\n\n<a name=\"selection_transition\" href=\"#selection_transition\">#</a> <i>selection</i>.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js)\n\nReturns a new transition on the given *selection* with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name.\n\nIf the *name* is a [transition](#transition) instance, the returned transition has the same id and name as the specified transition. If a transition with the same id already exists on a selected element, the existing transition is returned for that element. Otherwise, the timing of the returned transition is inherited from the existing transition of the same id on the nearest ancestor of each selected element. Thus, this method can be used to synchronize a transition across multiple selections, or to re-select a transition for specific elements and modify its configuration. For example:\n\n```js\nvar t = d3.transition()\n .duration(750)\n .ease(d3.easeLinear);\n\nd3.selectAll(\".apple\").transition(t)\n .style(\"fill\", \"red\");\n\nd3.selectAll(\".orange\").transition(t)\n .style(\"fill\", \"orange\");\n```\n\nIf the specified *transition* is not found on a selected node or its ancestors (such as if the transition [already ended](#the-life-of-a-transition)), the default timing parameters are used; however, in a future release, this will likely be changed to throw an error. See [#59](https://github.com/d3/d3-transition/issues/59).\n\n<a name=\"selection_interrupt\" href=\"#selection_interrupt\">#</a> <i>selection</i>.<b>interrupt</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the selected elements, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used.\n\nInterrupting a transition on an element has no effect on any transitions on any descendant elements. For example, an [axis transition](https://github.com/d3/d3-axis) consists of multiple independent, synchronized transitions on the descendants of the axis [G element](https://www.w3.org/TR/SVG/struct.html#Groups) (the tick lines, the tick labels, the domain path, *etc.*). To interrupt the axis transition, you must therefore interrupt the descendants:\n\n```js\nselection.selectAll(\"*\").interrupt();\n```\n\nThe [universal selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors), `*`, selects all descendant elements. If you also want to interrupt the G element itself:\n\n```js\nselection.interrupt().selectAll(\"*\").interrupt();\n```\n\n<a name=\"interrupt\" href=\"#interrupt\">#</a> d3.<b>interrupt</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the specified *node*, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used. See also [*selection*.interrupt](#selection_interrupt).\n\n<a name=\"transition\" href=\"#transition\">#</a> d3.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29)\n\nReturns a new transition on the root element, `document.documentElement`, with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name. The *name* may also be a [transition](#transition) instance; see [*selection*.transition](#selection_transition). This method is equivalent to:\n\n```js\nd3.selection()\n .transition(name)\n```\n\nThis function can also be used to test for transitions (`instanceof d3.transition`) or to extend the transition prototype.\n\n<a name=\"transition_select\" href=\"#transition_select\">#</a> <i>transition</i>.<b>select</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/select.js)\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.select](https://github.com/d3/d3-selection#selection_select), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .select(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectAll\" href=\"#transition_selectAll\">#</a> <i>transition</i>.<b>selectAll</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js)\n\nFor each selected element, selects all descendant elements that match the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectAll](https://github.com/d3/d3-selection#selection_selectAll), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectAll(selector)\n .transition(transition)\n```\n\n<a name=\"transition_filter\" href=\"#transition_filter\">#</a> <i>transition</i>.<b>filter</b>(<i>filter</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js)\n\nFor each selected element, selects only the elements that match the specified *filter*, and returns a transition on the resulting selection. The *filter* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.filter](https://github.com/d3/d3-selection#selection_filter), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .filter(filter)\n .transition(transition)\n```\n\n<a name=\"transition_merge\" href=\"#transition_merge\">#</a> <i>transition</i>.<b>merge</b>(<i>other</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js)\n\nReturns a new transition merging this transition with the specified *other* transition, which must have the same id as this transition. The returned transition has the same number of groups, the same parents, the same name and the same id as this transition. Any missing (null) elements in this transition are filled with the corresponding element, if present (not null), from the *other* transition.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), merging with the selection likewise derived from the *other* transition via [*selection*.merge](https://github.com/d3/d3-selection#selection_merge), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .merge(other.selection())\n .transition(transition)\n```\n\n<a name=\"transition_transition\" href=\"#transition_transition\">#</a> <i>transition</i>.<b>transition</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js)\n\nReturns a new transition on the same selected elements as this transition, scheduled to start when this transition ends. The new transition inherits a reference time equal to this transition’s time plus its [delay](#transition_delay) and [duration](#transition_duration). The new transition also inherits this transition’s name, duration, and [easing](#transition_ease). This method can be used to schedule a sequence of chained transitions. For example:\n\n```js\nd3.selectAll(\".apple\")\n .transition() // First fade to green.\n .style(\"fill\", \"green\")\n .transition() // Then red.\n .style(\"fill\", \"red\")\n .transition() // Wait one second. Then brown, and remove.\n .delay(1000)\n .style(\"fill\", \"brown\")\n .remove();\n```\n\nThe delay for each transition is relative to its previous transition. Thus, in the above example, apples will stay red for one second before the last transition to brown starts.\n\n<a name=\"transition_selection\" href=\"#transition_selection\">#</a> <i>transition</i>.<b>selection</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js)\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n<a name=\"active\" href=\"#active\">#</a> d3.<b>active</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/active.js)\n\nReturns the active transition on the specified *node* with the specified *name*, if any. If no *name* is specified, null is used. Returns null if there is no such active transition on the specified node. This method is useful for creating chained transitions. For example, to initiate disco mode:\n\n```js\nd3.selectAll(\"circle\").transition()\n .delay(function(d, i) { return i * 50; })\n .on(\"start\", function repeat() {\n d3.active(this)\n .style(\"fill\", \"red\")\n .transition()\n .style(\"fill\", \"green\")\n .transition()\n .style(\"fill\", \"blue\")\n .transition()\n .on(\"start\", repeat);\n });\n```\n\nSee [chained transitions](https://bl.ocks.org/mbostock/70d5541b547cc222aa02) for an example.\n\n### Modifying Elements\n\nAfter selecting elements and creating a transition with [*selection*.transition](#selection_transition), use the transition’s transformation methods to affect document content.\n\n<a name=\"transition_attr\" href=\"#transition_attr\">#</a> <i>transition</i>.<b>attr</b>(<i>name</i>, <i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js)\n\nFor each selected element, assigns the [attribute tween](#transition_attrTween) for the attribute with the specified *name* to the specified target *value*. The starting value of the tween is the attribute’s value when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the attribute is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.attrTween](#transition_attrTween).\n\n<a name=\"transition_attrTween\" href=\"#transition_attrTween\">#</a> <i>transition</i>.<b>attrTween</b>(<i>name</i>[, <i>factory</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js)\n\nIf *factory* is specified and not null, assigns the attribute [tween](#transition_tween) for the attribute with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the attribute value. The interpolator must return a string. (To remove an attribute at the start of a transition, use [*transition*.attr](#transition_attr); to remove an attribute at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned attribute tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for attribute with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill attribute from red to blue:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as one that understands [SVG paths](https://bl.ocks.org/mbostock/3916621). A useful technique is *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used (say, with a [shape](https://github.com/d3/d3-shape)) to compute the new attribute value.\n\n<a name=\"transition_style\" href=\"#transition_style\">#</a> <i>transition</i>.<b>style</b>(<i>name</i>, <i>value</i>[, <i>priority</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/style.js)\n\nFor each selected element, assigns the [style tween](#transition_styleTween) for the style with the specified *name* to the specified target *value* with the specified *priority*. The starting value of the tween is the style’s inline value if present, and otherwise its computed value, when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the style is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.styleTween](#transition_styleTween).\n\n<a name=\"transition_styleTween\" href=\"#transition_styleTween\">#</a> <i>transition</i>.<b>styleTween</b>(<i>name</i>[, <i>factory</i>[, <i>priority</i>]])) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js)\n\nIf *factory* is specified and not null, assigns the style [tween](#transition_tween) for the style with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the style value with the specified *priority*. The interpolator must return a string. (To remove an style at the start of a transition, use [*transition*.style](#transition_style); to remove an style at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned style tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for style with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill style from red to blue:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.style](#transition_style):\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(this.style.fill, \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as with *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used to compute the new style value.\n\n<a name=\"transition_text\" href=\"#transition_text\">#</a> <i>transition</i>.<b>text</b>(<i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/text.js)\n\nFor each selected element, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified target *value* when the transition starts. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nTo interpolate text rather than to set it on start, use [*transition*.textTween](#transition_textTween) or append a replacement element and cross-fade opacity. Text is not interpolated by default because it is usually undesirable.\n\n<a name=\"transition_textTween\" href=\"#transition_textTween\">#</a> <i>transition</i>.<b>textTween</b>(<i>factory</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js), [Examples](https://observablehq.com/@d3/transition-texttween)\n \nIf *factory* is specified and not null, assigns the text [tween](#transition_tween) to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the text. The interpolator must return a string.\n\nFor example, to interpolate the text with integers from 0 to 100:\n\n```js\ntransition.textTween(function() {\n return d3.interpolateRound(0, 100);\n});\n```\n\nIf the specified *factory* is null, removes the previously-assigned text tween, if any. If *factory* is not specified, returns the current interpolator factory for text, or undefined if no such tween exists.\n\n<a name=\"transition_remove\" href=\"#transition_remove\">#</a> <i>transition</i>.<b>remove</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js)\n\nFor each selected element, [removes](https://github.com/d3/d3-selection#selection_remove) the element when the transition ends, as long as the element has no other active or pending transitions. If the element has other active or pending transitions, does nothing.\n\n<a name=\"transition_tween\" href=\"#transition_tween\">#</a> <i>transition</i>.<b>tween</b>(<i>name</i>[, <i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js)\n\nFor each selected element, assigns the tween with the specified *name* with the specified *value* function. The *value* must be specified as a function that returns a function. When the transition starts, the *value* function is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned function is then invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. If the specified *value* is null, removes the previously-assigned tween of the specified *name*, if any.\n\nFor example, to interpolate the fill attribute to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.tween(\"attr.fill\", function() {\n var i = d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n return function(t) {\n this.setAttribute(\"fill\", i(t));\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, or to perform side-effects, say to animate the [scroll offset](https://bl.ocks.org/mbostock/1649463).\n\n### Timing\n\nThe [easing](#transition_ease), [delay](#transition_delay) and [duration](#transition_duration) of a transition is configurable. For example, a per-element delay can be used to [stagger the reordering](https://observablehq.com/@d3/sortable-bar-chart) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n<a name=\"transition_delay\" href=\"#transition_delay\">#</a> <i>transition</i>.<b>delay</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js)\n\nFor each selected element, sets the transition delay to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition delay. If a delay is not specified, it defaults to zero.\n\nIf a *value* is not specified, returns the current value of the delay for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\nSetting the delay to a multiple of the index `i` is a convenient way to stagger transitions across a set of elements. For example:\n\n```js\ntransition.delay(function(d, i) { return i * 10; });\n```\n\nOf course, you can also compute the delay as a function of the data, or [sort the selection](https://github.com/d3/d3-selection#selection_sort) before computed an index-based delay.\n\n<a name=\"transition_duration\" href=\"#transition_duration\">#</a> <i>transition</i>.<b>duration</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js)\n\nFor each selected element, sets the transition duration to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition duration. If a duration is not specified, it defaults to 250ms.\n\nIf a *value* is not specified, returns the current value of the duration for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_ease\" href=\"#transition_ease\">#</a> <i>transition</i>.<b>ease</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js)\n\nSpecifies the transition [easing function](https://github.com/d3/d3-ease) for all selected elements. The *value* must be specified as a function. The easing function is invoked for each frame of the animation, being passed the normalized time *t* in the range [0, 1]; it must then return the eased time *tʹ* which is typically also in the range [0, 1]. A good easing function should return 0 if *t* = 0 and 1 if *t* = 1. If an easing function is not specified, it defaults to [d3.easeCubic](https://github.com/d3/d3-ease#easeCubic).\n\nIf a *value* is not specified, returns the current easing function for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_easeVarying\" href=\"#transition_easeVarying\">#</a> <i>transition</i>.<b>easeVarying</b>(<i>factory</i>) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/easeVarying.js \"Source\")\n\nSpecifies a factory for the transition [easing function](https://github.com/d3/d3-ease). The *factory* must be a function. It is invoked for each node of the selection, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. It must return an easing function.\n\n### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n<a name=\"transition_end\" href=\"#transition_end\">#</a> <i>transition</i>.<b>end</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/end.js)\n\nReturns a promise that resolves when every selected element finishes transitioning. If any element’s transition is cancelled or interrupted, the promise rejects.\n\n<a name=\"transition_on\" href=\"#transition_on\">#</a> <i>transition</i>.<b>on</b>(<i>typenames</i>[, <i>listener</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/on.js)\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is one of the following string event types:\n\n* `start` - when the transition starts.\n* `end` - when the transition ends.\n* `interrupt` - when the transition is interrupted.\n* `cancel` - when the transition is cancelled.\n\nSee [The Life of a Transition](#the-life-of-a-transition) for more. Note that these are *not* native DOM events as implemented by [*selection*.on](https://github.com/d3/d3-selection#selection_on) and [*selection*.dispatch](https://github.com/d3/d3-selection#selection_dispatch), but transition events!\n\nThe type may be optionally followed by a period (`.`) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as `start.foo` and `start.bar`. To specify multiple typenames, separate typenames with spaces, such as `interrupt end` or `start.foo start.bar`.\n\nWhen a specified transition event is dispatched on a selected node, the specified *listener* will be invoked for the transitioning element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. Listeners always see the latest datum for their element, but the index is a property of the selection and is fixed when the listener is assigned; to update the index, re-assign the listener.\n\nIf an event listener was previously registered for the same *typename* on a selected element, the old listener is removed before the new listener is added. To remove a listener, pass null as the *listener*. To remove all listeners for a given name, pass null as the *listener* and `.foo` as the *typename*, where `foo` is the name; to remove all listeners with no name, specify `.` as the *typename*.\n\nIf a *listener* is not specified, returns the currently-assigned listener for the specified event *typename* on the first (non-null) selected element, if any. If multiple typenames are specified, the first matching listener is returned.\n\n<a name=\"transition_each\" href=\"#transition_each\">#</a> <i>transition</i>.<b>each</b>(<i>function</i>) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/each.js)\n\nInvokes the specified *function* for each selected element, passing in the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. This method can be used to invoke arbitrary code for each selected element, and is useful for creating a context to access parent and child data simultaneously. Equivalent to [*selection*.each](https://github.com/d3/d3-selection#selection_each).\n\n<a name=\"transition_call\" href=\"#transition_call\">#</a> <i>transition</i>.<b>call</b>(<i>function</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/call.js)\n\nInvokes the specified *function* exactly once, passing in this transition along with any optional *arguments*. Returns this transition. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several attributes in a reusable function:\n\n```js\nfunction color(transition, fill, stroke) {\n transition\n .style(\"fill\", fill)\n .style(\"stroke\", stroke);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").transition().call(color, \"red\", \"blue\");\n```\n\nThis is equivalent to:\n\n```js\ncolor(d3.selectAll(\"div\").transition(), \"red\", \"blue\");\n```\n\nEquivalent to [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n<a name=\"transition_empty\" href=\"#transition_empty\">#</a> <i>transition</i>.<b>empty</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js)\n\nReturns true if this transition contains no (non-null) elements. Equivalent to [*selection*.empty](https://github.com/d3/d3-selection#selection_empty).\n\n<a name=\"transition_nodes\" href=\"#transition_nodes\">#</a> <i>transition</i>.<b>nodes</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js)\n\nReturns an array of all (non-null) elements in this transition. Equivalent to [*selection*.nodes](https://github.com/d3/d3-selection#selection_nodes).\n\n<a name=\"transition_node\" href=\"#transition_node\">#</a> <i>transition</i>.<b>node</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/node.js)\n\nReturns the first (non-null) element in this transition. If the transition is empty, returns null. Equivalent to [*selection*.node](https://github.com/d3/d3-selection#selection_node).\n\n<a name=\"transition_size\" href=\"#transition_size\">#</a> <i>transition</i>.<b>size</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/size.js)\n\nReturns the total number of elements in this transition. Equivalent to [*selection*.size](https://github.com/d3/d3-selection#selection_size).\n\n### The Life of a Transition\n\nImmediately after creating a transition, such as by [*selection*.transition](#selection_transition) or [*transition*.transition](#transition_transition), you may configure the transition using methods such as [*transition*.delay](#transition_delay), [*transition*.duration](#transition_duration), [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style). Methods that specify target values (such as *transition*.attr) are evaluated synchronously; however, methods that require the starting value for interpolation, such as [*transition*.attrTween](#transition_attrTween) and [*transition*.styleTween](#transition_styleTween), must be deferred until the transition starts.\n\nShortly after creation, either at the end of the current frame or during the next frame, the transition is scheduled. At this point, the delay and `start` event listeners may no longer be changed; attempting to do so throws an error with the message “too late: already scheduled” (or if the transition has ended, “transition not found”).\n\nWhen the transition subsequently starts, it interrupts the active transition of the same name on the same element, if any, dispatching an `interrupt` event to registered listeners. (Note that interrupts happen on start, not creation, and thus even a zero-delay transition will not immediately interrupt the active transition: the old transition is given a final frame. Use [*selection*.interrupt](#selection_interrupt) to interrupt immediately.) The starting transition also cancels any pending transitions of the same name on the same element that were created before the starting transition. The transition then dispatches a `start` event to registered listeners. This is the last moment at which the transition may be modified: the transition’s timing, tweens, and listeners may not be changed when it is running; attempting to do so throws an error with the message “too late: already running” (or if the transition has ended, “transition not found”). The transition initializes its tweens immediately after starting.\n\nDuring the frame the transition starts, but *after* all transitions starting this frame have been started, the transition invokes its tweens for the first time. Batching tween initialization, which typically involves reading from the DOM, improves performance by avoiding interleaved DOM reads and writes.\n\nFor each frame that a transition is active, it invokes its tweens with an [eased](#transition_ease) *t*-value ranging from 0 to 1. Within each frame, the transition invokes its tweens in the order they were registered.\n\nWhen a transition ends, it invokes its tweens a final time with a (non-eased) *t*-value of 1. It then dispatches an `end` event to registered listeners. This is the last moment at which the transition may be inspected: after ending, the transition is deleted from the element, and its configuration is destroyed. (A transition’s configuration is also destroyed on interrupt or cancel.) Attempting to inspect a transition after it is destroyed throws an error with the message “transition not found”.\n","licenseText":"Copyright (c) 2010-2015, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTERMS OF USE - EASING EQUATIONS\n\nOpen source under the BSD License.\n\nCopyright 2001 Robert Penner\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n- Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n- Neither the name of the author nor the names of contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n","_id":"d3-transition@2.0.0-rc.3","dist":{"shasum":"7d796b7f31ed6b814096235dd3dcf12121669f5a","integrity":"sha512-g3otrqo4z1WEbT3QSRu7lrzwvrrY1t2Ao5YkDA6Cr5qo4vfDpJBZt/uc/Hov6pBOIYCXyaFDVeiIR+jkc8lU3g==","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-2.0.0-rc.3.tgz","fileCount":39,"unpackedSize":109549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGvesCRA9TVsSAnZWagAA/H8P/A+5/yB9ygCbeeZowbQe\nCloZDUm8xT2Md7L4Mxn+vqj9mcjb9Z2XTbQlo2PbjFrckZ82APHVaHiJB+Lw\nix/RZLyQf9VPGp0uv5fK4q81Y8vQ+rWQDsMdVz2i0rFqfpLIwykGFPjrY24e\nsBHWpe0p+1K0+rWtxdiluIjfcSFQ9xhTiHtwpERYI+yqsY2sMXS2ZaSfSe5W\nNkPAioNfDHDOx8MddHWBj9q+wrxBpGVO2IfODyad4NacgBxsGRBnFsgsLa66\nLmHLDBCYN3BP/htJxSRHVpM3cfc9LLfcL1JLU5RoYDbsZNcez3HayYV3MN8v\n7kSoRJZ0evXLEoB/rY3yfxNS5utqrArwOwmhiB6JzQqPIEJca5tQNl6xirh8\nlVz25EAWZym9YhQ7joV4P4Ai+2kfaNn1AHH2fsIEFUmK/9UNpljRyd5ghyV+\nPNK6bBPR1wKSy8PRd2I8UVKz2I1007deUdMUeg0H/xEN5pqjffvELH8lsmjN\nhgCAB14ZyWb683I08mdVDHJccW7uXHcJB1ho39FcOSQFBP1B1WbmW2m95sWm\nZ6RpPAwFlPtav7xkT+g5vnBb/cOJQ8wlStiJOsaV/ACdD5joZP+QWLQfJnub\nui6lcqEPLvyfYz20my4nv6hqs7PBSuDMqnDIdVg7UnUQAe+0afHrMVHFGAYu\nN/6z\r\n=7FuB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqtNlz1XnQ+XxMKABD9IvtA694EtBtMA5046P30vDCegIhAOFFMzrN9FXsL9up3DU1hupjNRNYwAlT0Pk78rwhd9EK"}]},"maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"fil@rezo.net","name":"recifs"}],"_npmUser":{"name":"recifs","email":"fil@rezo.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_2.0.0-rc.3_1595602859952_0.37106338775802095"},"_hasShrinkwrap":false},"2.0.0-rc.4":{"name":"d3-transition","version":"2.0.0-rc.4","publishConfig":{"tag":"next"},"description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":true,"dependencies":{"d3-color":">=2.0.0-rc.1","d3-dispatch":">=2.0.0-rc.1","d3-ease":">=2.0.0-rc.1","d3-interpolate":">=2.0.0-rc.1","d3-timer":">=2.0.0-rc.1"},"peerDependencies":{"d3-selection":"2.0.0-rc.3"},"devDependencies":{"d3-selection":">=2.0.0-rc.1","eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"readmeFilename":"README.md","readme":"# d3-transition\n\nA transition is a [selection](https://github.com/d3/d3-selection)-like interface for animating changes to the DOM. Instead of applying changes instantaneously, transitions smoothly interpolate the DOM from its current state to the desired target state over a given duration.\n\nTo apply a transition, select elements, call [*selection*.transition](#selection_transition), and then make the desired changes. For example:\n\n```js\nd3.select(\"body\")\n .transition()\n .style(\"background-color\", \"red\");\n```\n\nTransitions support most selection methods (such as [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style) in place of [*selection*.attr](https://github.com/d3/d3-selection#selection_attr) and [*selection*.style](https://github.com/d3/d3-selection#selection_style)), but not all methods are supported; for example, you must [append](https://github.com/d3/d3-selection#selection_append) elements or [bind data](https://github.com/d3/d3-selection#joining-data) before a transition starts. A [*transition*.remove](#transition_remove) operator is provided for convenient removal of elements when the transition ends.\n\nTo compute intermediate state, transitions leverage a variety of [built-in interpolators](https://github.com/d3/d3-interpolate). [Colors](https://github.com/d3/d3-interpolate#interpolateRgb), [numbers](https://github.com/d3/d3-interpolate#interpolateNumber), and [transforms](https://github.com/d3/d3-interpolate#interpolateTransform) are automatically detected. [Strings](https://github.com/d3/d3-interpolate#interpolateString) with embedded numbers are also detected, as is common with many styles (such as padding or font sizes) and paths. To specify a custom interpolator, use [*transition*.attrTween](#transition_attrTween), [*transition*.styleTween](#transition_styleTween) or [*transition*.tween](#transition_tween).\n\n## Installing\n\nIf you use NPM, `npm install d3-transition`. Otherwise, download the [latest release](https://github.com/d3/d3-transition/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-transition.v2.min.js) or as part of [D3](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n<script src=\"https://d3js.org/d3-color.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-dispatch.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-ease.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-interpolate.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-selection.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-timer.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-transition.v2.min.js\"></script>\n<script>\n\nvar transition = d3.transition();\n\n</script>\n```\n\n[Try d3-transition in your browser.](https://tonicdev.com/npm/d3-transition)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Timing](#timing)\n* [Control Flow](#control-flow)\n* [The Life of a Transition](#the-life-of-a-transition)\n\n### Selecting Elements\n\nTransitions are derived from [selections](https://github.com/d3/d3-selection) via [*selection*.transition](#selection_transition). You can also create a transition on the document root element using [d3.transition](#transition).\n\n<a name=\"selection_transition\" href=\"#selection_transition\">#</a> <i>selection</i>.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js)\n\nReturns a new transition on the given *selection* with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name.\n\nIf the *name* is a [transition](#transition) instance, the returned transition has the same id and name as the specified transition. If a transition with the same id already exists on a selected element, the existing transition is returned for that element. Otherwise, the timing of the returned transition is inherited from the existing transition of the same id on the nearest ancestor of each selected element. Thus, this method can be used to synchronize a transition across multiple selections, or to re-select a transition for specific elements and modify its configuration. For example:\n\n```js\nvar t = d3.transition()\n .duration(750)\n .ease(d3.easeLinear);\n\nd3.selectAll(\".apple\").transition(t)\n .style(\"fill\", \"red\");\n\nd3.selectAll(\".orange\").transition(t)\n .style(\"fill\", \"orange\");\n```\n\nIf the specified *transition* is not found on a selected node or its ancestors (such as if the transition [already ended](#the-life-of-a-transition)), the default timing parameters are used; however, in a future release, this will likely be changed to throw an error. See [#59](https://github.com/d3/d3-transition/issues/59).\n\n<a name=\"selection_interrupt\" href=\"#selection_interrupt\">#</a> <i>selection</i>.<b>interrupt</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the selected elements, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used.\n\nInterrupting a transition on an element has no effect on any transitions on any descendant elements. For example, an [axis transition](https://github.com/d3/d3-axis) consists of multiple independent, synchronized transitions on the descendants of the axis [G element](https://www.w3.org/TR/SVG/struct.html#Groups) (the tick lines, the tick labels, the domain path, *etc.*). To interrupt the axis transition, you must therefore interrupt the descendants:\n\n```js\nselection.selectAll(\"*\").interrupt();\n```\n\nThe [universal selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors), `*`, selects all descendant elements. If you also want to interrupt the G element itself:\n\n```js\nselection.interrupt().selectAll(\"*\").interrupt();\n```\n\n<a name=\"interrupt\" href=\"#interrupt\">#</a> d3.<b>interrupt</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the specified *node*, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used. See also [*selection*.interrupt](#selection_interrupt).\n\n<a name=\"transition\" href=\"#transition\">#</a> d3.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29)\n\nReturns a new transition on the root element, `document.documentElement`, with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name. The *name* may also be a [transition](#transition) instance; see [*selection*.transition](#selection_transition). This method is equivalent to:\n\n```js\nd3.selection()\n .transition(name)\n```\n\nThis function can also be used to test for transitions (`instanceof d3.transition`) or to extend the transition prototype.\n\n<a name=\"transition_select\" href=\"#transition_select\">#</a> <i>transition</i>.<b>select</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/select.js)\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.select](https://github.com/d3/d3-selection#selection_select), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .select(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectAll\" href=\"#transition_selectAll\">#</a> <i>transition</i>.<b>selectAll</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js)\n\nFor each selected element, selects all descendant elements that match the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectAll](https://github.com/d3/d3-selection#selection_selectAll), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectAll(selector)\n .transition(transition)\n```\n\n<a name=\"transition_filter\" href=\"#transition_filter\">#</a> <i>transition</i>.<b>filter</b>(<i>filter</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js)\n\nFor each selected element, selects only the elements that match the specified *filter*, and returns a transition on the resulting selection. The *filter* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.filter](https://github.com/d3/d3-selection#selection_filter), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .filter(filter)\n .transition(transition)\n```\n\n<a name=\"transition_merge\" href=\"#transition_merge\">#</a> <i>transition</i>.<b>merge</b>(<i>other</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js)\n\nReturns a new transition merging this transition with the specified *other* transition, which must have the same id as this transition. The returned transition has the same number of groups, the same parents, the same name and the same id as this transition. Any missing (null) elements in this transition are filled with the corresponding element, if present (not null), from the *other* transition.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), merging with the selection likewise derived from the *other* transition via [*selection*.merge](https://github.com/d3/d3-selection#selection_merge), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .merge(other.selection())\n .transition(transition)\n```\n\n<a name=\"transition_transition\" href=\"#transition_transition\">#</a> <i>transition</i>.<b>transition</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js)\n\nReturns a new transition on the same selected elements as this transition, scheduled to start when this transition ends. The new transition inherits a reference time equal to this transition’s time plus its [delay](#transition_delay) and [duration](#transition_duration). The new transition also inherits this transition’s name, duration, and [easing](#transition_ease). This method can be used to schedule a sequence of chained transitions. For example:\n\n```js\nd3.selectAll(\".apple\")\n .transition() // First fade to green.\n .style(\"fill\", \"green\")\n .transition() // Then red.\n .style(\"fill\", \"red\")\n .transition() // Wait one second. Then brown, and remove.\n .delay(1000)\n .style(\"fill\", \"brown\")\n .remove();\n```\n\nThe delay for each transition is relative to its previous transition. Thus, in the above example, apples will stay red for one second before the last transition to brown starts.\n\n<a name=\"transition_selection\" href=\"#transition_selection\">#</a> <i>transition</i>.<b>selection</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js)\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n<a name=\"active\" href=\"#active\">#</a> d3.<b>active</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/active.js)\n\nReturns the active transition on the specified *node* with the specified *name*, if any. If no *name* is specified, null is used. Returns null if there is no such active transition on the specified node. This method is useful for creating chained transitions. For example, to initiate disco mode:\n\n```js\nd3.selectAll(\"circle\").transition()\n .delay(function(d, i) { return i * 50; })\n .on(\"start\", function repeat() {\n d3.active(this)\n .style(\"fill\", \"red\")\n .transition()\n .style(\"fill\", \"green\")\n .transition()\n .style(\"fill\", \"blue\")\n .transition()\n .on(\"start\", repeat);\n });\n```\n\nSee [chained transitions](https://bl.ocks.org/mbostock/70d5541b547cc222aa02) for an example.\n\n### Modifying Elements\n\nAfter selecting elements and creating a transition with [*selection*.transition](#selection_transition), use the transition’s transformation methods to affect document content.\n\n<a name=\"transition_attr\" href=\"#transition_attr\">#</a> <i>transition</i>.<b>attr</b>(<i>name</i>, <i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js)\n\nFor each selected element, assigns the [attribute tween](#transition_attrTween) for the attribute with the specified *name* to the specified target *value*. The starting value of the tween is the attribute’s value when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the attribute is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.attrTween](#transition_attrTween).\n\n<a name=\"transition_attrTween\" href=\"#transition_attrTween\">#</a> <i>transition</i>.<b>attrTween</b>(<i>name</i>[, <i>factory</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js)\n\nIf *factory* is specified and not null, assigns the attribute [tween](#transition_tween) for the attribute with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the attribute value. The interpolator must return a string. (To remove an attribute at the start of a transition, use [*transition*.attr](#transition_attr); to remove an attribute at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned attribute tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for attribute with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill attribute from red to blue:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as one that understands [SVG paths](https://bl.ocks.org/mbostock/3916621). A useful technique is *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used (say, with a [shape](https://github.com/d3/d3-shape)) to compute the new attribute value.\n\n<a name=\"transition_style\" href=\"#transition_style\">#</a> <i>transition</i>.<b>style</b>(<i>name</i>, <i>value</i>[, <i>priority</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/style.js)\n\nFor each selected element, assigns the [style tween](#transition_styleTween) for the style with the specified *name* to the specified target *value* with the specified *priority*. The starting value of the tween is the style’s inline value if present, and otherwise its computed value, when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the style is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.styleTween](#transition_styleTween).\n\n<a name=\"transition_styleTween\" href=\"#transition_styleTween\">#</a> <i>transition</i>.<b>styleTween</b>(<i>name</i>[, <i>factory</i>[, <i>priority</i>]])) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js)\n\nIf *factory* is specified and not null, assigns the style [tween](#transition_tween) for the style with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the style value with the specified *priority*. The interpolator must return a string. (To remove an style at the start of a transition, use [*transition*.style](#transition_style); to remove an style at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned style tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for style with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill style from red to blue:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.style](#transition_style):\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(this.style.fill, \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as with *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used to compute the new style value.\n\n<a name=\"transition_text\" href=\"#transition_text\">#</a> <i>transition</i>.<b>text</b>(<i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/text.js)\n\nFor each selected element, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified target *value* when the transition starts. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nTo interpolate text rather than to set it on start, use [*transition*.textTween](#transition_textTween) or append a replacement element and cross-fade opacity. Text is not interpolated by default because it is usually undesirable.\n\n<a name=\"transition_textTween\" href=\"#transition_textTween\">#</a> <i>transition</i>.<b>textTween</b>(<i>factory</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js), [Examples](https://observablehq.com/@d3/transition-texttween)\n \nIf *factory* is specified and not null, assigns the text [tween](#transition_tween) to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the text. The interpolator must return a string.\n\nFor example, to interpolate the text with integers from 0 to 100:\n\n```js\ntransition.textTween(function() {\n return d3.interpolateRound(0, 100);\n});\n```\n\nIf the specified *factory* is null, removes the previously-assigned text tween, if any. If *factory* is not specified, returns the current interpolator factory for text, or undefined if no such tween exists.\n\n<a name=\"transition_remove\" href=\"#transition_remove\">#</a> <i>transition</i>.<b>remove</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js)\n\nFor each selected element, [removes](https://github.com/d3/d3-selection#selection_remove) the element when the transition ends, as long as the element has no other active or pending transitions. If the element has other active or pending transitions, does nothing.\n\n<a name=\"transition_tween\" href=\"#transition_tween\">#</a> <i>transition</i>.<b>tween</b>(<i>name</i>[, <i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js)\n\nFor each selected element, assigns the tween with the specified *name* with the specified *value* function. The *value* must be specified as a function that returns a function. When the transition starts, the *value* function is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned function is then invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. If the specified *value* is null, removes the previously-assigned tween of the specified *name*, if any.\n\nFor example, to interpolate the fill attribute to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.tween(\"attr.fill\", function() {\n var i = d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n return function(t) {\n this.setAttribute(\"fill\", i(t));\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, or to perform side-effects, say to animate the [scroll offset](https://bl.ocks.org/mbostock/1649463).\n\n### Timing\n\nThe [easing](#transition_ease), [delay](#transition_delay) and [duration](#transition_duration) of a transition is configurable. For example, a per-element delay can be used to [stagger the reordering](https://observablehq.com/@d3/sortable-bar-chart) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n<a name=\"transition_delay\" href=\"#transition_delay\">#</a> <i>transition</i>.<b>delay</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js)\n\nFor each selected element, sets the transition delay to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition delay. If a delay is not specified, it defaults to zero.\n\nIf a *value* is not specified, returns the current value of the delay for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\nSetting the delay to a multiple of the index `i` is a convenient way to stagger transitions across a set of elements. For example:\n\n```js\ntransition.delay(function(d, i) { return i * 10; });\n```\n\nOf course, you can also compute the delay as a function of the data, or [sort the selection](https://github.com/d3/d3-selection#selection_sort) before computed an index-based delay.\n\n<a name=\"transition_duration\" href=\"#transition_duration\">#</a> <i>transition</i>.<b>duration</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js)\n\nFor each selected element, sets the transition duration to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition duration. If a duration is not specified, it defaults to 250ms.\n\nIf a *value* is not specified, returns the current value of the duration for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_ease\" href=\"#transition_ease\">#</a> <i>transition</i>.<b>ease</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js)\n\nSpecifies the transition [easing function](https://github.com/d3/d3-ease) for all selected elements. The *value* must be specified as a function. The easing function is invoked for each frame of the animation, being passed the normalized time *t* in the range [0, 1]; it must then return the eased time *tʹ* which is typically also in the range [0, 1]. A good easing function should return 0 if *t* = 0 and 1 if *t* = 1. If an easing function is not specified, it defaults to [d3.easeCubic](https://github.com/d3/d3-ease#easeCubic).\n\nIf a *value* is not specified, returns the current easing function for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_easeVarying\" href=\"#transition_easeVarying\">#</a> <i>transition</i>.<b>easeVarying</b>(<i>factory</i>) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/easeVarying.js \"Source\")\n\nSpecifies a factory for the transition [easing function](https://github.com/d3/d3-ease). The *factory* must be a function. It is invoked for each node of the selection, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. It must return an easing function.\n\n### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n<a name=\"transition_end\" href=\"#transition_end\">#</a> <i>transition</i>.<b>end</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/end.js)\n\nReturns a promise that resolves when every selected element finishes transitioning. If any element’s transition is cancelled or interrupted, the promise rejects.\n\n<a name=\"transition_on\" href=\"#transition_on\">#</a> <i>transition</i>.<b>on</b>(<i>typenames</i>[, <i>listener</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/on.js)\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is one of the following string event types:\n\n* `start` - when the transition starts.\n* `end` - when the transition ends.\n* `interrupt` - when the transition is interrupted.\n* `cancel` - when the transition is cancelled.\n\nSee [The Life of a Transition](#the-life-of-a-transition) for more. Note that these are *not* native DOM events as implemented by [*selection*.on](https://github.com/d3/d3-selection#selection_on) and [*selection*.dispatch](https://github.com/d3/d3-selection#selection_dispatch), but transition events!\n\nThe type may be optionally followed by a period (`.`) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as `start.foo` and `start.bar`. To specify multiple typenames, separate typenames with spaces, such as `interrupt end` or `start.foo start.bar`.\n\nWhen a specified transition event is dispatched on a selected node, the specified *listener* will be invoked for the transitioning element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. Listeners always see the latest datum for their element, but the index is a property of the selection and is fixed when the listener is assigned; to update the index, re-assign the listener.\n\nIf an event listener was previously registered for the same *typename* on a selected element, the old listener is removed before the new listener is added. To remove a listener, pass null as the *listener*. To remove all listeners for a given name, pass null as the *listener* and `.foo` as the *typename*, where `foo` is the name; to remove all listeners with no name, specify `.` as the *typename*.\n\nIf a *listener* is not specified, returns the currently-assigned listener for the specified event *typename* on the first (non-null) selected element, if any. If multiple typenames are specified, the first matching listener is returned.\n\n<a name=\"transition_each\" href=\"#transition_each\">#</a> <i>transition</i>.<b>each</b>(<i>function</i>) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/each.js)\n\nInvokes the specified *function* for each selected element, passing in the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. This method can be used to invoke arbitrary code for each selected element, and is useful for creating a context to access parent and child data simultaneously. Equivalent to [*selection*.each](https://github.com/d3/d3-selection#selection_each).\n\n<a name=\"transition_call\" href=\"#transition_call\">#</a> <i>transition</i>.<b>call</b>(<i>function</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/call.js)\n\nInvokes the specified *function* exactly once, passing in this transition along with any optional *arguments*. Returns this transition. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several attributes in a reusable function:\n\n```js\nfunction color(transition, fill, stroke) {\n transition\n .style(\"fill\", fill)\n .style(\"stroke\", stroke);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").transition().call(color, \"red\", \"blue\");\n```\n\nThis is equivalent to:\n\n```js\ncolor(d3.selectAll(\"div\").transition(), \"red\", \"blue\");\n```\n\nEquivalent to [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n<a name=\"transition_empty\" href=\"#transition_empty\">#</a> <i>transition</i>.<b>empty</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js)\n\nReturns true if this transition contains no (non-null) elements. Equivalent to [*selection*.empty](https://github.com/d3/d3-selection#selection_empty).\n\n<a name=\"transition_nodes\" href=\"#transition_nodes\">#</a> <i>transition</i>.<b>nodes</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js)\n\nReturns an array of all (non-null) elements in this transition. Equivalent to [*selection*.nodes](https://github.com/d3/d3-selection#selection_nodes).\n\n<a name=\"transition_node\" href=\"#transition_node\">#</a> <i>transition</i>.<b>node</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/node.js)\n\nReturns the first (non-null) element in this transition. If the transition is empty, returns null. Equivalent to [*selection*.node](https://github.com/d3/d3-selection#selection_node).\n\n<a name=\"transition_size\" href=\"#transition_size\">#</a> <i>transition</i>.<b>size</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/size.js)\n\nReturns the total number of elements in this transition. Equivalent to [*selection*.size](https://github.com/d3/d3-selection#selection_size).\n\n### The Life of a Transition\n\nImmediately after creating a transition, such as by [*selection*.transition](#selection_transition) or [*transition*.transition](#transition_transition), you may configure the transition using methods such as [*transition*.delay](#transition_delay), [*transition*.duration](#transition_duration), [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style). Methods that specify target values (such as *transition*.attr) are evaluated synchronously; however, methods that require the starting value for interpolation, such as [*transition*.attrTween](#transition_attrTween) and [*transition*.styleTween](#transition_styleTween), must be deferred until the transition starts.\n\nShortly after creation, either at the end of the current frame or during the next frame, the transition is scheduled. At this point, the delay and `start` event listeners may no longer be changed; attempting to do so throws an error with the message “too late: already scheduled” (or if the transition has ended, “transition not found”).\n\nWhen the transition subsequently starts, it interrupts the active transition of the same name on the same element, if any, dispatching an `interrupt` event to registered listeners. (Note that interrupts happen on start, not creation, and thus even a zero-delay transition will not immediately interrupt the active transition: the old transition is given a final frame. Use [*selection*.interrupt](#selection_interrupt) to interrupt immediately.) The starting transition also cancels any pending transitions of the same name on the same element that were created before the starting transition. The transition then dispatches a `start` event to registered listeners. This is the last moment at which the transition may be modified: the transition’s timing, tweens, and listeners may not be changed when it is running; attempting to do so throws an error with the message “too late: already running” (or if the transition has ended, “transition not found”). The transition initializes its tweens immediately after starting.\n\nDuring the frame the transition starts, but *after* all transitions starting this frame have been started, the transition invokes its tweens for the first time. Batching tween initialization, which typically involves reading from the DOM, improves performance by avoiding interleaved DOM reads and writes.\n\nFor each frame that a transition is active, it invokes its tweens with an [eased](#transition_ease) *t*-value ranging from 0 to 1. Within each frame, the transition invokes its tweens in the order they were registered.\n\nWhen a transition ends, it invokes its tweens a final time with a (non-eased) *t*-value of 1. It then dispatches an `end` event to registered listeners. This is the last moment at which the transition may be inspected: after ending, the transition is deleted from the element, and its configuration is destroyed. (A transition’s configuration is also destroyed on interrupt or cancel.) Attempting to inspect a transition after it is destroyed throws an error with the message “transition not found”.\n","licenseText":"Copyright (c) 2010-2015, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTERMS OF USE - EASING EQUATIONS\n\nOpen source under the BSD License.\n\nCopyright 2001 Robert Penner\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n- Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n- Neither the name of the author nor the names of contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n","_id":"d3-transition@2.0.0-rc.4","dist":{"shasum":"dca70399ade625836aa9fea85b5035a6b84891d1","integrity":"sha512-Azesx6Ri4PzcUqonUF1YkwLhV5/zqc56UxV928xvcsvXfRrOKRUPsYc2AKukjhhqfatsUD0EZMoNoWlvXqnZYw==","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-2.0.0-rc.4.tgz","fileCount":39,"unpackedSize":109585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfItnDCRA9TVsSAnZWagAAjYgP/2pJrMYdPA6QZu+b/46g\nx0NPzali+8uUc+brIv94JZL1aIS/tmb2ptTmyjsDY/ONX3Leyd4PoTX974et\nMrOWpw23haalNEQQsZTkz1eKU21cn1ITavawulyIkSBKGr6uNmo/fRN+0KT0\n1RTI8U5ghIWnom04/Of3BrPgU6GJ8WBYCRx6I7OSrGSeutFQ7TE/HfyvjKqs\n2aA2oXa9xcV6hcBcYiTmXjYgdp+HQSA8nTJiXFcnXVpOR3J5yRGZm01eCQ8q\nKdvILGtE/Cg2Bqd6OTLpe9x88RCN3cJLaLQLl1iL2wDp/YTL0Lu/Wo3wajUR\nPxjyFKU/tlhTI1PXyyqmS44aOuez/zG6XmNM/XTyyvAznDFWeTfZDls4idxS\njSvWOxrv/ieZvfXVglXk5cgcKR7llKWS1xrlsGlwRpTDbwBRQc7/hXDl0shP\nTzUvNjlifs+1a3g2ecVzmtcSProwm2CyaQTg9sYYHLou53iPirwHntSJ8IDb\n/yTsUaBkPy89ZJh0g13fEHIJ0CVrsvqE9IXufDRxh5UoJ4Bt6m08cjPbcFRj\nW9wwT5wnZYuNyML2f0f/pVCKNyI4Cdeo/fn9RwFugQxMKFIrDhhT1RVYCmJV\n8yjJR84vS4/YRC1K++1P44K2mFipNeXYKelrqW18uayxyoAZIx9DeYVPNjDi\nW3fm\r\n=Se46\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCv2VfF+PFlg9rs/g5qhZ4PaTgP0YTezSPERuF+1q9ROgIgHfJjvXxHoWX8wElOWchq5ceDMLPSQHXlrufE2Mv07uk="}]},"maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"fil@rezo.net","name":"recifs"}],"_npmUser":{"name":"recifs","email":"fil@rezo.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_2.0.0-rc.4_1596119491418_0.7585961513180057"},"_hasShrinkwrap":false},"2.0.0-rc.5":{"name":"d3-transition","version":"2.0.0-rc.5","publishConfig":{"tag":"next"},"description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":true,"dependencies":{"d3-color":">=2.0.0-rc.1","d3-dispatch":">=2.0.0-rc.1","d3-ease":">=2.0.0-rc.1","d3-interpolate":">=2.0.0-rc.1","d3-timer":">=2.0.0-rc.1"},"peerDependencies":{"d3-selection":"2.0.0-rc.3"},"devDependencies":{"d3-selection":">=2.0.0-rc.1","eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"readmeFilename":"README.md","readme":"# d3-transition\n\nA transition is a [selection](https://github.com/d3/d3-selection)-like interface for animating changes to the DOM. Instead of applying changes instantaneously, transitions smoothly interpolate the DOM from its current state to the desired target state over a given duration.\n\nTo apply a transition, select elements, call [*selection*.transition](#selection_transition), and then make the desired changes. For example:\n\n```js\nd3.select(\"body\")\n .transition()\n .style(\"background-color\", \"red\");\n```\n\nTransitions support most selection methods (such as [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style) in place of [*selection*.attr](https://github.com/d3/d3-selection#selection_attr) and [*selection*.style](https://github.com/d3/d3-selection#selection_style)), but not all methods are supported; for example, you must [append](https://github.com/d3/d3-selection#selection_append) elements or [bind data](https://github.com/d3/d3-selection#joining-data) before a transition starts. A [*transition*.remove](#transition_remove) operator is provided for convenient removal of elements when the transition ends.\n\nTo compute intermediate state, transitions leverage a variety of [built-in interpolators](https://github.com/d3/d3-interpolate). [Colors](https://github.com/d3/d3-interpolate#interpolateRgb), [numbers](https://github.com/d3/d3-interpolate#interpolateNumber), and [transforms](https://github.com/d3/d3-interpolate#interpolateTransform) are automatically detected. [Strings](https://github.com/d3/d3-interpolate#interpolateString) with embedded numbers are also detected, as is common with many styles (such as padding or font sizes) and paths. To specify a custom interpolator, use [*transition*.attrTween](#transition_attrTween), [*transition*.styleTween](#transition_styleTween) or [*transition*.tween](#transition_tween).\n\n## Installing\n\nIf you use NPM, `npm install d3-transition`. Otherwise, download the [latest release](https://github.com/d3/d3-transition/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-transition.v2.min.js) or as part of [D3](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n<script src=\"https://d3js.org/d3-color.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-dispatch.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-ease.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-interpolate.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-selection.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-timer.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-transition.v2.min.js\"></script>\n<script>\n\nvar transition = d3.transition();\n\n</script>\n```\n\n[Try d3-transition in your browser.](https://tonicdev.com/npm/d3-transition)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Timing](#timing)\n* [Control Flow](#control-flow)\n* [The Life of a Transition](#the-life-of-a-transition)\n\n### Selecting Elements\n\nTransitions are derived from [selections](https://github.com/d3/d3-selection) via [*selection*.transition](#selection_transition). You can also create a transition on the document root element using [d3.transition](#transition).\n\n<a name=\"selection_transition\" href=\"#selection_transition\">#</a> <i>selection</i>.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js)\n\nReturns a new transition on the given *selection* with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name.\n\nIf the *name* is a [transition](#transition) instance, the returned transition has the same id and name as the specified transition. If a transition with the same id already exists on a selected element, the existing transition is returned for that element. Otherwise, the timing of the returned transition is inherited from the existing transition of the same id on the nearest ancestor of each selected element. Thus, this method can be used to synchronize a transition across multiple selections, or to re-select a transition for specific elements and modify its configuration. For example:\n\n```js\nvar t = d3.transition()\n .duration(750)\n .ease(d3.easeLinear);\n\nd3.selectAll(\".apple\").transition(t)\n .style(\"fill\", \"red\");\n\nd3.selectAll(\".orange\").transition(t)\n .style(\"fill\", \"orange\");\n```\n\nIf the specified *transition* is not found on a selected node or its ancestors (such as if the transition [already ended](#the-life-of-a-transition)), the default timing parameters are used; however, in a future release, this will likely be changed to throw an error. See [#59](https://github.com/d3/d3-transition/issues/59).\n\n<a name=\"selection_interrupt\" href=\"#selection_interrupt\">#</a> <i>selection</i>.<b>interrupt</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the selected elements, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used.\n\nInterrupting a transition on an element has no effect on any transitions on any descendant elements. For example, an [axis transition](https://github.com/d3/d3-axis) consists of multiple independent, synchronized transitions on the descendants of the axis [G element](https://www.w3.org/TR/SVG/struct.html#Groups) (the tick lines, the tick labels, the domain path, *etc.*). To interrupt the axis transition, you must therefore interrupt the descendants:\n\n```js\nselection.selectAll(\"*\").interrupt();\n```\n\nThe [universal selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors), `*`, selects all descendant elements. If you also want to interrupt the G element itself:\n\n```js\nselection.interrupt().selectAll(\"*\").interrupt();\n```\n\n<a name=\"interrupt\" href=\"#interrupt\">#</a> d3.<b>interrupt</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the specified *node*, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used. See also [*selection*.interrupt](#selection_interrupt).\n\n<a name=\"transition\" href=\"#transition\">#</a> d3.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29)\n\nReturns a new transition on the root element, `document.documentElement`, with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name. The *name* may also be a [transition](#transition) instance; see [*selection*.transition](#selection_transition). This method is equivalent to:\n\n```js\nd3.selection()\n .transition(name)\n```\n\nThis function can also be used to test for transitions (`instanceof d3.transition`) or to extend the transition prototype.\n\n<a name=\"transition_select\" href=\"#transition_select\">#</a> <i>transition</i>.<b>select</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/select.js)\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.select](https://github.com/d3/d3-selection#selection_select), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .select(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectAll\" href=\"#transition_selectAll\">#</a> <i>transition</i>.<b>selectAll</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js)\n\nFor each selected element, selects all descendant elements that match the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectAll](https://github.com/d3/d3-selection#selection_selectAll), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectAll(selector)\n .transition(transition)\n```\n\n<a name=\"transition_filter\" href=\"#transition_filter\">#</a> <i>transition</i>.<b>filter</b>(<i>filter</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js)\n\nFor each selected element, selects only the elements that match the specified *filter*, and returns a transition on the resulting selection. The *filter* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.filter](https://github.com/d3/d3-selection#selection_filter), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .filter(filter)\n .transition(transition)\n```\n\n<a name=\"transition_merge\" href=\"#transition_merge\">#</a> <i>transition</i>.<b>merge</b>(<i>other</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js)\n\nReturns a new transition merging this transition with the specified *other* transition, which must have the same id as this transition. The returned transition has the same number of groups, the same parents, the same name and the same id as this transition. Any missing (null) elements in this transition are filled with the corresponding element, if present (not null), from the *other* transition.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), merging with the selection likewise derived from the *other* transition via [*selection*.merge](https://github.com/d3/d3-selection#selection_merge), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .merge(other.selection())\n .transition(transition)\n```\n\n<a name=\"transition_transition\" href=\"#transition_transition\">#</a> <i>transition</i>.<b>transition</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js)\n\nReturns a new transition on the same selected elements as this transition, scheduled to start when this transition ends. The new transition inherits a reference time equal to this transition’s time plus its [delay](#transition_delay) and [duration](#transition_duration). The new transition also inherits this transition’s name, duration, and [easing](#transition_ease). This method can be used to schedule a sequence of chained transitions. For example:\n\n```js\nd3.selectAll(\".apple\")\n .transition() // First fade to green.\n .style(\"fill\", \"green\")\n .transition() // Then red.\n .style(\"fill\", \"red\")\n .transition() // Wait one second. Then brown, and remove.\n .delay(1000)\n .style(\"fill\", \"brown\")\n .remove();\n```\n\nThe delay for each transition is relative to its previous transition. Thus, in the above example, apples will stay red for one second before the last transition to brown starts.\n\n<a name=\"transition_selection\" href=\"#transition_selection\">#</a> <i>transition</i>.<b>selection</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js)\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n<a name=\"active\" href=\"#active\">#</a> d3.<b>active</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/active.js)\n\nReturns the active transition on the specified *node* with the specified *name*, if any. If no *name* is specified, null is used. Returns null if there is no such active transition on the specified node. This method is useful for creating chained transitions. For example, to initiate disco mode:\n\n```js\nd3.selectAll(\"circle\").transition()\n .delay(function(d, i) { return i * 50; })\n .on(\"start\", function repeat() {\n d3.active(this)\n .style(\"fill\", \"red\")\n .transition()\n .style(\"fill\", \"green\")\n .transition()\n .style(\"fill\", \"blue\")\n .transition()\n .on(\"start\", repeat);\n });\n```\n\nSee [chained transitions](https://bl.ocks.org/mbostock/70d5541b547cc222aa02) for an example.\n\n### Modifying Elements\n\nAfter selecting elements and creating a transition with [*selection*.transition](#selection_transition), use the transition’s transformation methods to affect document content.\n\n<a name=\"transition_attr\" href=\"#transition_attr\">#</a> <i>transition</i>.<b>attr</b>(<i>name</i>, <i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js)\n\nFor each selected element, assigns the [attribute tween](#transition_attrTween) for the attribute with the specified *name* to the specified target *value*. The starting value of the tween is the attribute’s value when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the attribute is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.attrTween](#transition_attrTween).\n\n<a name=\"transition_attrTween\" href=\"#transition_attrTween\">#</a> <i>transition</i>.<b>attrTween</b>(<i>name</i>[, <i>factory</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js)\n\nIf *factory* is specified and not null, assigns the attribute [tween](#transition_tween) for the attribute with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the attribute value. The interpolator must return a string. (To remove an attribute at the start of a transition, use [*transition*.attr](#transition_attr); to remove an attribute at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned attribute tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for attribute with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill attribute from red to blue:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as one that understands [SVG paths](https://bl.ocks.org/mbostock/3916621). A useful technique is *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used (say, with a [shape](https://github.com/d3/d3-shape)) to compute the new attribute value.\n\n<a name=\"transition_style\" href=\"#transition_style\">#</a> <i>transition</i>.<b>style</b>(<i>name</i>, <i>value</i>[, <i>priority</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/style.js)\n\nFor each selected element, assigns the [style tween](#transition_styleTween) for the style with the specified *name* to the specified target *value* with the specified *priority*. The starting value of the tween is the style’s inline value if present, and otherwise its computed value, when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the style is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.styleTween](#transition_styleTween).\n\n<a name=\"transition_styleTween\" href=\"#transition_styleTween\">#</a> <i>transition</i>.<b>styleTween</b>(<i>name</i>[, <i>factory</i>[, <i>priority</i>]])) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js)\n\nIf *factory* is specified and not null, assigns the style [tween](#transition_tween) for the style with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the style value with the specified *priority*. The interpolator must return a string. (To remove an style at the start of a transition, use [*transition*.style](#transition_style); to remove an style at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned style tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for style with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill style from red to blue:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.style](#transition_style):\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(this.style.fill, \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as with *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used to compute the new style value.\n\n<a name=\"transition_text\" href=\"#transition_text\">#</a> <i>transition</i>.<b>text</b>(<i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/text.js)\n\nFor each selected element, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified target *value* when the transition starts. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nTo interpolate text rather than to set it on start, use [*transition*.textTween](#transition_textTween) or append a replacement element and cross-fade opacity. Text is not interpolated by default because it is usually undesirable.\n\n<a name=\"transition_textTween\" href=\"#transition_textTween\">#</a> <i>transition</i>.<b>textTween</b>(<i>factory</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js), [Examples](https://observablehq.com/@d3/transition-texttween)\n \nIf *factory* is specified and not null, assigns the text [tween](#transition_tween) to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the text. The interpolator must return a string.\n\nFor example, to interpolate the text with integers from 0 to 100:\n\n```js\ntransition.textTween(function() {\n return d3.interpolateRound(0, 100);\n});\n```\n\nIf the specified *factory* is null, removes the previously-assigned text tween, if any. If *factory* is not specified, returns the current interpolator factory for text, or undefined if no such tween exists.\n\n<a name=\"transition_remove\" href=\"#transition_remove\">#</a> <i>transition</i>.<b>remove</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js)\n\nFor each selected element, [removes](https://github.com/d3/d3-selection#selection_remove) the element when the transition ends, as long as the element has no other active or pending transitions. If the element has other active or pending transitions, does nothing.\n\n<a name=\"transition_tween\" href=\"#transition_tween\">#</a> <i>transition</i>.<b>tween</b>(<i>name</i>[, <i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js)\n\nFor each selected element, assigns the tween with the specified *name* with the specified *value* function. The *value* must be specified as a function that returns a function. When the transition starts, the *value* function is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned function is then invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. If the specified *value* is null, removes the previously-assigned tween of the specified *name*, if any.\n\nFor example, to interpolate the fill attribute to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.tween(\"attr.fill\", function() {\n var i = d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n return function(t) {\n this.setAttribute(\"fill\", i(t));\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, or to perform side-effects, say to animate the [scroll offset](https://bl.ocks.org/mbostock/1649463).\n\n### Timing\n\nThe [easing](#transition_ease), [delay](#transition_delay) and [duration](#transition_duration) of a transition is configurable. For example, a per-element delay can be used to [stagger the reordering](https://observablehq.com/@d3/sortable-bar-chart) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n<a name=\"transition_delay\" href=\"#transition_delay\">#</a> <i>transition</i>.<b>delay</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js)\n\nFor each selected element, sets the transition delay to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition delay. If a delay is not specified, it defaults to zero.\n\nIf a *value* is not specified, returns the current value of the delay for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\nSetting the delay to a multiple of the index `i` is a convenient way to stagger transitions across a set of elements. For example:\n\n```js\ntransition.delay(function(d, i) { return i * 10; });\n```\n\nOf course, you can also compute the delay as a function of the data, or [sort the selection](https://github.com/d3/d3-selection#selection_sort) before computed an index-based delay.\n\n<a name=\"transition_duration\" href=\"#transition_duration\">#</a> <i>transition</i>.<b>duration</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js)\n\nFor each selected element, sets the transition duration to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition duration. If a duration is not specified, it defaults to 250ms.\n\nIf a *value* is not specified, returns the current value of the duration for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_ease\" href=\"#transition_ease\">#</a> <i>transition</i>.<b>ease</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js)\n\nSpecifies the transition [easing function](https://github.com/d3/d3-ease) for all selected elements. The *value* must be specified as a function. The easing function is invoked for each frame of the animation, being passed the normalized time *t* in the range [0, 1]; it must then return the eased time *tʹ* which is typically also in the range [0, 1]. A good easing function should return 0 if *t* = 0 and 1 if *t* = 1. If an easing function is not specified, it defaults to [d3.easeCubic](https://github.com/d3/d3-ease#easeCubic).\n\nIf a *value* is not specified, returns the current easing function for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_easeVarying\" href=\"#transition_easeVarying\">#</a> <i>transition</i>.<b>easeVarying</b>(<i>factory</i>) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/easeVarying.js \"Source\")\n\nSpecifies a factory for the transition [easing function](https://github.com/d3/d3-ease). The *factory* must be a function. It is invoked for each node of the selection, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. It must return an easing function.\n\n### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n<a name=\"transition_end\" href=\"#transition_end\">#</a> <i>transition</i>.<b>end</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/end.js)\n\nReturns a promise that resolves when every selected element finishes transitioning. If any element’s transition is cancelled or interrupted, the promise rejects.\n\n<a name=\"transition_on\" href=\"#transition_on\">#</a> <i>transition</i>.<b>on</b>(<i>typenames</i>[, <i>listener</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/on.js)\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is one of the following string event types:\n\n* `start` - when the transition starts.\n* `end` - when the transition ends.\n* `interrupt` - when the transition is interrupted.\n* `cancel` - when the transition is cancelled.\n\nSee [The Life of a Transition](#the-life-of-a-transition) for more. Note that these are *not* native DOM events as implemented by [*selection*.on](https://github.com/d3/d3-selection#selection_on) and [*selection*.dispatch](https://github.com/d3/d3-selection#selection_dispatch), but transition events!\n\nThe type may be optionally followed by a period (`.`) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as `start.foo` and `start.bar`. To specify multiple typenames, separate typenames with spaces, such as `interrupt end` or `start.foo start.bar`.\n\nWhen a specified transition event is dispatched on a selected node, the specified *listener* will be invoked for the transitioning element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. Listeners always see the latest datum for their element, but the index is a property of the selection and is fixed when the listener is assigned; to update the index, re-assign the listener.\n\nIf an event listener was previously registered for the same *typename* on a selected element, the old listener is removed before the new listener is added. To remove a listener, pass null as the *listener*. To remove all listeners for a given name, pass null as the *listener* and `.foo` as the *typename*, where `foo` is the name; to remove all listeners with no name, specify `.` as the *typename*.\n\nIf a *listener* is not specified, returns the currently-assigned listener for the specified event *typename* on the first (non-null) selected element, if any. If multiple typenames are specified, the first matching listener is returned.\n\n<a name=\"transition_each\" href=\"#transition_each\">#</a> <i>transition</i>.<b>each</b>(<i>function</i>) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/each.js)\n\nInvokes the specified *function* for each selected element, passing in the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. This method can be used to invoke arbitrary code for each selected element, and is useful for creating a context to access parent and child data simultaneously. Equivalent to [*selection*.each](https://github.com/d3/d3-selection#selection_each).\n\n<a name=\"transition_call\" href=\"#transition_call\">#</a> <i>transition</i>.<b>call</b>(<i>function</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/call.js)\n\nInvokes the specified *function* exactly once, passing in this transition along with any optional *arguments*. Returns this transition. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several attributes in a reusable function:\n\n```js\nfunction color(transition, fill, stroke) {\n transition\n .style(\"fill\", fill)\n .style(\"stroke\", stroke);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").transition().call(color, \"red\", \"blue\");\n```\n\nThis is equivalent to:\n\n```js\ncolor(d3.selectAll(\"div\").transition(), \"red\", \"blue\");\n```\n\nEquivalent to [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n<a name=\"transition_empty\" href=\"#transition_empty\">#</a> <i>transition</i>.<b>empty</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js)\n\nReturns true if this transition contains no (non-null) elements. Equivalent to [*selection*.empty](https://github.com/d3/d3-selection#selection_empty).\n\n<a name=\"transition_nodes\" href=\"#transition_nodes\">#</a> <i>transition</i>.<b>nodes</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js)\n\nReturns an array of all (non-null) elements in this transition. Equivalent to [*selection*.nodes](https://github.com/d3/d3-selection#selection_nodes).\n\n<a name=\"transition_node\" href=\"#transition_node\">#</a> <i>transition</i>.<b>node</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/node.js)\n\nReturns the first (non-null) element in this transition. If the transition is empty, returns null. Equivalent to [*selection*.node](https://github.com/d3/d3-selection#selection_node).\n\n<a name=\"transition_size\" href=\"#transition_size\">#</a> <i>transition</i>.<b>size</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/size.js)\n\nReturns the total number of elements in this transition. Equivalent to [*selection*.size](https://github.com/d3/d3-selection#selection_size).\n\n### The Life of a Transition\n\nImmediately after creating a transition, such as by [*selection*.transition](#selection_transition) or [*transition*.transition](#transition_transition), you may configure the transition using methods such as [*transition*.delay](#transition_delay), [*transition*.duration](#transition_duration), [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style). Methods that specify target values (such as *transition*.attr) are evaluated synchronously; however, methods that require the starting value for interpolation, such as [*transition*.attrTween](#transition_attrTween) and [*transition*.styleTween](#transition_styleTween), must be deferred until the transition starts.\n\nShortly after creation, either at the end of the current frame or during the next frame, the transition is scheduled. At this point, the delay and `start` event listeners may no longer be changed; attempting to do so throws an error with the message “too late: already scheduled” (or if the transition has ended, “transition not found”).\n\nWhen the transition subsequently starts, it interrupts the active transition of the same name on the same element, if any, dispatching an `interrupt` event to registered listeners. (Note that interrupts happen on start, not creation, and thus even a zero-delay transition will not immediately interrupt the active transition: the old transition is given a final frame. Use [*selection*.interrupt](#selection_interrupt) to interrupt immediately.) The starting transition also cancels any pending transitions of the same name on the same element that were created before the starting transition. The transition then dispatches a `start` event to registered listeners. This is the last moment at which the transition may be modified: the transition’s timing, tweens, and listeners may not be changed when it is running; attempting to do so throws an error with the message “too late: already running” (or if the transition has ended, “transition not found”). The transition initializes its tweens immediately after starting.\n\nDuring the frame the transition starts, but *after* all transitions starting this frame have been started, the transition invokes its tweens for the first time. Batching tween initialization, which typically involves reading from the DOM, improves performance by avoiding interleaved DOM reads and writes.\n\nFor each frame that a transition is active, it invokes its tweens with an [eased](#transition_ease) *t*-value ranging from 0 to 1. Within each frame, the transition invokes its tweens in the order they were registered.\n\nWhen a transition ends, it invokes its tweens a final time with a (non-eased) *t*-value of 1. It then dispatches an `end` event to registered listeners. This is the last moment at which the transition may be inspected: after ending, the transition is deleted from the element, and its configuration is destroyed. (A transition’s configuration is also destroyed on interrupt or cancel.) Attempting to inspect a transition after it is destroyed throws an error with the message “transition not found”.\n","licenseText":"Copyright (c) 2010-2015, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTERMS OF USE - EASING EQUATIONS\n\nOpen source under the BSD License.\n\nCopyright 2001 Robert Penner\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n- Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n- Neither the name of the author nor the names of contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n","_id":"d3-transition@2.0.0-rc.5","dist":{"shasum":"f9916eb70920a028e49568e985965c69255ed26c","integrity":"sha512-3h7wruc+4ntSluszGlBebh5nrWypGLcU8Q3Mms6xpERQHFw4sFe3DcQK8NZjypoQ1/rgJD7iUoN/erAG57qtPg==","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-2.0.0-rc.5.tgz","fileCount":39,"unpackedSize":109704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI7oBCRA9TVsSAnZWagAAEMQP/0X/gq+YrU0ix2Dky3wO\nV57JE0ygCYGMfmNm6xEVOIh59zkWViQ2cZWagOeCPCMrW+ziTZjSxl+4lRPn\nJAFmJMa4MtBlvyTo009dUesKwZZQ+LdIiJqnfnP+5gQfAtzqTR+nDVjsde65\n+LclQUC5QFCPWg41elhj1EQbQsUGmkdfVyYIawjBjZ2FrTeMbpuncgihTSmu\nsc9+JroIyuEQAJAIQfXml4Qc1Cevmbp9F7M1AryS+wlqLdPL/HLRxEF91Sdd\nB0UzZf/tK4Vzh2nz8ab9gGyi0h7IvO/zJPJDbgaCmd0iQjbCv8auJs5KxuR3\nS9lO6jfoaYxwNrlzbPNxjztY9s7xyGZrFRMIZtJLo5D+095hiVHvgdTLr+Pa\npPnsdcAdMaj2yP4H4ErLGnqNVnPeYLv84SI6+MdXFZdjhVcu0KKIFvcS39MH\nVLCengM4gnc6NxUQ0VZXiJ3ebCD56y/MVRrdfwvMdryCqW3ZIni1Y1/sfXcr\nGJ19e7o2iu52Hv7IhRZFwqpv7JicCHwd+qcawihzxiGicQY8ELMd0hks82nz\nLgM9GRECisvRoV7CRVM9TnTdhQ45vZlCN/2cIM/soJShnQL85FYjh+9YGpSq\nECSRmiSJDdlRvIpGg0eCX8oZWqg0g+T28fXCiAhgYl851r+oHq7XXJkmbWST\nvnHF\r\n=whi0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCt53H/RoQl1ZQaWBuZ1wEUJIemwIKjybvzwmKB+bXUkgIhAPF5arSTCF+d9AssGQyQnqq8Zu/HuDvMXY6Wl1CJVUJ0"}]},"maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"fil@rezo.net","name":"recifs"}],"_npmUser":{"name":"recifs","email":"fil@rezo.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_2.0.0-rc.5_1596176896503_0.14203996356272408"},"_hasShrinkwrap":false},"2.0.0-rc.6":{"name":"d3-transition","version":"2.0.0-rc.6","publishConfig":{"tag":"next"},"description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":true,"dependencies":{"d3-color":">=2.0.0-rc.1","d3-dispatch":">=2.0.0-rc.1","d3-ease":">=2.0.0-rc.1","d3-interpolate":">=2.0.0-rc.1","d3-timer":">=2.0.0-rc.1"},"peerDependencies":{"d3-selection":"2.0.0-rc.4"},"devDependencies":{"d3-selection":">=2.0.0-rc.1","eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"readmeFilename":"README.md","readme":"# d3-transition\n\nA transition is a [selection](https://github.com/d3/d3-selection)-like interface for animating changes to the DOM. Instead of applying changes instantaneously, transitions smoothly interpolate the DOM from its current state to the desired target state over a given duration.\n\nTo apply a transition, select elements, call [*selection*.transition](#selection_transition), and then make the desired changes. For example:\n\n```js\nd3.select(\"body\")\n .transition()\n .style(\"background-color\", \"red\");\n```\n\nTransitions support most selection methods (such as [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style) in place of [*selection*.attr](https://github.com/d3/d3-selection#selection_attr) and [*selection*.style](https://github.com/d3/d3-selection#selection_style)), but not all methods are supported; for example, you must [append](https://github.com/d3/d3-selection#selection_append) elements or [bind data](https://github.com/d3/d3-selection#joining-data) before a transition starts. A [*transition*.remove](#transition_remove) operator is provided for convenient removal of elements when the transition ends.\n\nTo compute intermediate state, transitions leverage a variety of [built-in interpolators](https://github.com/d3/d3-interpolate). [Colors](https://github.com/d3/d3-interpolate#interpolateRgb), [numbers](https://github.com/d3/d3-interpolate#interpolateNumber), and [transforms](https://github.com/d3/d3-interpolate#interpolateTransform) are automatically detected. [Strings](https://github.com/d3/d3-interpolate#interpolateString) with embedded numbers are also detected, as is common with many styles (such as padding or font sizes) and paths. To specify a custom interpolator, use [*transition*.attrTween](#transition_attrTween), [*transition*.styleTween](#transition_styleTween) or [*transition*.tween](#transition_tween).\n\n## Installing\n\nIf you use NPM, `npm install d3-transition`. Otherwise, download the [latest release](https://github.com/d3/d3-transition/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-transition.v2.min.js) or as part of [D3](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n<script src=\"https://d3js.org/d3-color.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-dispatch.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-ease.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-interpolate.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-selection.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-timer.v2.min.js\"></script>\n<script src=\"https://d3js.org/d3-transition.v2.min.js\"></script>\n<script>\n\nvar transition = d3.transition();\n\n</script>\n```\n\n[Try d3-transition in your browser.](https://tonicdev.com/npm/d3-transition)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Timing](#timing)\n* [Control Flow](#control-flow)\n* [The Life of a Transition](#the-life-of-a-transition)\n\n### Selecting Elements\n\nTransitions are derived from [selections](https://github.com/d3/d3-selection) via [*selection*.transition](#selection_transition). You can also create a transition on the document root element using [d3.transition](#transition).\n\n<a name=\"selection_transition\" href=\"#selection_transition\">#</a> <i>selection</i>.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js)\n\nReturns a new transition on the given *selection* with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name.\n\nIf the *name* is a [transition](#transition) instance, the returned transition has the same id and name as the specified transition. If a transition with the same id already exists on a selected element, the existing transition is returned for that element. Otherwise, the timing of the returned transition is inherited from the existing transition of the same id on the nearest ancestor of each selected element. Thus, this method can be used to synchronize a transition across multiple selections, or to re-select a transition for specific elements and modify its configuration. For example:\n\n```js\nvar t = d3.transition()\n .duration(750)\n .ease(d3.easeLinear);\n\nd3.selectAll(\".apple\").transition(t)\n .style(\"fill\", \"red\");\n\nd3.selectAll(\".orange\").transition(t)\n .style(\"fill\", \"orange\");\n```\n\nIf the specified *transition* is not found on a selected node or its ancestors (such as if the transition [already ended](#the-life-of-a-transition)), the default timing parameters are used; however, in a future release, this will likely be changed to throw an error. See [#59](https://github.com/d3/d3-transition/issues/59).\n\n<a name=\"selection_interrupt\" href=\"#selection_interrupt\">#</a> <i>selection</i>.<b>interrupt</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the selected elements, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used.\n\nInterrupting a transition on an element has no effect on any transitions on any descendant elements. For example, an [axis transition](https://github.com/d3/d3-axis) consists of multiple independent, synchronized transitions on the descendants of the axis [G element](https://www.w3.org/TR/SVG/struct.html#Groups) (the tick lines, the tick labels, the domain path, *etc.*). To interrupt the axis transition, you must therefore interrupt the descendants:\n\n```js\nselection.selectAll(\"*\").interrupt();\n```\n\nThe [universal selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors), `*`, selects all descendant elements. If you also want to interrupt the G element itself:\n\n```js\nselection.interrupt().selectAll(\"*\").interrupt();\n```\n\n<a name=\"interrupt\" href=\"#interrupt\">#</a> d3.<b>interrupt</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the specified *node*, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used. See also [*selection*.interrupt](#selection_interrupt).\n\n<a name=\"transition\" href=\"#transition\">#</a> d3.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29)\n\nReturns a new transition on the root element, `document.documentElement`, with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name. The *name* may also be a [transition](#transition) instance; see [*selection*.transition](#selection_transition). This method is equivalent to:\n\n```js\nd3.selection()\n .transition(name)\n```\n\nThis function can also be used to test for transitions (`instanceof d3.transition`) or to extend the transition prototype.\n\n<a name=\"transition_select\" href=\"#transition_select\">#</a> <i>transition</i>.<b>select</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/select.js)\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.select](https://github.com/d3/d3-selection#selection_select), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .select(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectAll\" href=\"#transition_selectAll\">#</a> <i>transition</i>.<b>selectAll</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js)\n\nFor each selected element, selects all descendant elements that match the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectAll](https://github.com/d3/d3-selection#selection_selectAll), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectAll(selector)\n .transition(transition)\n```\n\n<a name=\"transition_filter\" href=\"#transition_filter\">#</a> <i>transition</i>.<b>filter</b>(<i>filter</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js)\n\nFor each selected element, selects only the elements that match the specified *filter*, and returns a transition on the resulting selection. The *filter* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.filter](https://github.com/d3/d3-selection#selection_filter), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .filter(filter)\n .transition(transition)\n```\n\n<a name=\"transition_merge\" href=\"#transition_merge\">#</a> <i>transition</i>.<b>merge</b>(<i>other</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js)\n\nReturns a new transition merging this transition with the specified *other* transition, which must have the same id as this transition. The returned transition has the same number of groups, the same parents, the same name and the same id as this transition. Any missing (null) elements in this transition are filled with the corresponding element, if present (not null), from the *other* transition.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), merging with the selection likewise derived from the *other* transition via [*selection*.merge](https://github.com/d3/d3-selection#selection_merge), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .merge(other.selection())\n .transition(transition)\n```\n\n<a name=\"transition_transition\" href=\"#transition_transition\">#</a> <i>transition</i>.<b>transition</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js)\n\nReturns a new transition on the same selected elements as this transition, scheduled to start when this transition ends. The new transition inherits a reference time equal to this transition’s time plus its [delay](#transition_delay) and [duration](#transition_duration). The new transition also inherits this transition’s name, duration, and [easing](#transition_ease). This method can be used to schedule a sequence of chained transitions. For example:\n\n```js\nd3.selectAll(\".apple\")\n .transition() // First fade to green.\n .style(\"fill\", \"green\")\n .transition() // Then red.\n .style(\"fill\", \"red\")\n .transition() // Wait one second. Then brown, and remove.\n .delay(1000)\n .style(\"fill\", \"brown\")\n .remove();\n```\n\nThe delay for each transition is relative to its previous transition. Thus, in the above example, apples will stay red for one second before the last transition to brown starts.\n\n<a name=\"transition_selection\" href=\"#transition_selection\">#</a> <i>transition</i>.<b>selection</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js)\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n<a name=\"active\" href=\"#active\">#</a> d3.<b>active</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/active.js)\n\nReturns the active transition on the specified *node* with the specified *name*, if any. If no *name* is specified, null is used. Returns null if there is no such active transition on the specified node. This method is useful for creating chained transitions. For example, to initiate disco mode:\n\n```js\nd3.selectAll(\"circle\").transition()\n .delay(function(d, i) { return i * 50; })\n .on(\"start\", function repeat() {\n d3.active(this)\n .style(\"fill\", \"red\")\n .transition()\n .style(\"fill\", \"green\")\n .transition()\n .style(\"fill\", \"blue\")\n .transition()\n .on(\"start\", repeat);\n });\n```\n\nSee [chained transitions](https://bl.ocks.org/mbostock/70d5541b547cc222aa02) for an example.\n\n### Modifying Elements\n\nAfter selecting elements and creating a transition with [*selection*.transition](#selection_transition), use the transition’s transformation methods to affect document content.\n\n<a name=\"transition_attr\" href=\"#transition_attr\">#</a> <i>transition</i>.<b>attr</b>(<i>name</i>, <i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js)\n\nFor each selected element, assigns the [attribute tween](#transition_attrTween) for the attribute with the specified *name* to the specified target *value*. The starting value of the tween is the attribute’s value when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the attribute is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.attrTween](#transition_attrTween).\n\n<a name=\"transition_attrTween\" href=\"#transition_attrTween\">#</a> <i>transition</i>.<b>attrTween</b>(<i>name</i>[, <i>factory</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js)\n\nIf *factory* is specified and not null, assigns the attribute [tween](#transition_tween) for the attribute with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the attribute value. The interpolator must return a string. (To remove an attribute at the start of a transition, use [*transition*.attr](#transition_attr); to remove an attribute at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned attribute tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for attribute with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill attribute from red to blue:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as one that understands [SVG paths](https://bl.ocks.org/mbostock/3916621). A useful technique is *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used (say, with a [shape](https://github.com/d3/d3-shape)) to compute the new attribute value.\n\n<a name=\"transition_style\" href=\"#transition_style\">#</a> <i>transition</i>.<b>style</b>(<i>name</i>, <i>value</i>[, <i>priority</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/style.js)\n\nFor each selected element, assigns the [style tween](#transition_styleTween) for the style with the specified *name* to the specified target *value* with the specified *priority*. The starting value of the tween is the style’s inline value if present, and otherwise its computed value, when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the style is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.styleTween](#transition_styleTween).\n\n<a name=\"transition_styleTween\" href=\"#transition_styleTween\">#</a> <i>transition</i>.<b>styleTween</b>(<i>name</i>[, <i>factory</i>[, <i>priority</i>]])) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js)\n\nIf *factory* is specified and not null, assigns the style [tween](#transition_tween) for the style with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the style value with the specified *priority*. The interpolator must return a string. (To remove an style at the start of a transition, use [*transition*.style](#transition_style); to remove an style at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned style tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for style with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill style from red to blue:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.style](#transition_style):\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(this.style.fill, \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as with *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used to compute the new style value.\n\n<a name=\"transition_text\" href=\"#transition_text\">#</a> <i>transition</i>.<b>text</b>(<i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/text.js)\n\nFor each selected element, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified target *value* when the transition starts. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nTo interpolate text rather than to set it on start, use [*transition*.textTween](#transition_textTween) or append a replacement element and cross-fade opacity. Text is not interpolated by default because it is usually undesirable.\n\n<a name=\"transition_textTween\" href=\"#transition_textTween\">#</a> <i>transition</i>.<b>textTween</b>(<i>factory</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js), [Examples](https://observablehq.com/@d3/transition-texttween)\n \nIf *factory* is specified and not null, assigns the text [tween](#transition_tween) to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the text. The interpolator must return a string.\n\nFor example, to interpolate the text with integers from 0 to 100:\n\n```js\ntransition.textTween(function() {\n return d3.interpolateRound(0, 100);\n});\n```\n\nIf the specified *factory* is null, removes the previously-assigned text tween, if any. If *factory* is not specified, returns the current interpolator factory for text, or undefined if no such tween exists.\n\n<a name=\"transition_remove\" href=\"#transition_remove\">#</a> <i>transition</i>.<b>remove</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js)\n\nFor each selected element, [removes](https://github.com/d3/d3-selection#selection_remove) the element when the transition ends, as long as the element has no other active or pending transitions. If the element has other active or pending transitions, does nothing.\n\n<a name=\"transition_tween\" href=\"#transition_tween\">#</a> <i>transition</i>.<b>tween</b>(<i>name</i>[, <i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js)\n\nFor each selected element, assigns the tween with the specified *name* with the specified *value* function. The *value* must be specified as a function that returns a function. When the transition starts, the *value* function is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned function is then invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. If the specified *value* is null, removes the previously-assigned tween of the specified *name*, if any.\n\nFor example, to interpolate the fill attribute to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.tween(\"attr.fill\", function() {\n var i = d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n return function(t) {\n this.setAttribute(\"fill\", i(t));\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, or to perform side-effects, say to animate the [scroll offset](https://bl.ocks.org/mbostock/1649463).\n\n### Timing\n\nThe [easing](#transition_ease), [delay](#transition_delay) and [duration](#transition_duration) of a transition is configurable. For example, a per-element delay can be used to [stagger the reordering](https://observablehq.com/@d3/sortable-bar-chart) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n<a name=\"transition_delay\" href=\"#transition_delay\">#</a> <i>transition</i>.<b>delay</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js)\n\nFor each selected element, sets the transition delay to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition delay. If a delay is not specified, it defaults to zero.\n\nIf a *value* is not specified, returns the current value of the delay for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\nSetting the delay to a multiple of the index `i` is a convenient way to stagger transitions across a set of elements. For example:\n\n```js\ntransition.delay(function(d, i) { return i * 10; });\n```\n\nOf course, you can also compute the delay as a function of the data, or [sort the selection](https://github.com/d3/d3-selection#selection_sort) before computed an index-based delay.\n\n<a name=\"transition_duration\" href=\"#transition_duration\">#</a> <i>transition</i>.<b>duration</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js)\n\nFor each selected element, sets the transition duration to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition duration. If a duration is not specified, it defaults to 250ms.\n\nIf a *value* is not specified, returns the current value of the duration for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_ease\" href=\"#transition_ease\">#</a> <i>transition</i>.<b>ease</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js)\n\nSpecifies the transition [easing function](https://github.com/d3/d3-ease) for all selected elements. The *value* must be specified as a function. The easing function is invoked for each frame of the animation, being passed the normalized time *t* in the range [0, 1]; it must then return the eased time *tʹ* which is typically also in the range [0, 1]. A good easing function should return 0 if *t* = 0 and 1 if *t* = 1. If an easing function is not specified, it defaults to [d3.easeCubic](https://github.com/d3/d3-ease#easeCubic).\n\nIf a *value* is not specified, returns the current easing function for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_easeVarying\" href=\"#transition_easeVarying\">#</a> <i>transition</i>.<b>easeVarying</b>(<i>factory</i>) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/easeVarying.js \"Source\")\n\nSpecifies a factory for the transition [easing function](https://github.com/d3/d3-ease). The *factory* must be a function. It is invoked for each node of the selection, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. It must return an easing function.\n\n### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n<a name=\"transition_end\" href=\"#transition_end\">#</a> <i>transition</i>.<b>end</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/end.js)\n\nReturns a promise that resolves when every selected element finishes transitioning. If any element’s transition is cancelled or interrupted, the promise rejects.\n\n<a name=\"transition_on\" href=\"#transition_on\">#</a> <i>transition</i>.<b>on</b>(<i>typenames</i>[, <i>listener</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/on.js)\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is one of the following string event types:\n\n* `start` - when the transition starts.\n* `end` - when the transition ends.\n* `interrupt` - when the transition is interrupted.\n* `cancel` - when the transition is cancelled.\n\nSee [The Life of a Transition](#the-life-of-a-transition) for more. Note that these are *not* native DOM events as implemented by [*selection*.on](https://github.com/d3/d3-selection#selection_on) and [*selection*.dispatch](https://github.com/d3/d3-selection#selection_dispatch), but transition events!\n\nThe type may be optionally followed by a period (`.`) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as `start.foo` and `start.bar`. To specify multiple typenames, separate typenames with spaces, such as `interrupt end` or `start.foo start.bar`.\n\nWhen a specified transition event is dispatched on a selected node, the specified *listener* will be invoked for the transitioning element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. Listeners always see the latest datum for their element, but the index is a property of the selection and is fixed when the listener is assigned; to update the index, re-assign the listener.\n\nIf an event listener was previously registered for the same *typename* on a selected element, the old listener is removed before the new listener is added. To remove a listener, pass null as the *listener*. To remove all listeners for a given name, pass null as the *listener* and `.foo` as the *typename*, where `foo` is the name; to remove all listeners with no name, specify `.` as the *typename*.\n\nIf a *listener* is not specified, returns the currently-assigned listener for the specified event *typename* on the first (non-null) selected element, if any. If multiple typenames are specified, the first matching listener is returned.\n\n<a name=\"transition_each\" href=\"#transition_each\">#</a> <i>transition</i>.<b>each</b>(<i>function</i>) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/each.js)\n\nInvokes the specified *function* for each selected element, passing in the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. This method can be used to invoke arbitrary code for each selected element, and is useful for creating a context to access parent and child data simultaneously. Equivalent to [*selection*.each](https://github.com/d3/d3-selection#selection_each).\n\n<a name=\"transition_call\" href=\"#transition_call\">#</a> <i>transition</i>.<b>call</b>(<i>function</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/call.js)\n\nInvokes the specified *function* exactly once, passing in this transition along with any optional *arguments*. Returns this transition. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several attributes in a reusable function:\n\n```js\nfunction color(transition, fill, stroke) {\n transition\n .style(\"fill\", fill)\n .style(\"stroke\", stroke);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").transition().call(color, \"red\", \"blue\");\n```\n\nThis is equivalent to:\n\n```js\ncolor(d3.selectAll(\"div\").transition(), \"red\", \"blue\");\n```\n\nEquivalent to [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n<a name=\"transition_empty\" href=\"#transition_empty\">#</a> <i>transition</i>.<b>empty</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js)\n\nReturns true if this transition contains no (non-null) elements. Equivalent to [*selection*.empty](https://github.com/d3/d3-selection#selection_empty).\n\n<a name=\"transition_nodes\" href=\"#transition_nodes\">#</a> <i>transition</i>.<b>nodes</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js)\n\nReturns an array of all (non-null) elements in this transition. Equivalent to [*selection*.nodes](https://github.com/d3/d3-selection#selection_nodes).\n\n<a name=\"transition_node\" href=\"#transition_node\">#</a> <i>transition</i>.<b>node</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/node.js)\n\nReturns the first (non-null) element in this transition. If the transition is empty, returns null. Equivalent to [*selection*.node](https://github.com/d3/d3-selection#selection_node).\n\n<a name=\"transition_size\" href=\"#transition_size\">#</a> <i>transition</i>.<b>size</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/size.js)\n\nReturns the total number of elements in this transition. Equivalent to [*selection*.size](https://github.com/d3/d3-selection#selection_size).\n\n### The Life of a Transition\n\nImmediately after creating a transition, such as by [*selection*.transition](#selection_transition) or [*transition*.transition](#transition_transition), you may configure the transition using methods such as [*transition*.delay](#transition_delay), [*transition*.duration](#transition_duration), [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style). Methods that specify target values (such as *transition*.attr) are evaluated synchronously; however, methods that require the starting value for interpolation, such as [*transition*.attrTween](#transition_attrTween) and [*transition*.styleTween](#transition_styleTween), must be deferred until the transition starts.\n\nShortly after creation, either at the end of the current frame or during the next frame, the transition is scheduled. At this point, the delay and `start` event listeners may no longer be changed; attempting to do so throws an error with the message “too late: already scheduled” (or if the transition has ended, “transition not found”).\n\nWhen the transition subsequently starts, it interrupts the active transition of the same name on the same element, if any, dispatching an `interrupt` event to registered listeners. (Note that interrupts happen on start, not creation, and thus even a zero-delay transition will not immediately interrupt the active transition: the old transition is given a final frame. Use [*selection*.interrupt](#selection_interrupt) to interrupt immediately.) The starting transition also cancels any pending transitions of the same name on the same element that were created before the starting transition. The transition then dispatches a `start` event to registered listeners. This is the last moment at which the transition may be modified: the transition’s timing, tweens, and listeners may not be changed when it is running; attempting to do so throws an error with the message “too late: already running” (or if the transition has ended, “transition not found”). The transition initializes its tweens immediately after starting.\n\nDuring the frame the transition starts, but *after* all transitions starting this frame have been started, the transition invokes its tweens for the first time. Batching tween initialization, which typically involves reading from the DOM, improves performance by avoiding interleaved DOM reads and writes.\n\nFor each frame that a transition is active, it invokes its tweens with an [eased](#transition_ease) *t*-value ranging from 0 to 1. Within each frame, the transition invokes its tweens in the order they were registered.\n\nWhen a transition ends, it invokes its tweens a final time with a (non-eased) *t*-value of 1. It then dispatches an `end` event to registered listeners. This is the last moment at which the transition may be inspected: after ending, the transition is deleted from the element, and its configuration is destroyed. (A transition’s configuration is also destroyed on interrupt or cancel.) Attempting to inspect a transition after it is destroyed throws an error with the message “transition not found”.\n","licenseText":"Copyright (c) 2010-2015, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTERMS OF USE - EASING EQUATIONS\n\nOpen source under the BSD License.\n\nCopyright 2001 Robert Penner\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n- Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n- Neither the name of the author nor the names of contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n","_id":"d3-transition@2.0.0-rc.6","dist":{"shasum":"14574507c98f4a053131233960161e9456aafcd5","integrity":"sha512-U7Tht4sHOmRx6jBA3kOk3kkinSDVUgASzOz9RBguk4ggssLk1KvHYlSYtjcvGgoIr6eRyDaYYB5vLVJCUOY8Xg==","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-2.0.0-rc.6.tgz","fileCount":39,"unpackedSize":109704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKmt7CRA9TVsSAnZWagAAPRUP/2/VotXoZjxWxUtzieeK\nCjiIvoGiGZrEXLlBtazKXlIDRMhLEg/fyWhLOTRXl3JTYT9AzrXFHqxngNpz\nz5g4OYluYtG5Fiujh1MEVLseBB0NXJPQhN83t8/UKPKhLes3oXy8ul4f7KwE\neL4ZoAQC4BDg1EJlxoaWKpXt/q1CtLbKQVFWgNhk+97sWv4ZWBbOvMaxpzPA\nX2/yJoSb6Tp76pJtTxEzfUsqrDn2H9b1Q9BRwjBKNk+nSPispPaLCTIJGBVG\n2h2QyJu6BFzkglu/OZJpHScUZi7e8AyJkFL+iShH/qYriavTTgRuMvUhtGKt\nKB62G3ViuSmg8QJB/9exT7Rb/q25K83PGYri2z25Sj0KL+5FfP2sV1jRipKo\n2MAX69xOBZH/Z0DqSKFti1MZJshVOuXwyE/mvOnnLWRFflZ1Gm3IZ2NZ/PO8\ntsC26FaWFvmdKZmt/BR51FPiEo85rUBrXla/3mGuZCJ0TxGrDP+XE1cadNDV\nnNJojF0VjmsxnZFnSIbxaarFyQhs5yk9gv54xgK+G3jriUvsG9cwDje7el9Q\nE1GADqo7QEfDHF673p3oNZlRwn8eQKvlNqvlWpSKrZA9oHbVOYS5TzUOWqcG\ng2azQctaElZj9M0/reTtjo0ALa8oya74wtKvq4N+xdCPT2NbFgHVNiVBOpzQ\norzK\r\n=VtuP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEf+l7NnTe5G9SB+WQxf/1h1Uv1CW6USMf+3BgmHs7N3AiEA94jWGSiS4lFvG1Rb8mwKO3vEkxutfoTtU0LZ8V+HmuI="}]},"maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"fil@rezo.net","name":"recifs"}],"_npmUser":{"name":"recifs","email":"fil@rezo.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_2.0.0-rc.6_1596615547212_0.4089044840211393"},"_hasShrinkwrap":false},"2.0.0":{"name":"d3-transition","version":"2.0.0","description":"Animated transitions for D3 selections.","keywords":["d3","d3-module","dom","transition","animation"],"homepage":"https://d3js.org/d3-transition/","license":"BSD-3-Clause","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"main":"dist/d3-transition.js","unpkg":"dist/d3-transition.min.js","jsdelivr":"dist/d3-transition.min.js","module":"src/index.js","repository":{"type":"git","url":"https://github.com/d3/d3-transition.git"},"scripts":{"pretest":"rollup -c","test":"tape 'test/**/*-test.js' && eslint src","prepublishOnly":"rm -rf dist && yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"},"sideEffects":true,"dependencies":{"d3-color":"1 - 2","d3-dispatch":"1 - 2","d3-ease":"1 - 2","d3-interpolate":"1 - 2","d3-timer":"1 - 2"},"peerDependencies":{"d3-selection":"2"},"devDependencies":{"d3-selection":"2","eslint":"6","jsdom":"15","rollup":"1","rollup-plugin-terser":"5","tape":"4"},"licenseText":"Copyright (c) 2010-2015, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTERMS OF USE - EASING EQUATIONS\n\nOpen source under the BSD License.\n\nCopyright 2001 Robert Penner\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n- Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n- Neither the name of the author nor the names of contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n","_id":"d3-transition@2.0.0","dist":{"shasum":"366ef70c22ef88d1e34105f507516991a291c94c","integrity":"sha512-42ltAGgJesfQE3u9LuuBHNbGrI/AJjNL2OAUdclE70UE6Vy239GCBEYD38uBPoLeNsOhFStGpPI0BAOV+HMxog==","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-2.0.0.tgz","fileCount":39,"unpackedSize":109590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQsupCRA9TVsSAnZWagAAUKwP/2lz84H1Ee9cHKQKuFok\nI4fJR51pbXJd1Aa4C3OVUsFv1bEBwV8g0i/Xj2vOyssZdBt3LWQ3o/sOAMaX\nlfJyNiYCIe87jo/CnNg8Kb770PKGQa2BjCTBLv3hBkZSUnPWhCCVQPs7ELX6\nEiSxKsuXOPUA7C9nP9bmJGauY9FJ3jZixez/5VIKAKvkJVHGA0C2Bytv6KNu\nD0NwL85vTcutVBW4pYf1au0R1nPa3TMx42UDIH3DSkbWLyLKxgQJZKn/ecSE\n1w3fmlbN++qPGHXbBulIReje7R3h9s3cpn0w+uBIPRaYj+IeirRnE8sYa7rQ\nETzJ7E7QO/kpE3UtfHWZTmdgkSI+sNoztyiZV9Qn6K4rv1p2NJGdyekd40Tu\nIGc8h59ikdpwHCEPtJmQVaDhNgBq8yioYFUW2K1stiZ3A1L9wGs+p4YA04dq\nYk5ITBclKgK7QEQFDfyx7JdgU/cOoCKbULo667v090YLZOvhZ58wc+lT3ZIW\nJkLlCZwUhKsiguX65MTedX90BYtqgMSqBKAUpYvJPjCKDRa7uOjEekQ6GyC7\n/9D7flxel3jwo3xOIhZoI07NrjnzqDukyhS2/748epIEI1fAn7i5Zes1rCWo\nD6Rbg2nG4IzjRGy52+aknQ3oOBqbGt00Rsohvz1l6MIv4VjJb5QtzzlsUejF\nlGL2\r\n=h+a5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAVTA5n9GqMJcwz43oZgWVd25s5TOoWCJ/3Mgo+nFi9TAiEA8z2kRlQicGpsUBBEagAUF7YGAMIP9+kOk62ShWumK0c="}]},"maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"fil@rezo.net","name":"recifs"}],"_npmUser":{"name":"recifs","email":"fil@rezo.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_2.0.0_1598213032710_0.6069504503132812"},"_hasShrinkwrap":false},"3.0.0":{"name":"d3-transition","version":"3.0.0","description":"Animated transitions for D3 selections.","homepage":"https://d3js.org/d3-transition/","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"keywords":["d3","d3-module","dom","transition","animation"],"license":"ISC","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"type":"module","module":"src/index.js","main":"src/index.js","jsdelivr":"dist/d3-transition.min.js","unpkg":"dist/d3-transition.min.js","exports":{"umd":"./dist/d3-transition.min.js","default":"./src/index.js"},"sideEffects":["./src/index.js","./src/selection/index.js"],"dependencies":{"d3-color":"1 - 3","d3-dispatch":"1 - 3","d3-ease":"1 - 3","d3-interpolate":"1 - 3","d3-timer":"1 - 3"},"devDependencies":{"d3-selection":"2 - 3","eslint":"7","jsdom":"16","mocha":"9","rollup":"2","rollup-plugin-terser":"7"},"scripts":{"test":"mocha 'test/**/*-test.js' && eslint src test","prepublishOnly":"rm -rf dist && yarn test && rollup -c","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"},"engines":{"node":">=12"},"peerDependencies":{"d3-selection":"2"},"gitHead":"98e84f01490f9ec083485f4c1683991a619e3e0f","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@3.0.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-BKbH4cJkRcSGAb4DtjRCZkYy8I0YJFOg4PnuZaJOVgaQBSEPzLA5sAnMGfYswQ+dIx9+BzHB9sH+QcNt2aICWg==","shasum":"e5ec6612ac057c78780e35686150c0914e3de8ab","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.0.tgz","fileCount":34,"unpackedSize":110521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvrJhCRA9TVsSAnZWagAA8ssP/2NEsu8+QGdZoB7QblJr\nu9KPUpguqcClZPVPWqpiXdCB2VK9qkwA2kaL1vkqzxLcqxki/2Rr1zU1N1JK\nh/yQjiCRAstAbAsVrmmSQMgXh8YoyFh9Kj/fv2HOiD0cX3cRelRxvbLbZaHV\nKJxuoG2oqx+COoMy0/SGdO/+qo4nsSaQOHmZKZdvg8CJc0d1g/4K3RCFiISv\nSdYe9pXRrsGpNlCchHc714pTYX03UWCg52cbyjgBpIjT/+EWPrd/L5R3yCks\n2vBW/HfiTBO8pp67pige7zkaBakT28XF9qd+0ebfOmsF4o+HENNoIaCiAFcc\nMTO/eoN0x/Jdb96oqq6F5gnV7Lbq6abvnR8ya4MG7HuXm8imFVDJtj7naSJF\nuIClrg5LWq4ZaEd/M5vqh/Y89IjIX7qcrDiyVSzDFK9TAxvFb1P8WtNZx5Vf\nTjJaSUSk6BtWx9jSLeP01ePR1jgwP9L+FE6+P/7AlPOvyjwX+40RnFG5jDAj\nC4rKKwoa9lsV0EViuZhPy22Zwj7QJPFL4NIWOVY8QiJGJr9K5KCK+STPWIqG\n4qvEhiKbi6D/Gmmohfety3GEEnBrPjybHUMTbqWJ4W4E5oJV95cnimW1CmUs\nijCbZE5d0B7h77sJfl04kwx/0wOCSCyewJYbSNJieFOctnuT0VVHtlG5HaIK\nGvGa\r\n=k0MC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnV5jEXIJAEFigxt82QgqZ07XA798kBtrKndKX0Vg6AAiEAxtE4dq5UeERwXmCFfE0rq0pz9MUe2tX5NTZoRChaHpo="}]},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"directories":{},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"},{"name":"recifs","email":"fil@rezo.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_3.0.0_1623110241405_0.054378108602175956"},"_hasShrinkwrap":false},"3.0.1":{"name":"d3-transition","version":"3.0.1","description":"Animated transitions for D3 selections.","homepage":"https://d3js.org/d3-transition/","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"keywords":["d3","d3-module","dom","transition","animation"],"license":"ISC","author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"type":"module","module":"src/index.js","main":"src/index.js","jsdelivr":"dist/d3-transition.min.js","unpkg":"dist/d3-transition.min.js","exports":{"umd":"./dist/d3-transition.min.js","default":"./src/index.js"},"sideEffects":["./src/index.js","./src/selection/index.js"],"dependencies":{"d3-color":"1 - 3","d3-dispatch":"1 - 3","d3-ease":"1 - 3","d3-interpolate":"1 - 3","d3-timer":"1 - 3"},"devDependencies":{"d3-selection":"2 - 3","eslint":"7","jsdom":"16","mocha":"9","rollup":"2","rollup-plugin-terser":"7"},"scripts":{"test":"mocha 'test/**/*-test.js' && eslint src test","prepublishOnly":"rm -rf dist && yarn test && rollup -c && git push","postpublish":"git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"},"engines":{"node":">=12"},"peerDependencies":{"d3-selection":"2 - 3"},"gitHead":"c4c94c421e2ef9e9ffc253fab33ccf99f1434901","bugs":{"url":"https://github.com/d3/d3-transition/issues"},"_id":"d3-transition@3.0.1","_nodeVersion":"15.14.0","_npmVersion":"7.7.6","dist":{"integrity":"sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==","shasum":"6869fdde1448868077fdd5989200cb61b2a1645f","tarball":"https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz","fileCount":34,"unpackedSize":110525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwVPRCRA9TVsSAnZWagAAQcQP+QHm5IcHnWEkye3SRzwo\nCmlMLmBiSK8e06ySBTDITrkATBP3++mN/uJdgyMUwycDV16pg+SA/iBWNNcO\n2KJ9oAWxIK50KsGV8V6SlkUkvw9+dSaOT+krGe9DElLe/UCANKzaG/2QB4xP\nMza7mxfVTJa0K8cCDJFRBsIJRUMZOffUF4uESHHk9ybe8md8398FSMje793i\n7xQedelVeCpC2ozjienBOb97S/7e4110bm5gYP8rnedGy6cXDnP9vYmV/BkG\n4RsAm5lT0+o8C2MaeCaj8NpPjxSa4Qh7kt8i6t7c/NE3tsO9bmkyiBIyZoMO\npGvjhKU9MFdMvrp6wbAjWAR+qw9RWvuQmssdzUo+gv/mTEK/tdnT8O8Wlbe+\nICHzVeRBLGQakDTLwnuBIZooLKoc9mWCsKDVuR7v58RhlfJzJzmtAKGhf6Mq\nrAoCek092OM6o+oV1uVyg2fwgWBm9GyMExGmZSzXzK1pPcpOiGuOAVMKABRI\ngFCA5tzyDsmNwCsKnFOGkA92t4toKaYrLMdB7Zdi88nTe5X8oeETzty7cA7T\nD6cefSFvvWJF3kzB/aPcq57Pb1gtejIF4EeADvB0l/Z4TjWcuv41QdHsfOmX\nyfSJpjzRxQdfHU143MiSMmRA82RahiparisNAtet9IQCvR1DgHW5Obgl31bn\neDcF\r\n=U4Fx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEeXHmpKANgVZ1JfEvHvNMpxbgI3IGpNPSnTk+i0+uvnAiEA+U4/b2kVfaQ4N5hbOZ1VTVdoVyI9LpvK0kGHF3goWvg="}]},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"directories":{},"maintainers":[{"name":"mbostock","email":"mike@ocks.org"},{"name":"recifs","email":"fil@rezo.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/d3-transition_3.0.1_1623282641131_0.14474285235146422"},"_hasShrinkwrap":false}},"readme":"# d3-transition\n\nA transition is a [selection](https://github.com/d3/d3-selection)-like interface for animating changes to the DOM. Instead of applying changes instantaneously, transitions smoothly interpolate the DOM from its current state to the desired target state over a given duration.\n\nTo apply a transition, select elements, call [*selection*.transition](#selection_transition), and then make the desired changes. For example:\n\n```js\nd3.select(\"body\")\n .transition()\n .style(\"background-color\", \"red\");\n```\n\nTransitions support most selection methods (such as [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style) in place of [*selection*.attr](https://github.com/d3/d3-selection#selection_attr) and [*selection*.style](https://github.com/d3/d3-selection#selection_style)), but not all methods are supported; for example, you must [append](https://github.com/d3/d3-selection#selection_append) elements or [bind data](https://github.com/d3/d3-selection#joining-data) before a transition starts. A [*transition*.remove](#transition_remove) operator is provided for convenient removal of elements when the transition ends.\n\nTo compute intermediate state, transitions leverage a variety of [built-in interpolators](https://github.com/d3/d3-interpolate). [Colors](https://github.com/d3/d3-interpolate#interpolateRgb), [numbers](https://github.com/d3/d3-interpolate#interpolateNumber), and [transforms](https://github.com/d3/d3-interpolate#interpolateTransform) are automatically detected. [Strings](https://github.com/d3/d3-interpolate#interpolateString) with embedded numbers are also detected, as is common with many styles (such as padding or font sizes) and paths. To specify a custom interpolator, use [*transition*.attrTween](#transition_attrTween), [*transition*.styleTween](#transition_styleTween) or [*transition*.tween](#transition_tween).\n\n## Installing\n\nIf you use npm, `npm install d3-transition`. You can also download the [latest release on GitHub](https://github.com/d3/d3-transition/releases/latest). For vanilla HTML in modern browsers, import d3-transition from Skypack:\n\n```html\n<script type=\"module\">\n\nimport {transition} from \"https://cdn.skypack.dev/d3-transition@3\";\n\nconst t = transition();\n\n</script>\n```\n\nFor legacy environments, you can load d3-transition’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/d3-color@3\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/d3-dispatch@3\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/d3-ease@3\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/d3-interpolate@3\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/d3-selection@3\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/d3-timer@3\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/d3-transition@3\"></script>\n<script>\n\nconst t = d3.transition();\n\n</script>\n```\n\n[Try d3-transition in your browser.](https://observablehq.com/collection/@d3/d3-transition)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Timing](#timing)\n* [Control Flow](#control-flow)\n* [The Life of a Transition](#the-life-of-a-transition)\n\n### Selecting Elements\n\nTransitions are derived from [selections](https://github.com/d3/d3-selection) via [*selection*.transition](#selection_transition). You can also create a transition on the document root element using [d3.transition](#transition).\n\n<a name=\"selection_transition\" href=\"#selection_transition\">#</a> <i>selection</i>.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js)\n\nReturns a new transition on the given *selection* with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name.\n\nIf the *name* is a [transition](#transition) instance, the returned transition has the same id and name as the specified transition. If a transition with the same id already exists on a selected element, the existing transition is returned for that element. Otherwise, the timing of the returned transition is inherited from the existing transition of the same id on the nearest ancestor of each selected element. Thus, this method can be used to synchronize a transition across multiple selections, or to re-select a transition for specific elements and modify its configuration. For example:\n\n```js\nvar t = d3.transition()\n .duration(750)\n .ease(d3.easeLinear);\n\nd3.selectAll(\".apple\").transition(t)\n .style(\"fill\", \"red\");\n\nd3.selectAll(\".orange\").transition(t)\n .style(\"fill\", \"orange\");\n```\n\nIf the specified *transition* is not found on a selected node or its ancestors (such as if the transition [already ended](#the-life-of-a-transition)), the default timing parameters are used; however, in a future release, this will likely be changed to throw an error. See [#59](https://github.com/d3/d3-transition/issues/59).\n\n<a name=\"selection_interrupt\" href=\"#selection_interrupt\">#</a> <i>selection</i>.<b>interrupt</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the selected elements, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used.\n\nInterrupting a transition on an element has no effect on any transitions on any descendant elements. For example, an [axis transition](https://github.com/d3/d3-axis) consists of multiple independent, synchronized transitions on the descendants of the axis [G element](https://www.w3.org/TR/SVG/struct.html#Groups) (the tick lines, the tick labels, the domain path, *etc.*). To interrupt the axis transition, you must therefore interrupt the descendants:\n\n```js\nselection.selectAll(\"*\").interrupt();\n```\n\nThe [universal selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors), `*`, selects all descendant elements. If you also want to interrupt the G element itself:\n\n```js\nselection.interrupt().selectAll(\"*\").interrupt();\n```\n\n<a name=\"interrupt\" href=\"#interrupt\">#</a> d3.<b>interrupt</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/interrupt.js)\n\nInterrupts the active transition of the specified *name* on the specified *node*, and cancels any pending transitions with the specified *name*, if any. If a name is not specified, null is used. See also [*selection*.interrupt](#selection_interrupt).\n\n<a name=\"transition\" href=\"#transition\">#</a> d3.<b>transition</b>([<i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29)\n\nReturns a new transition on the root element, `document.documentElement`, with the specified *name*. If a *name* is not specified, null is used. The new transition is only exclusive with other transitions of the same name. The *name* may also be a [transition](#transition) instance; see [*selection*.transition](#selection_transition). This method is equivalent to:\n\n```js\nd3.selection()\n .transition(name)\n```\n\nThis function can also be used to test for transitions (`instanceof d3.transition`) or to extend the transition prototype.\n\n<a name=\"transition_select\" href=\"#transition_select\">#</a> <i>transition</i>.<b>select</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/select.js)\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.select](https://github.com/d3/d3-selection#selection_select), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .select(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectAll\" href=\"#transition_selectAll\">#</a> <i>transition</i>.<b>selectAll</b>(<i>selector</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js)\n\nFor each selected element, selects all descendant elements that match the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectAll](https://github.com/d3/d3-selection#selection_selectAll), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectAll(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectChild\" href=\"#transition_selectChild\">#</a> <i>transition</i>.<b>selectChild</b>([<i>selector</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/select.js)\n\nFor each selected element, selects the first child element that matches the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectChild](https://github.com/d3/d3-selection#selection_selectChild), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectChild(selector)\n .transition(transition)\n```\n\n<a name=\"transition_selectChildren\" href=\"#transition_selectChildren\">#</a> <i>transition</i>.<b>selectChildren</b>([<i>selector</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js)\n\nFor each selected element, selects all children that match the specified *selector* string, if any, and returns a transition on the resulting selection. The *selector* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.selectChildren](https://github.com/d3/d3-selection#selection_selectChildren), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .selectChildren(selector)\n .transition(transition)\n```\n\n<a name=\"transition_filter\" href=\"#transition_filter\">#</a> <i>transition</i>.<b>filter</b>(<i>filter</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js)\n\nFor each selected element, selects only the elements that match the specified *filter*, and returns a transition on the resulting selection. The *filter* may be specified either as a selector string or a function. If a function, it is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The new transition has the same id, name and timing as this transition; however, if a transition with the same id already exists on a selected element, the existing transition is returned for that element.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), creating a subselection via [*selection*.filter](https://github.com/d3/d3-selection#selection_filter), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .filter(filter)\n .transition(transition)\n```\n\n<a name=\"transition_merge\" href=\"#transition_merge\">#</a> <i>transition</i>.<b>merge</b>(<i>other</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js)\n\nReturns a new transition merging this transition with the specified *other* transition, which must have the same id as this transition. The returned transition has the same number of groups, the same parents, the same name and the same id as this transition. Any missing (null) elements in this transition are filled with the corresponding element, if present (not null), from the *other* transition.\n\nThis method is equivalent to deriving the selection for this transition via [*transition*.selection](#transition_selection), merging with the selection likewise derived from the *other* transition via [*selection*.merge](https://github.com/d3/d3-selection#selection_merge), and then creating a new transition via [*selection*.transition](#selection_transition):\n\n```js\ntransition\n .selection()\n .merge(other.selection())\n .transition(transition)\n```\n\n<a name=\"transition_transition\" href=\"#transition_transition\">#</a> <i>transition</i>.<b>transition</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js)\n\nReturns a new transition on the same selected elements as this transition, scheduled to start when this transition ends. The new transition inherits a reference time equal to this transition’s time plus its [delay](#transition_delay) and [duration](#transition_duration). The new transition also inherits this transition’s name, duration, and [easing](#transition_ease). This method can be used to schedule a sequence of chained transitions. For example:\n\n```js\nd3.selectAll(\".apple\")\n .transition() // First fade to green.\n .style(\"fill\", \"green\")\n .transition() // Then red.\n .style(\"fill\", \"red\")\n .transition() // Wait one second. Then brown, and remove.\n .delay(1000)\n .style(\"fill\", \"brown\")\n .remove();\n```\n\nThe delay for each transition is relative to its previous transition. Thus, in the above example, apples will stay red for one second before the last transition to brown starts.\n\n<a name=\"transition_selection\" href=\"#transition_selection\">#</a> <i>transition</i>.<b>selection</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js)\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n<a name=\"active\" href=\"#active\">#</a> d3.<b>active</b>(<i>node</i>[, <i>name</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/active.js)\n\nReturns the active transition on the specified *node* with the specified *name*, if any. If no *name* is specified, null is used. Returns null if there is no such active transition on the specified node. This method is useful for creating chained transitions. For example, to initiate disco mode:\n\n```js\nd3.selectAll(\"circle\").transition()\n .delay(function(d, i) { return i * 50; })\n .on(\"start\", function repeat() {\n d3.active(this)\n .style(\"fill\", \"red\")\n .transition()\n .style(\"fill\", \"green\")\n .transition()\n .style(\"fill\", \"blue\")\n .transition()\n .on(\"start\", repeat);\n });\n```\n\nSee [chained transitions](https://bl.ocks.org/mbostock/70d5541b547cc222aa02) for an example.\n\n### Modifying Elements\n\nAfter selecting elements and creating a transition with [*selection*.transition](#selection_transition), use the transition’s transformation methods to affect document content.\n\n<a name=\"transition_attr\" href=\"#transition_attr\">#</a> <i>transition</i>.<b>attr</b>(<i>name</i>, <i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js)\n\nFor each selected element, assigns the [attribute tween](#transition_attrTween) for the attribute with the specified *name* to the specified target *value*. The starting value of the tween is the attribute’s value when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the attribute is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.attrTween](#transition_attrTween).\n\n<a name=\"transition_attrTween\" href=\"#transition_attrTween\">#</a> <i>transition</i>.<b>attrTween</b>(<i>name</i>[, <i>factory</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js)\n\nIf *factory* is specified and not null, assigns the attribute [tween](#transition_tween) for the attribute with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the attribute value. The interpolator must return a string. (To remove an attribute at the start of a transition, use [*transition*.attr](#transition_attr); to remove an attribute at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned attribute tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for attribute with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill attribute from red to blue:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.attrTween(\"fill\", function() {\n return d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.attrTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as one that understands [SVG paths](https://bl.ocks.org/mbostock/3916621). A useful technique is *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used (say, with a [shape](https://github.com/d3/d3-shape)) to compute the new attribute value.\n\n<a name=\"transition_style\" href=\"#transition_style\">#</a> <i>transition</i>.<b>style</b>(<i>name</i>, <i>value</i>[, <i>priority</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/style.js)\n\nFor each selected element, assigns the [style tween](#transition_styleTween) for the style with the specified *name* to the specified target *value* with the specified *priority*. The starting value of the tween is the style’s inline value if present, and otherwise its computed value, when the transition starts. The target *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element.\n\nIf the target value is null, the style is removed when the transition starts. Otherwise, an interpolator is chosen based on the type of the target value, using the following algorithm:\n\n1. If *value* is a number, use [interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber).\n2. If *value* is a [color](https://github.com/d3/d3-color#color) or a string coercible to a color, use [interpolateRgb](https://github.com/d3/d3-interpolate#interpolateRgb).\n3. Use [interpolateString](https://github.com/d3/d3-interpolate#interpolateString).\n\nTo apply a different interpolator, use [*transition*.styleTween](#transition_styleTween).\n\n<a name=\"transition_styleTween\" href=\"#transition_styleTween\">#</a> <i>transition</i>.<b>styleTween</b>(<i>name</i>[, <i>factory</i>[, <i>priority</i>]]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js)\n\nIf *factory* is specified and not null, assigns the style [tween](#transition_tween) for the style with the specified *name* to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the style value with the specified *priority*. The interpolator must return a string. (To remove an style at the start of a transition, use [*transition*.style](#transition_style); to remove an style at the end of a transition, use [*transition*.on](#transition_on) to listen for the *end* event.)\n\nIf the specified *factory* is null, removes the previously-assigned style tween of the specified *name*, if any. If *factory* is not specified, returns the current interpolator factory for style with the specified *name*, or undefined if no such tween exists.\n\nFor example, to interpolate the fill style from red to blue:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(\"red\", \"blue\");\n});\n```\n\nOr to interpolate from the current fill to blue, like [*transition*.style](#transition_style):\n\n```js\ntransition.styleTween(\"fill\", function() {\n return d3.interpolateRgb(this.style.fill, \"blue\");\n});\n```\n\nOr to apply a custom rainbow interpolator:\n\n```js\ntransition.styleTween(\"fill\", function() {\n return function(t) {\n return \"hsl(\" + t * 360 + \",100%,50%)\";\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, such as with *data interpolation*, where [d3.interpolateObject](https://github.com/d3/d3-interpolate#interpolateObject) is used to interpolate two data values, and the resulting value is then used to compute the new style value.\n\n<a name=\"transition_text\" href=\"#transition_text\">#</a> <i>transition</i>.<b>text</b>(<i>value</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/text.js)\n\nFor each selected element, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified target *value* when the transition starts. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nTo interpolate text rather than to set it on start, use [*transition*.textTween](#transition_textTween) or append a replacement element and cross-fade opacity. Text is not interpolated by default because it is usually undesirable.\n\n<a name=\"transition_textTween\" href=\"#transition_textTween\">#</a> <i>transition</i>.<b>textTween</b>(<i>factory</i>) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js), [Examples](https://observablehq.com/@d3/transition-texttween)\n\nIf *factory* is specified and not null, assigns the text [tween](#transition_tween) to the specified interpolator *factory*. An interpolator factory is a function that returns an [interpolator](https://github.com/d3/d3-interpolate); when the transition starts, the *factory* is evaluated for each selected element, in order, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. The returned interpolator will then be invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. Lastly, the return value of the interpolator will be used to set the text. The interpolator must return a string.\n\nFor example, to interpolate the text with integers from 0 to 100:\n\n```js\ntransition.textTween(function() {\n return d3.interpolateRound(0, 100);\n});\n```\n\nIf the specified *factory* is null, removes the previously-assigned text tween, if any. If *factory* is not specified, returns the current interpolator factory for text, or undefined if no such tween exists.\n\n<a name=\"transition_remove\" href=\"#transition_remove\">#</a> <i>transition</i>.<b>remove</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js)\n\nFor each selected element, [removes](https://github.com/d3/d3-selection#selection_remove) the element when the transition ends, as long as the element has no other active or pending transitions. If the element has other active or pending transitions, does nothing.\n\n<a name=\"transition_tween\" href=\"#transition_tween\">#</a> <i>transition</i>.<b>tween</b>(<i>name</i>[, <i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js)\n\nFor each selected element, assigns the tween with the specified *name* with the specified *value* function. The *value* must be specified as a function that returns a function. When the transition starts, the *value* function is evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The returned function is then invoked for each frame of the transition, in order, being passed the [eased](#transition_ease) time *t*, typically in the range [0, 1]. If the specified *value* is null, removes the previously-assigned tween of the specified *name*, if any.\n\nFor example, to interpolate the fill attribute to blue, like [*transition*.attr](#transition_attr):\n\n```js\ntransition.tween(\"attr.fill\", function() {\n var i = d3.interpolateRgb(this.getAttribute(\"fill\"), \"blue\");\n return function(t) {\n this.setAttribute(\"fill\", i(t));\n };\n});\n```\n\nThis method is useful to specify a custom interpolator, or to perform side-effects, say to animate the [scroll offset](https://bl.ocks.org/mbostock/1649463).\n\n### Timing\n\nThe [easing](#transition_ease), [delay](#transition_delay) and [duration](#transition_duration) of a transition is configurable. For example, a per-element delay can be used to [stagger the reordering](https://observablehq.com/@d3/sortable-bar-chart) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n<a name=\"transition_delay\" href=\"#transition_delay\">#</a> <i>transition</i>.<b>delay</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js)\n\nFor each selected element, sets the transition delay to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition delay. If a delay is not specified, it defaults to zero.\n\nIf a *value* is not specified, returns the current value of the delay for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\nSetting the delay to a multiple of the index `i` is a convenient way to stagger transitions across a set of elements. For example:\n\n```js\ntransition.delay(function(d, i) { return i * 10; });\n```\n\nOf course, you can also compute the delay as a function of the data, or [sort the selection](https://github.com/d3/d3-selection#selection_sort) before computed an index-based delay.\n\n<a name=\"transition_duration\" href=\"#transition_duration\">#</a> <i>transition</i>.<b>duration</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js)\n\nFor each selected element, sets the transition duration to the specified *value* in milliseconds. The *value* may be specified either as a constant or a function. If a function, it is immediately evaluated for each selected element, in order, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. The function’s return value is then used to set each element’s transition duration. If a duration is not specified, it defaults to 250ms.\n\nIf a *value* is not specified, returns the current value of the duration for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_ease\" href=\"#transition_ease\">#</a> <i>transition</i>.<b>ease</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js)\n\nSpecifies the transition [easing function](https://github.com/d3/d3-ease) for all selected elements. The *value* must be specified as a function. The easing function is invoked for each frame of the animation, being passed the normalized time *t* in the range [0, 1]; it must then return the eased time *tʹ* which is typically also in the range [0, 1]. A good easing function should return 0 if *t* = 0 and 1 if *t* = 1. If an easing function is not specified, it defaults to [d3.easeCubic](https://github.com/d3/d3-ease#easeCubic).\n\nIf a *value* is not specified, returns the current easing function for the first (non-null) element in the transition. This is generally useful only if you know that the transition contains exactly one element.\n\n<a name=\"transition_easeVarying\" href=\"#transition_easeVarying\">#</a> <i>transition</i>.<b>easeVarying</b>(<i>factory</i>) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/easeVarying.js \"Source\")\n\nSpecifies a factory for the transition [easing function](https://github.com/d3/d3-ease). The *factory* must be a function. It is invoked for each node of the selection, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. It must return an easing function.\n\n### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n<a name=\"transition_end\" href=\"#transition_end\">#</a> <i>transition</i>.<b>end</b>() · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/end.js)\n\nReturns a promise that resolves when every selected element finishes transitioning. If any element’s transition is cancelled or interrupted, the promise rejects.\n\n<a name=\"transition_on\" href=\"#transition_on\">#</a> <i>transition</i>.<b>on</b>(<i>typenames</i>[, <i>listener</i>]) · [Source](https://github.com/d3/d3-transition/blob/master/src/transition/on.js)\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is one of the following string event types:\n\n* `start` - when the transition starts.\n* `end` - when the transition ends.\n* `interrupt` - when the transition is interrupted.\n* `cancel` - when the transition is cancelled.\n\nSee [The Life of a Transition](#the-life-of-a-transition) for more. Note that these are *not* native DOM events as implemented by [*selection*.on](https://github.com/d3/d3-selection#selection_on) and [*selection*.dispatch](https://github.com/d3/d3-selection#selection_dispatch), but transition events!\n\nThe type may be optionally followed by a period (`.`) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as `start.foo` and `start.bar`. To specify multiple typenames, separate typenames with spaces, such as `interrupt end` or `start.foo start.bar`.\n\nWhen a specified transition event is dispatched on a selected node, the specified *listener* will be invoked for the transitioning element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. Listeners always see the latest datum for their element, but the index is a property of the selection and is fixed when the listener is assigned; to update the index, re-assign the listener.\n\nIf an event listener was previously registered for the same *typename* on a selected element, the old listener is removed before the new listener is added. To remove a listener, pass null as the *listener*. To remove all listeners for a given name, pass null as the *listener* and `.foo` as the *typename*, where `foo` is the name; to remove all listeners with no name, specify `.` as the *typename*.\n\nIf a *listener* is not specified, returns the currently-assigned listener for the specified event *typename* on the first (non-null) selected element, if any. If multiple typenames are specified, the first matching listener is returned.\n\n<a name=\"transition_each\" href=\"#transition_each\">#</a> <i>transition</i>.<b>each</b>(<i>function</i>) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/each.js)\n\nInvokes the specified *function* for each selected element, passing in the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element. This method can be used to invoke arbitrary code for each selected element, and is useful for creating a context to access parent and child data simultaneously. Equivalent to [*selection*.each](https://github.com/d3/d3-selection#selection_each).\n\n<a name=\"transition_call\" href=\"#transition_call\">#</a> <i>transition</i>.<b>call</b>(<i>function</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/call.js)\n\nInvokes the specified *function* exactly once, passing in this transition along with any optional *arguments*. Returns this transition. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several attributes in a reusable function:\n\n```js\nfunction color(transition, fill, stroke) {\n transition\n .style(\"fill\", fill)\n .style(\"stroke\", stroke);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").transition().call(color, \"red\", \"blue\");\n```\n\nThis is equivalent to:\n\n```js\ncolor(d3.selectAll(\"div\").transition(), \"red\", \"blue\");\n```\n\nEquivalent to [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n<a name=\"transition_empty\" href=\"#transition_empty\">#</a> <i>transition</i>.<b>empty</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js)\n\nReturns true if this transition contains no (non-null) elements. Equivalent to [*selection*.empty](https://github.com/d3/d3-selection#selection_empty).\n\n<a name=\"transition_nodes\" href=\"#transition_nodes\">#</a> <i>transition</i>.<b>nodes</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js)\n\nReturns an array of all (non-null) elements in this transition. Equivalent to [*selection*.nodes](https://github.com/d3/d3-selection#selection_nodes).\n\n<a name=\"transition_node\" href=\"#transition_node\">#</a> <i>transition</i>.<b>node</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/node.js)\n\nReturns the first (non-null) element in this transition. If the transition is empty, returns null. Equivalent to [*selection*.node](https://github.com/d3/d3-selection#selection_node).\n\n<a name=\"transition_size\" href=\"#transition_size\">#</a> <i>transition</i>.<b>size</b>() · [Source](https://github.com/d3/d3-selection/blob/master/src/selection/size.js)\n\nReturns the total number of elements in this transition. Equivalent to [*selection*.size](https://github.com/d3/d3-selection#selection_size).\n\n### The Life of a Transition\n\nImmediately after creating a transition, such as by [*selection*.transition](#selection_transition) or [*transition*.transition](#transition_transition), you may configure the transition using methods such as [*transition*.delay](#transition_delay), [*transition*.duration](#transition_duration), [*transition*.attr](#transition_attr) and [*transition*.style](#transition_style). Methods that specify target values (such as *transition*.attr) are evaluated synchronously; however, methods that require the starting value for interpolation, such as [*transition*.attrTween](#transition_attrTween) and [*transition*.styleTween](#transition_styleTween), must be deferred until the transition starts.\n\nShortly after creation, either at the end of the current frame or during the next frame, the transition is scheduled. At this point, the delay and `start` event listeners may no longer be changed; attempting to do so throws an error with the message “too late: already scheduled” (or if the transition has ended, “transition not found”).\n\nWhen the transition subsequently starts, it interrupts the active transition of the same name on the same element, if any, dispatching an `interrupt` event to registered listeners. (Note that interrupts happen on start, not creation, and thus even a zero-delay transition will not immediately interrupt the active transition: the old transition is given a final frame. Use [*selection*.interrupt](#selection_interrupt) to interrupt immediately.) The starting transition also cancels any pending transitions of the same name on the same element that were created before the starting transition. The transition then dispatches a `start` event to registered listeners. This is the last moment at which the transition may be modified: the transition’s timing, tweens, and listeners may not be changed when it is running; attempting to do so throws an error with the message “too late: already running” (or if the transition has ended, “transition not found”). The transition initializes its tweens immediately after starting.\n\nDuring the frame the transition starts, but *after* all transitions starting this frame have been started, the transition invokes its tweens for the first time. Batching tween initialization, which typically involves reading from the DOM, improves performance by avoiding interleaved DOM reads and writes.\n\nFor each frame that a transition is active, it invokes its tweens with an [eased](#transition_ease) *t*-value ranging from 0 to 1. Within each frame, the transition invokes its tweens in the order they were registered.\n\nWhen a transition ends, it invokes its tweens a final time with a (non-eased) *t*-value of 1. It then dispatches an `end` event to registered listeners. This is the last moment at which the transition may be inspected: after ending, the transition is deleted from the element, and its configuration is destroyed. (A transition’s configuration is also destroyed on interrupt or cancel.) Attempting to inspect a transition after it is destroyed throws an error with the message “transition not found”.\n","maintainers":[{"name":"mbostock","email":"mike@ocks.org"},{"name":"recifs","email":"fil@rezo.net"}],"time":{"modified":"2022-06-14T07:55:54.399Z","created":"2015-05-29T16:55:33.922Z","0.0.2":"2015-05-29T16:55:33.922Z","0.0.3":"2015-06-02T00:36:53.355Z","0.0.4":"2015-06-16T21:00:14.244Z","0.0.5":"2015-11-04T08:03:05.869Z","0.0.6":"2015-11-11T19:48:05.497Z","0.0.7":"2016-02-03T18:00:58.730Z","0.0.8":"2016-02-05T01:49:06.754Z","0.0.9":"2016-02-10T19:53:17.177Z","0.1.0":"2016-02-11T23:02:09.248Z","0.1.1":"2016-02-12T21:52:28.603Z","0.1.2":"2016-02-12T23:00:19.746Z","0.1.3":"2016-02-22T00:10:49.195Z","0.2.0":"2016-02-22T23:34:37.572Z","0.2.1":"2016-02-23T04:52:49.265Z","0.2.2":"2016-02-24T05:36:42.709Z","0.2.3":"2016-02-26T21:42:45.973Z","0.2.4":"2016-02-26T23:28:41.240Z","0.2.5":"2016-02-28T17:35:33.903Z","0.2.6":"2016-03-02T23:06:12.456Z","0.2.7":"2016-03-03T06:03:35.228Z","0.2.8":"2016-03-06T22:57:04.870Z","0.2.9":"2016-05-16T21:33:04.874Z","0.2.10":"2016-05-20T21:14:51.540Z","0.3.0":"2016-06-08T03:43:33.401Z","0.3.1":"2016-06-19T16:34:24.586Z","1.0.0":"2016-06-24T18:02:47.237Z","1.0.1":"2016-08-02T21:25:28.553Z","1.0.2":"2016-08-26T20:51:16.221Z","1.0.3":"2016-10-20T17:48:44.551Z","1.0.4":"2017-03-10T17:42:45.431Z","1.1.0":"2017-05-15T18:09:49.012Z","1.1.1":"2017-11-21T21:51:47.023Z","1.1.2":"2018-08-24T19:24:47.679Z","1.1.3":"2018-08-24T21:31:33.359Z","1.2.0":"2019-01-25T01:11:18.047Z","1.2.1":"2019-11-16T19:35:50.032Z","1.3.0":"2019-11-17T06:31:33.223Z","1.3.1":"2019-11-17T22:47:43.128Z","1.3.2":"2019-11-18T16:53:46.687Z","2.0.0-rc1":"2020-07-23T11:32:03.455Z","2.0.0-rc.1":"2020-07-23T11:48:59.967Z","2.0.0-rc.2":"2020-07-23T11:51:37.458Z","2.0.0-rc.3":"2020-07-24T15:01:00.083Z","2.0.0-rc.4":"2020-07-30T14:31:31.513Z","2.0.0-rc.5":"2020-07-31T06:28:16.705Z","2.0.0-rc.6":"2020-08-05T08:19:07.342Z","2.0.0":"2020-08-23T20:03:52.802Z","3.0.0":"2021-06-07T23:57:21.561Z","3.0.1":"2021-06-09T23:50:41.294Z"},"homepage":"https://d3js.org/d3-transition/","repository":{"type":"git","url":"git+https://github.com/d3/d3-transition.git"},"readmeFilename":"README.md","keywords":["d3","d3-module","dom","transition","animation"],"author":{"name":"Mike Bostock","url":"https://bost.ocks.org/mike"},"license":"ISC","users":{"sophiaverhoeff":true,"johncido":true},"bugs":{"url":"https://github.com/d3/d3-transition/issues"}} |