{"_id":"@observablehq/notebook-stdlib","_rev":"38-78a2a4f6d552c5f9169b961ed0b2851d","name":"@observablehq/notebook-stdlib","dist-tags":{"latest":"1.3.0"},"versions":{"0.0.1":{"name":"@observablehq/notebook-stdlib","version":"0.0.1","author":{"name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@0.0.1","maintainers":[{"name":"mbostock","email":"mike@ocks.org"}],"dist":{"shasum":"99fb0c1fb4f6203d8d48f390303c21211a31a73e","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-0.0.1.tgz","integrity":"sha512-wI2MsfpBfwkjQTBED4lKq2CSNj+wGQ+hcn0dIqXx6f0GIZ3y3UDSiL7KSSX+agyol5RXGt/cgTbiYeGW6N9iZA==","signatures":[{"sig":"MEUCIQDrpe5GGkgQJNXg3ZkCox0SXuFhjQovSFxtYq8uvtdp7wIgRgFve9YQ4QIUWOGjXfWb8FxpkP50V+049t5CIOIMzFs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"src/index","gitHead":"ac480d61a422cb8c32acd21e3aa07018764bda07","scripts":{"test":"tape -r @std/esm 'test/**/*-test.js'","precommit":"eslint . && yarn test"},"@std/esm":{"cjs":true,"esm":"js"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","_npmVersion":"5.6.0","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"8.9.4","dependencies":{"@std/esm":"^0.16.0","d3-require":"^0.6.2"},"devDependencies":{"tape":"^4.8.0","husky":"^0.14.3","jsdom":"^11.5.1","eslint":"^4.12.1","tape-await":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib-0.0.1.tgz_1517422874060_0.3592299830634147","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@observablehq/notebook-stdlib","version":"0.0.2","author":{"name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@0.0.2","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"homepage":"https://github.com/observablehq/notebook-stdlib#readme","bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"4822ee304bdbb99dbfe3c5baeb652e8802c4caae","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-0.0.2.tgz","fileCount":49,"integrity":"sha512-5PNDxkz7G31ENSw8Q1DS/9ZnlEHD3UmLZagoK6w+azuLelTm5ZxVqQQs9MVQThmUTl2Q0jLcdPcRUbeTHilZ7Q==","signatures":[{"sig":"MEUCIQDbEfrwdMf72N8KUgHO6w9sKtOniJ5z53EneMu/FCJFAQIgY9l2hYJDn2s3FDtxYey3APBtJTTV6r1dijZS2TpbKV0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":121353,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8erxCRA9TVsSAnZWagAAcDMQAISeRrLyvAdNPVdygj5o\nvz37fOkTv2mqsitDVTPMBzOysQdjhIdoe7vqeAAJ+Q/yQDBC6mD3vjMyrnrD\nFQyyzKHjaV6FFM/JOj9OAhxfjZC0ETuNaN7oUyAQr1WKaYfzq9OmhwGwMBDL\n2dXkS+P+FCpHhluv8zLkrZ9AevTrPO9L4dvJuPi9tflhRed269OcIxXwe6s8\nUMJxqAkLVtkr9g5KDki3Cco6TnpT84KZqtHWA5Bnrat/OkGkl4BcNjK8vZcq\nCbGySoMCIj31zVidiIrB/aQ8FVQoDXYNqVF9566cMZYNd3Cath+khjKp/9Sj\n3LNg0Ak99I/nVl0YANGBwPj9dOnh+NpGQw5o7OmyE+alrxubBFt0G6sNJeZB\nINk6Y3t28+WAXJiDIRDYyWxNNUvleqcwSi6QOOZxrK9g7bUNTyniBMWhxB+O\nPPpjoXLZWXoSY6ldq3ooADMKaFY38hVxX+Cfya7B4rz8clF21QJKQxuQC/07\nf36PbaQyz40vE/4fsNbg5zH5fzTSEKYAKO42O+MT68BqpkOwScLC23HmfibQ\n/OL/w8iWpuPjPj/elYc+eT0Nll/Jtxf/fG5gRX+cNg16eD9oAX8INDh4s/gg\nZ/3+eHHWscCSBoqVMANOeBcDLqgOOuaAIE0tqrg+I8lVqIlsW2ZIfjDKo5bA\n3d1q\r\n=Utxg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index","gitHead":"162dd50fe35d60eb9d87f910714885cc8bcdc8b2","scripts":{"test":"tape -r esm 'test/**/*-test.js'","precommit":"eslint . && yarn test","prepublishOnly":"rollup -c"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"_npmVersion":"5.6.0","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"8.9.4","dependencies":{"esm":"^3.0.5","d3-require":"^0.6.6"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^4.12.1","rollup":"^0.52.0","tape-await":"0.1.0","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_0.0.2_1525803758663_0.7740899354145643","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@observablehq/notebook-stdlib","version":"1.0.0","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.0.0","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"homepage":"https://github.com/observablehq/notebook-stdlib#readme","bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"80663837f02b95661326ed11eccf1d2ffbd5a17a","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.0.0.tgz","fileCount":52,"integrity":"sha512-n5mvTZUm5a2p6gtdkcjTqXTsZsxxd+ZQZ5FXrFCdcVRM/rnsbVZLxYGRTXlb2oqzkrwPUdsLDDI6hM4+RzPHNA==","signatures":[{"sig":"MEUCIAym11WGBauImDmgrB9B/0fhlosN07vn4cUrISG0q8lsAiEAwapoWgPcDXMzQ6IJFFQYMzUoY4Cx9Z1B3YeUyYu8+z0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":182133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+2eECRA9TVsSAnZWagAA8bkP/3ojInPzcgu7eiCdGOTZ\n6XpIokLy1p+hhvL/RakHOS11/ONvrVpycJcHgbG9PP52lcEVg9l10MqiCnBL\nkIdlZIUFz2cdMHITfbCmpZm8rsbshGuWo376qvrTJQrw3YkT7GxnmLHjk8rl\nqE7PY2U5uahAin925t/BxNPzNKcYq78xdVmOA3GqonAauaFDNoXIkR8U+4vV\nK3WTcIvy+nSJ41OuiNPhG/MGoZwuQIW4GKomHBahmXBLhnwIhvHNUsd0L7Xl\ngOQFMwp8f4L8H4Rrl/zDNa/lMfjJu39HUolSYvI0Eh3x+Zwh/S1foZfah+M5\n3OAReChX/8HwuovB2L6Lm/wMGB77Uk4DGNyYostWbcsBO35G4bTXS/gPcC+S\neHBScHR3Mb51tdSANtz27mImT6HjID7ceYyrWiQEguCr/ox+MzoYkv3OEKeB\n1CgsBObEhI2QISU2nu0SGofa8cszJt/34aunm/n1bGHI71qrMFD/qnvK8LpD\nnOnNa0lsVcd4F0c3PmjGJUIGVXUq9JdrScr9V7oZ6zMx8Z9tLlAQI1gD8jkI\nSRTnyGnEzyoyxFkNsM2YaEEUjyQXwJNgDAWuUok5M2az6VNQQ2Cm7CvV9ZXs\n9uT52QrcXslzpqoapsuNJRljjE/7ig5lB4FhScGPvIXSVVsOUfT8RqwBUEl2\n40G7\r\n=Bctc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","gitHead":"5810024513c1401574524fda7b5ab23aa3184866","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"_npmVersion":"5.6.0","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"8.9.4","dependencies":{"esm":"^3.0.5","d3-require":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^4.12.1","rollup":"^0.52.0","tape-await":"0.1.0","rollup-plugin-uglify":"^3.0.0","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.0.0_1526425474496_0.623451536441781","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@observablehq/notebook-stdlib","version":"1.0.1","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.0.1","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"b83e13d7704e23588f094c8d6c6b583eb8e1dd11","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.0.1.tgz","fileCount":57,"integrity":"sha512-UlNRgX1jUpNlwNuS5F04eCEl555C/YBX/lq+HoA0NJqaOa/AiujUMzI+OdDMiPUAqzXQASoVNOXmoIZCdGWxjA==","signatures":[{"sig":"MEQCIFQPKoziorVGr1Jm+d2TcUx/UPWOhcCATKQcuVDQalF4AiANp7fZ8ta+MfdlMbwvTF/gnDS4UiGV3SGq/xMnskEvnw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBbB/CRA9TVsSAnZWagAARpoP/iD5ZMJWwJU8BOgKyfwi\nI21uygR6ggmCbfik9FlL9PljNfc70JHv5yTGhebAmT5bYBF/1OaHfQdYTpvO\nGvQpa8BBrWHa1qpk79l6///dP5o0L6ZZwACK4jpE+Z3akOB2cqG3CLlWI4dV\nuAqfjIHPvZW4BBOVjfW/4sloaypUYtIuV5zw+iMdE8lJmOL+6UmQnWFHgQ5K\n3isAlLbuPAwNhXfUUsEpc8Y2TmPW/spUtwcKXuI5lXBm9lf8BmDSsBMYg9Ow\nKSiw/6nR72nS2ewh6W35E8882XechSKcQcVtitSWSIFbbXazGLa7FB/MLgal\nOYsATBhRsLWq7EgiQhsyqBV3nA6r8iIzN+ZiduoLVqVl3X9PbQgtfdxey6mp\n4KnPYITWZ48+y5HligAE+KDBxy2/7IQtfDZqnT8nIE7Aie5ptIjdHmj1OKzv\nqNrgmCgDu8wz2HGRpvnf97RjONvRfS3V/ohr9tt0YNV1MLvFAeSEqVBC87zH\nxkvLOhg9z9cTUaIDdeAajl0pjxWBSslJ+3ZisemZmVGBcU4ng5WBU/ZQsoXX\nv4w1aTbOncljGzonHummyWCVnxDMIpVYhohTeA66vWyyA9M1EEuqsfwC787t\nFN/OtWEcU7/4Em5e2DHQuZqk3oF/5YGlMj1/83TwIBjNtEzXCCwVtyxetqbO\nFh1U\r\n=j8sm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"https://github.com/observablehq/notebook-stdlib.git","type":"git"},"description":"The Observable notebook standard library.","directories":{},"licenseText":"Copyright 2018 Observable, Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any purpose\nwith or without fee is hereby granted, provided that the above copyright notice\nand this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\nOF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n","dependencies":{"esm":"^3.0.5","d3-require":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^4.12.1","rollup":"^0.52.0","tape-await":"0.1.0","rollup-plugin-uglify":"^3.0.0","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.0.1_1527099517240_0.1883242978418378","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@observablehq/notebook-stdlib","version":"1.0.2","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.0.2","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"45aa5a7467506f6e61edc3dbec23a40660c5a806","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.0.2.tgz","fileCount":57,"integrity":"sha512-LRxeMCHfhe0AJ4IUTxHenrlgcF79uM46r9tU+9tTePhK50iyZ02NRmCXByvQYCTQw6kRYaMxbVXsfYk3CjSocQ==","signatures":[{"sig":"MEUCIQD9tcfmUETjTt4JZSy29cZqEaQiC7eWoZepSeCiSuVILAIgNKMKJLRpsD7w1K8UKz8N7uQUpUQHHxlf3CREKN7X8LY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbDrCaCRA9TVsSAnZWagAAQ70QAJilWQM4UeX8dSZryCf+\ngc8q0n8jvk+ac+OuPM3O5wnWwp7Jdbo1tCbq429vOwgHaQoL/gBvPhdXvuQZ\njl2EBamfS/OiwXQ/l94zS+aOkx66QuoBBzI25qHnyhlGyGtXS+s3ek2tB9hF\nPrkJiMz+SnZiBq/CuHlyrQFaID7zX+cId/dqJB4t8HoFV0259B34RETYN1I1\nYsoYBe5z5WzVyCsgg4CT4gKFL+mmCPzGfloPQyD1hOZeZ/acV6NmQ8rkGx/2\nxbfMTAH3fz0AifdKufx16T48c6pZ9jE2TlzR6gOoFW+2XM05eTxi1bayFGMa\nB/BANMQTp8nCAC9Bq/jEJCTdQh/JjXAL8e+5QQeAhHmO6cExgx8UxK99H3kC\np/x7uIX0Ql19WJLjRpvFGc70ncO/9xS0AvCtGtltXKhgyxwymY5o+aEOUgkt\nRsOcuvkI2e+sY+wtcWgd/c4dXc+nDYtzOR9hoBT8S91214znyMWLBHtKEl45\n57YXCVijlFKuvK/0Fmi9e7JX6O68BCbFtxXjY3kb6rfSLAvr1/S3zzAdDJmE\noxFtYSRXyeUEeTdfmVlVs3DndeVy9BOGTp2cMR08GxjQB9PMvx6q3y6MoR9n\nrTzAfnz55txcIn3LvnbmD42i5TWvhyNGkFba2H/RQNJ1nukmtCZvCJ5Rlpbn\nITc/\r\n=m8m2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"https://github.com/observablehq/notebook-stdlib.git","type":"git"},"description":"The Observable notebook standard library.","directories":{},"licenseText":"Copyright 2018 Observable, Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any purpose\nwith or without fee is hereby granted, provided that the above copyright notice\nand this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\nOF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n","dependencies":{"esm":"^3.0.5","d3-require":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^4.12.1","rollup":"^0.52.0","tape-await":"0.1.0","rollup-plugin-uglify":"^3.0.0","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.0.2_1527689369082_0.31861501049455754","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@observablehq/notebook-stdlib","version":"1.1.0","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.1.0","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"8ceafb3ecdc7e80ea4f18261c35f495e8bb0e2bb","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.1.0.tgz","fileCount":58,"integrity":"sha512-XJSGg3/N9zAT1QcvPmMKaTj+5QiQPVXROgF/tqM807TIH/Nplxl6MEvKG58FSZkmn0uOjvXTKCGKjNziuRAL2g==","signatures":[{"sig":"MEYCIQCToJmvFrEhx3TrdavQ7PjAIrKdnKC3TPQYxFndiV2udAIhAOo6oCy/pRQegBuG2cDwrw2ItdYSaiHUNw5AEmDh72bj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFuqBCRA9TVsSAnZWagAAC68P/A5fDM2/HbyxZObgayih\nTH5QimERUdiO1yEUbmQLr41Hm6k+axi2y5sWZglZRGNIgFd7mKJLIj582ggM\n2aIDMDm3mYQU/Gyu9RcnNosg2zi7PqvxVjCwPZJic1PY0Nwxg+dGAZS3ZONq\n6A+85t1rQDH8V1A35WqWE9sJenM/k/4PQg0jfu35yDaRVL5i951cuuC4vtcO\nvI/x0JOnJHIvkYcmBhp3hc4I00e7K7udlTYt76CpGNJuj9buu7UAWNWxj/Pd\nf/xCpNebwkjEASPX/YsgktV9/WvQ/J3wA1N4/g/GEgQnG9xi79Z6CwQoz2jX\n8OrHFPRwgno4GD/H/nxm8r4hFy21tqSq675WvX3ioEJqk+wfKaWg+Hn/UHDm\nkzO22CbwPTMqLvyfdqyLhRqIx+W9Gk/cHmqSjpKtutX+IgprPiDznah4B4F1\neIYQMR5K3nAOkKKkmJOBcKGLnb2V9FFa/+QX+Ct42yean7VshUOnPQMlhZT/\nPTsWWWiUchCnJywhDtIURwyJMtHRgOmILw0R3eGngCPdktm/MTvp/kXiErFT\n75RbNUF4GCF7t1u8nrEvtEX2QOJZmj6m3SMHyjDaNzkqzZlvbOPaeYeAQ1Fo\n5/DNDsh+RPQk5vOtZzMhstyyf21JwST97M+6QSawBHlgycnEOEdfy6B75jmS\nfY53\r\n=JJx2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"https://github.com/observablehq/notebook-stdlib.git","type":"git"},"description":"The Observable notebook standard library.","directories":{},"licenseText":"Copyright 2018 Observable, Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any purpose\nwith or without fee is hereby granted, provided that the above copyright notice\nand this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\nOF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n","dependencies":{"esm":"^3.0.5","d3-require":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^4.12.1","rollup":"^0.52.0","tape-await":"0.1.0","rollup-plugin-uglify":"^3.0.0","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.1.0_1528228478506_0.9821418490256226","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@observablehq/notebook-stdlib","version":"1.1.1","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.1.1","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"5ec337f927704f0a4f296edf213564e88a3dbcb0","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.1.1.tgz","fileCount":58,"integrity":"sha512-yEmR9aK5CmSJwOnIhg41SYumqau8D2T63wwBF5DcGSN+hKEGW2LgbKGVM8h/zTZds1w8Ob/C41DSsUpCjLf4wg==","signatures":[{"sig":"MEQCIDG5RPrYbJu5v/bjDzVCD2D1aHnvUJQ9YA2Hu6wlnjJOAiBPFEgUg58dWsPnJxO8CgjeU0Q7MQIZdahPTJ43GHwsIg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78007},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"https://github.com/observablehq/notebook-stdlib.git","type":"git"},"description":"The Observable notebook standard library.","directories":{},"licenseText":"Copyright 2018 Observable, Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any purpose\nwith or without fee is hereby granted, provided that the above copyright notice\nand this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\nOF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n","dependencies":{"esm":"^3.0.5","d3-require":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^4.12.1","rollup":"^0.52.0","tape-await":"0.1.0","rollup-plugin-uglify":"^3.0.0","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.1.1_1528833750582_0.2447757613240047","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"@observablehq/notebook-stdlib","version":"1.1.2","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.1.2","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"3badef5d770878a38173d71628e53d89677eeb73","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.1.2.tgz","fileCount":58,"integrity":"sha512-K3a3yiaftcFKr4ShsWZH3ArunrORBNrIFjwDDj6PTgokKX6ENSp00vhEtI9ikDtcajdmDt/+gxHhdpy9N3L16A==","signatures":[{"sig":"MEUCICwvmmd8OM75+2TAI+OB7DZgoJsVaOTNowI3ERFipPFnAiEApFRoaFTbCfMcm2LwgX5etHswGRwmF6GfFqp+N+CoVGI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78071},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"https://github.com/observablehq/notebook-stdlib.git","type":"git"},"description":"The Observable notebook standard library.","directories":{},"licenseText":"Copyright 2018 Observable, Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any purpose\nwith or without fee is hereby granted, provided that the above copyright notice\nand this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\nOF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n","dependencies":{"esm":"^3.0.5","d3-require":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^4.12.1","rollup":"^0.52.0","tape-await":"0.1.0","rollup-plugin-uglify":"^3.0.0","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.1.2_1528949937732_0.8099823156390022","host":"s3://npm-registry-packages"}},"1.1.3":{"name":"@observablehq/notebook-stdlib","version":"1.1.3","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.1.3","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"homepage":"https://github.com/observablehq/notebook-stdlib#readme","bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"c15ffc617b147b603d34482d4ef1830e6834d4b7","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.1.3.tgz","fileCount":52,"integrity":"sha512-OfvBd1WgCNu0bJaaxVFHGNZ3vrxtQuxXYj0Fz56osR5uwl7+SHrBSWrO8TBfcGiYbkKB7lpl38YvKXDfdGLNqg==","signatures":[{"sig":"MEYCIQCB9vOrxgV7olIj+PZO6/5bFy9UcNfezEkNzfC/dnMVxQIhAONsRWniyhobu+5SBlqbey+aI/LHY4tvB0s+/ABaH7JY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":129096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdEugCRA9TVsSAnZWagAA81wP/iN/Q24B/YU35IeRA8B5\nmrvMz+vR44xCa43uJ4Ef7GCquvkZQoMsPLP3gMmexH5h6yO1TZp00aLh65KB\nbw1eeAOKMVQ0KZXtD8MkHieEbep6XLH0631GdzhJE1moyykFkFSpHmEQ8s14\nCbE3mQtLX2baUcgBfO28JhZzKuAexZYLcGy/MoY2qEOIzWM8bJeaJdc3j9zB\ndqVJBE9bkoqTEY/FITvTYMhw9AwcITa5DQApCU2P1nYa0EarMGJE2890xpHL\nd81I9TxZmGkR8q2n32AEtuVdgLKztlusxAvkUHafM4SCbeXFlTc4DKLsyYx7\nlgH5vo9mcwf6VMJLcSpsnBTKGfB6rpSC+R5tb8K1Ts9ApMvy+fJsrqKUCtSa\nvx6P/5rrq2fWqf5uPo+eeS44Q0NfFJhfBOEk5F71cHjtrA0EcD1Te6V04Mh2\n7gjh7JTXzpBfrYAelqCNmjm6VXtfVhoMK8yAreAYpn/zxcES2BUMZ8htIpXb\niyvywIiK3sq1uHsEGiXMmFLuKWJk8IsO1aXQRQ7E7LRl4ddfr3/Fz3sz++bz\n4TdKv2QyN3/SsdK5Wm3Nr1EOuKCqT3oWutlXfp096zQoGEK60MEu/GKAPfcW\nI8awMv9wkx1Vp8kKMKj5at+QU76fk+pE5W62l95iDtfL4U/vBPrKUAFufI2i\nx7nw\r\n=whCi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","gitHead":"8eee155954fa01ab4c8470bc7dadce885add9061","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"_npmVersion":"6.2.0","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"10.8.0","dependencies":{"esm":"^3.0.5","d3-require":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^5.3.0","rollup":"^0.64.1","tape-await":"0.1.1","rollup-plugin-terser":"^1.0.1","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.1.3_1534348192059_0.774545252900056","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@observablehq/notebook-stdlib","version":"1.2.0","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.2.0","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"homepage":"https://github.com/observablehq/notebook-stdlib#readme","bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"020236de0a1f39e60f021713f01af49fdeeec7c4","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.2.0.tgz","fileCount":52,"integrity":"sha512-FCy2yAcrFlGOH0NXrFqFt1TbXfsQGq54XSkyXkPcX42Xosh9WsXTAIn25geSKmYxlHHsjAiiNXCmzhEk5obbBA==","signatures":[{"sig":"MEQCICQYF8j76P+CE2+SDBLbt/sp81GPr+M3qvA8Kd4VP+m3AiB/uzfND+AjAgMGo+t0JPNd3bNRQHnwmEi70w6pLeoPaQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":129096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdKt7CRA9TVsSAnZWagAAEVgP/2lhs/rEL571GWsFY+j6\nSIfKsqiulbhvTAj5dMr2V8vNja8mhd2HrfOS8p7/QEDb5TJrRwfsqq0cWRwB\nW1u4B8dx9RyqjB3zLE6ZD9WNyONmOoaH305Ca7bpUJnj/bYnHo9Ut2w7Gln0\nBIoJWT29owsGhwKDQuzNMFhQLOm+C3q7KSizWhdii1NBgJpqAJRds5ttn5GC\nzmSWQo0TTPOMF+BVqwSJFGM0VenI3nV/FUvPfvZBDJ/+qVM9S+GPFooa1DVb\neyT9tlue11e7goqAIgnT9l7vL2vT+lDe45ub8UrzdAoo2AzG4kBe4Xwtkfco\nZ8AYfX46PV7dBsbtSDH+c21hVLVnjN+6Da0/FQ++1U/GR262bods9KPjDjoh\nRpkgSTa7erznLEYCXHJHUGiwJM71+UYL85heg3sVhJys6/Dw1YwnYk6prmqD\nZqY+gOnlWIwBUZRgxUuhz/tamHoslEzqNw9tGzqHsEPouSfdZd5t41sP8T7z\ng4jN6jfd2ETjxKWl4S8lMPBnhSo6ntusRHzf8YsNO3SlA3ozbog+iUyBR3mD\nU5CR0NeZY4p+271Fh8DQrSRlfLxutzvIa7I8wQbNKvJXrtHr2G94tcxTbP79\n7Xy0GhEPT1oQpo8JWg3qWTD8+BLq7TeD3RUKi9IYna9wsaEbM9OKesfn4j6a\nHVGY\r\n=+Mxm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","gitHead":"928635ce206e92347e4877585547e6d693b7dad4","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"tmcw","email":"tom@macwright.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"_npmVersion":"6.3.0","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"10.8.0","dependencies":{"esm":"^3.0.5","d3-require":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^5.3.0","rollup":"^0.64.1","tape-await":"0.1.1","rollup-plugin-terser":"^1.0.1","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.2.0_1534372730387_0.056262500091706524","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"@observablehq/notebook-stdlib","version":"1.2.1","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.2.1","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"homepage":"https://github.com/observablehq/notebook-stdlib#readme","bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"6f1706d4ad974f93b3c6c3ce6013631256db298c","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.2.1.tgz","fileCount":52,"integrity":"sha512-Y0ZAX3J6F1YU0apr5r+uQA8ByydE1Obpc1Iu9yZeG/FsuOQMMwLaYW0u5ACgyE4wET4HOgSZlsn97zTwbIrl1w==","signatures":[{"sig":"MEQCIEzsgRtF2Uo7tifX6yfn//JB5w2qSgEV4GquzBYuUastAiBTfeIrB68DORVvqtpJ5Cy20Bx3nJBoU6//e3nbfobVZg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":129096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdLBACRA9TVsSAnZWagAAgJkP/jkswN3WbrH2KbxyGZyj\nOB2/3Fip03bDL0IXhERr355ReEj2YEQqeLJNYhWo61n0MqpOKGmeMlZNYi0A\nIcUV47YXyWAm1RQZsx9lLWcuSac4A0fNB0XQA4qBoBYJ7PHv/k+hKgVqr/qm\nC7Q+Coc+eM/iaymtyoe2lx0n9xPdSFO13AKsOV3P8qkPBaecqGu97LzhCj4H\nb+afM2U/kUYiBTpQAy6Ms+aPCTidZ7vCSUvxgBfrxI9mRUYd4W2qI6YdEvRh\nVUrG4XRyLzifga2d6vmNcHBbX92ga1mhtV8pnyBpf0Ix90qD7Lk2snebrF9g\nK+E0UYnceuPk5L9kGABQPpNjWk15yc1m5CqDaKIHkxGnGvueRPS5l8+6D/Z6\nK8bL4mhhxdEr/ECASr9Wwa81iGJWQkxvBqC/kYt0pxaLtEw/TBwrgcs6aBgL\nGlHn6MDVCuqiMpUHbqMZQxxIlfnXolUCAzSC3Yu7CDuJtEQ4xraHq0dxd0pX\nNwuOfDBP6kktWFDxQH8vKE5l449tbnpo+UgK9LA9DDoIB6uLeiEMqX205QFz\nN9iPRg9K/AxeNsCpwXEG06fSJ4tdgpCK1cvWJ5ZVfUU5NgQ4TdvI/36Kg2vW\nPNtW+5OBE3NGfkpcTQ76t9evfA+/DG2yWVQOpIp5C0VltmAp7jH04i6fMiDr\nTrQ1\r\n=IgFA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","gitHead":"2ae0b9c7d37e1ed27cc1a4b6d3165a97f8fbed3a","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"tmcw","email":"tom@macwright.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"_npmVersion":"6.3.0","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"10.8.0","dependencies":{"esm":"^3.0.5","d3-require":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^11.6.2","eslint":"^5.3.0","rollup":"^0.64.1","tape-await":"0.1.1","rollup-plugin-terser":"^1.0.1","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.2.1_1534373951305_0.825473543313449","host":"s3://npm-registry-packages"}},"1.2.2":{"name":"@observablehq/notebook-stdlib","version":"1.2.2","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.2.2","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"homepage":"https://github.com/observablehq/notebook-stdlib#readme","bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"4cbdcc6eb6fd836c8999246358b1ae0a5b99a76c","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.2.2.tgz","fileCount":52,"integrity":"sha512-wWNUXB9Rtl0N9Tjp0RDuuGk3cOl1P68IgmtK0SvK6pAoA318vvdMuFlzcuME4ZAEqNbrLhbmHCIusUHQkS1Ipg==","signatures":[{"sig":"MEQCIFWVBhXHyKe1uNPialMmLSvEP+wnniuD7BUN45lY+xZWAiBi6eZ87IcbeJaBa3uQZKNEF0NztUC7ugUaL0ptNYG/LQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":128384,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkGF7CRA9TVsSAnZWagAArAkP/Rz1ITb1yQhOJcT4TnRG\n7Ssq2Y7JVqdIuGxN/YcIb0DWUZtd9g2LcI8zz+4BdWuGVp6UV5dU8FKnu1uC\nAhWyZ3tA836Rs8vbC/px/L9UrtX/hAXJRm8QEq9u1kqGfLNZTxyYu9W03Qce\nq5FWWijRp2FMC+AkeGOVylJ/qGHJJXJYdr3bSUyJAnwvaj9MTZbFo0kGLvje\nboOfUEM2sGVmh0Sr9xrMIsssXFAzOgTgjmOVerCBy9EQjIUYREqAg1LDyw7l\nxjt3dsIOH/3YFskXeBIolEnb5zqqhknPNeqMYmH96sHnvGqZyhoOiq35R62T\nqHk39BCUAN0AE9u2v0CxD4/yzlHeXrwC68UceUG7j4GHSKjjhoJtg0AmJKq5\ntB9FifYJU7MejXM5IJp7XvhZ8PgMM57yYglC9JRTtcJqfPmmJkyLEALcMpTs\nl0SlF8dfikKXYmLLGsJXXAtKVeQ7EKK0ucV0bU2o2ELex8jJvSHls192LmBN\n/46eyXMzqu39qLW64M9m3dpdEP/LE+O+DDg0c9nGwBLwlkrVF90RtwiyxiEl\nsSj8OvK7ZEPD1EaHPxz6ddqpSL4wQvIaOXTg2c2m+vZ9UDh4O9zky5aHhm0X\n4Wpo/xID014jG17tz47+cdMzVoxnnwC+TsAPEVLv2csQ+FBGHuchp/v9/uOv\nSLzU\r\n=fyIa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","gitHead":"5f4ce7e4a883d01b032ea429bd4e897fbd985470","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"_npmVersion":"6.2.0","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"10.8.0","dependencies":{"esm":"^3.0.5","d3-require":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^12.0.0","eslint":"^5.3.0","rollup":"^0.65.1","tape-await":"0.1.1","rollup-plugin-terser":"^2.0.2","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.2.2_1536188795017_0.9948641232491489","host":"s3://npm-registry-packages"}},"1.2.3":{"name":"@observablehq/notebook-stdlib","version":"1.2.3","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.2.3","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"homepage":"https://github.com/observablehq/notebook-stdlib#readme","bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"2e5948735b5959985962481f7c8150e32e1cfcd6","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.2.3.tgz","fileCount":52,"integrity":"sha512-+GPI9G8UT55sVk1tKxIThM5DWNWaToIoESXDS8Xr2v1qre4ArGLnFA02Jhjc9I+p0L6SJIFNV6f8KVuwoERTZg==","signatures":[{"sig":"MEUCIQCcUlQX/+owaYw7a+ODnvosJhv2VqGcYCavWH8wWYf5TgIgMDDX4WHZD6BevGlBXIM8MsrEw90rpxYj19jnYBk4fZE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":128382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkGm6CRA9TVsSAnZWagAA20oQAKAQuSIMhzceR7JY4eC+\njML3saYTFjB8Wjxz4pstmfKgJ1g+9PK3IxaY0Z76M910hA9dNpi+c3hwo1IR\nNQUHOVRjYnwxYywqz+LOLPhvC/R7voJ4WlTCwLANOWfD55QoBSnfoMApBB2D\nmAe6Sk8bRifg1c1BAjZ1lkRsZLAoR9QSF/VLsJeha8Ma3F90cYKEG8YeWAzG\nc3z9UAcFQOfVO0CeS2+d0cWMxxjfzuWY8uWQ1EHnD2hxnvfmiYgePXixZvOO\nYaR+MgEpPmmNTEpnTYoIiONhaEq5xRsj0pKt3xMBtcknDWgK+E6vOTH2wcW9\nOJJQHXdxZibg8BISWcvwAem1tECv49yRKoQjOiV0wAaOuwN5EKMwqUGqu9/L\n9qHw2mh0H/Sl0zAPNlp5GqPcmCWTdkpZKpMziI0oGBj2kkTx5Eij/rrTz78B\nAdwjY/bFU1XMJfzA42bxs6rkeGn0O4JHhFDDfhBSyf0yuqoig4TYdIYT6IpZ\nEGaeNHz+RYkpZN8YMLEc7A850ur5DGAa6Lh66x6CkMbwmNYCfBwFBmnMd9zm\nlkjxzaUx9Z8gX6JWMlCUhmCzEzjpARRpIveyxdsSLA+/4LwPgdlT25kp3dX/\niZRFKvqPWJXVBigp8jLhmy6aAh5qxAjpsobj0MkX4cGvCpNnkzWeYNvLQsz0\nKggI\r\n=fFMs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","gitHead":"4fafe388b1e9dc621d9eeeca34af9c95a21962c1","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"mbostock","email":"mike@ocks.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"_npmVersion":"6.2.0","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"10.8.0","dependencies":{"esm":"^3.0.5","d3-require":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^12.0.0","eslint":"^5.3.0","rollup":"^0.65.1","tape-await":"0.1.1","rollup-plugin-terser":"^2.0.2","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.2.3_1536190906003_0.22931582889007762","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@observablehq/notebook-stdlib","version":"1.3.0","author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/notebook-stdlib@1.3.0","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"homepage":"https://github.com/observablehq/notebook-stdlib#readme","bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"esm":{"cjs":true,"mode":"all"},"dist":{"shasum":"daf2b51e8e70f0f04919b30a000e880df9040aad","tarball":"https://registry.npmjs.org/@observablehq/notebook-stdlib/-/notebook-stdlib-1.3.0.tgz","fileCount":52,"integrity":"sha512-rAPCuZ6ZJboY/dm1sWNKtp11j4AC/bYF1Y0SMvuwyggAORBvcJh2SpdGdbo5zl0zEdARDOh9pmTPmsnF4A9btQ==","signatures":[{"sig":"MEYCIQD3eWvlbHyEFd9ygg2T88X6i6Mb2Xm/Sq11od4rofPoRAIhAJ6x6A1NirndHDgmEnQsRm/+5h5/nokgpURQ3xHZC9zk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":129044,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2T+1CRA9TVsSAnZWagAAMLcP/1q+gYFvojoYyYYm/iQg\nrMo7MqoUV2+YKPXoxOIdG2c3WcT5Q9sFPR+8BFlvHDIrPDRfuZuDxL4nuJtl\nFNrKAeSPHlDEu/aVd08DKDFg4fcEenw1vEov5WoY0UIq7r2DnIbVv2mH9myf\nvOS5YHIzj1QoolVcOOC2s9VcGxWyLMVrLvgUoZRdpofeWdKBeZASbJgrC4Gx\nmIVB2P87DwZyDsO9HOQZieaP2YSwBIFAbtTsKoPl0iwEPg6hW2uQlXzQdpZz\nE5zv74h9UXo/0jM9EpN3MosV+TuObBZrL+cxcRKmKajOWXi9LB/KYgFfS8ZQ\neiCzoTOWbY8OtTZnb9tHoS3rqOjXsvffOvfNnz95QWQhTgDmF45lsFwTqfgH\nwItIxq3T++NAxoI5Sq/Q6uyAvxldI6tQAbmB0ZSOKh3MBi9C/NIT/fgANRMh\nZ972erIeKV3bQxmpMa39MJBtVc6GpVk/Xqg0z7ewHqEzDPfT8OfmrA02At7K\nvuI7WVFXFVROQZUZzgG4G+o+LefrpzYD1kdJ/cGvx32yJgWhARNN+OQdlatJ\nmgaQdsUcg/BgRGTzacWGyXEAJ1kf1rC4SHeg/vfoRectK2lLNjWxyg09oADi\nFkNO+XM1chm6uS7gL3fUEGQeQigTEDp7a1fVk82bPrNiq00Ys49otS5RmDz/\nXLdL\r\n=mejy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/notebook-stdlib.umd.js","module":"dist/notebook-stdlib.js","gitHead":"9d4b75e4bdd82fb2dec77e3e1b22475fcd53303b","scripts":{"test":"tape -r esm 'test/**/*-test.js'","prepare":"rollup -c","precommit":"eslint . && yarn test","postpublish":"git push && git push --tags"},"_npmUser":{"name":"tmcw","email":"tom@macwright.org"},"deprecated":"renamed to @observablehq/stdlib","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"_npmVersion":"6.4.1","description":"The Observable notebook standard library.","directories":{},"_nodeVersion":"10.8.0","dependencies":{"esm":"^3.0.5","d3-require":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.9.0","husky":"^0.14.3","jsdom":"^12.0.0","eslint":"^5.3.0","rollup":"^0.65.1","tape-await":"0.1.1","rollup-plugin-terser":"^2.0.2","rollup-plugin-node-resolve":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notebook-stdlib_1.3.0_1543354691799_0.5563810875349458","host":"s3://npm-registry-packages"}}},"time":{"created":"2018-01-31T18:21:15.929Z","modified":"2026-04-06T17:49:41.252Z","0.0.1":"2018-01-31T18:21:15.929Z","0.0.2":"2018-05-08T18:22:38.747Z","1.0.0":"2018-05-15T23:04:34.572Z","1.0.1":"2018-05-23T18:18:37.299Z","1.0.2":"2018-05-30T14:09:29.159Z","1.1.0":"2018-06-05T19:54:38.615Z","1.1.1":"2018-06-12T20:02:30.652Z","1.1.2":"2018-06-14T04:18:57.802Z","1.1.3":"2018-08-15T15:49:52.113Z","1.2.0":"2018-08-15T22:38:50.494Z","1.2.1":"2018-08-15T22:59:11.399Z","1.2.2":"2018-09-05T23:06:35.195Z","1.2.3":"2018-09-05T23:41:46.269Z","1.3.0":"2018-11-27T21:38:12.036Z"},"bugs":{"url":"https://github.com/observablehq/notebook-stdlib/issues"},"author":{"url":"https://observablehq.com","name":"Observable, Inc."},"license":"ISC","homepage":"https://github.com/observablehq/notebook-stdlib#readme","repository":{"url":"git+https://github.com/observablehq/notebook-stdlib.git","type":"git"},"description":"The Observable notebook standard library.","maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"visnup@gmail.com","name":"visnup"},{"email":"fil@rezo.net","name":"recifs"},{"email":"tophtucker@gmail.com","name":"tophtucker"}],"readme":"# @observablehq/notebook-stdlib\n\nThe Observable notebook standard library.\n\nFor examples, see https://beta.observablehq.com/@mbostock/standard-library.\n\n## API Reference\n\n* [DOM](#dom) - create HTML and SVG elements.\n* [Files](#files) - read local files into memory.\n* [Generators](#generators) - utilities for generators and iterators.\n* [Promises](#promises) - utilities for promises.\n* [require](#require) - load third-party libraries.\n* [html](#html) - render HTML.\n* [md](#markdown) - render Markdown.\n* [svg](#svg) - render SVG.\n* [tex](#tex) - render LaTeX.\n* [now](#now) - the current value of Date.now.\n* [width](#width) - the current page width.\n* [invalidation](#invalidation) - dispose resources.\n* [visibility](#visibility) - wait for visibility.\n\n### DOM\n\n<a href=\"#DOM_canvas\" name=\"DOM_canvas\">#</a> DOM.<b>canvas</b>(<i>width</i>, <i>height</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/canvas.js \"Source\")\n\nReturns a new canvas element with the specified *width* and *height*. For example, to create a 960×500 canvas:\n\n```js\nDOM.canvas(960, 500)\n```\n\nThis is equivalent to using the [html](#html) tagged template literal:\n\n```js\nhtml`<canvas width=960 height=500>`\n```\n\nIf you are using [2D Canvas](https://www.w3.org/TR/2dcontext/) (rather than [WebGL](https://webglfundamentals.org/)), you should use [DOM.context2d](#DOM_context2d) instead of DOM.canvas for automatic pixel density scaling.\n\n<a href=\"#DOM_context2d\" name=\"DOM_context2d\">#</a> DOM.<b>context2d</b>(<i>width</i>, <i>height</i>[, <i>dpi</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/context2d.js \"Source\")\n\nReturns a new canvas context with the specified *width* and *height* and the specified device pixel ratio *dpi*. If *dpi* is not specified, it defaults to [*window*.devicePixelRatio](https://developer.mozilla.org/docs/Web/API/Window/devicePixelRatio). To access the context’s canvas, use [*context*.canvas](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/canvas). For example, to create a 960×500 canvas:\n\n```js\n{\n  const context = DOM.context2d(960, 500);\n  return context.canvas;\n}\n```\n\nIf you are using [WebGL](https://webglfundamentals.org/) (rather than [2D Canvas](https://www.w3.org/TR/2dcontext/)), you should use [DOM.canvas](#DOM_canvas) or  the [html](#html) tagged template literal instead of DOM.context2d.\n\n<a href=\"#DOM_download\" name=\"DOM_download\">#</a> DOM.<b>download</b>(<i>object</i>\\[, <i>name</i>\\]\\[, <i>value</i>\\]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/download.js \"Source\")\n\nReturns an anchor element containing a button that when clicked will download a file representing the specified *object*. The *object* should be anything supported by [URL.createObjectURL](https://developer.mozilla.org/docs/Web/API/URL/createObjectURL) such as a [file](https://developer.mozilla.org/docs/Web/API/File) or a [blob](https://developer.mozilla.org/docs/Web/API/Blob). For example, to create a button to download a Canvas element as a PNG:\n\n```js\nDOM.download(await new Promise(resolve => canvas.toBlob(resolve)))\n```\n\n<a href=\"#DOM_element\" name=\"DOM_element\">#</a> DOM.<b>element</b>(<i>name</i>[, <i>attributes</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/element.js \"Source\")\n\nReturns a new element with the specified *name*. For example, to create an empty H1 element:\n\n```js\nDOM.element(\"h1\")\n```\n\nThis is equivalent to using the [html](#html) tagged template literal:\n\n```js\nhtml`<h1>`\n```\n\nIf *attributes* is specified, sets any attributes in the specified object before returning the new element. For example:\n\n```js\nDOM.element(\"a\", {target: \"_blank\"})\n```\n\nThis is equivalent to using the [html](#html) tagged template literal:\n\n```js\nhtml`<a target=_blank>`\n```\n\nIf the *name* has the prefix `svg:`, `math:` or `xhtml:`, uses [*document*.createElementNS](https://developer.mozilla.org/docs/Web/API/Document/createElementNS) instead of [*document*.createElement](https://developer.mozilla.org/docs/Web/API/Document/createElement). For example, to create an empty SVG element (see also [DOM.svg](#DOM_svg)):\n\n```js\nDOM.element(\"svg:svg\")\n```\n\nThis is equivalent to using the [svg](#svg) (or [html](#html)) tagged template literal:\n\n```js\nsvg`<svg>`\n```\n\nIn general, you probably want to use the [html](#html) or [svg](#svg) tagged template literal instead of DOM.element.\n\n<a href=\"#DOM_input\" name=\"DOM_input\">#</a> DOM.<b>input</b>([<i>type</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/input.js \"Source\")\n\nReturns a new input element with the specified *type*. If *type* is not specified or null, a text input is created. For example, to create a new file input:\n\n```js\nDOM.input(\"file\")\n```\n\nThis is equivalent to using the [html](#html) tagged template literal:\n\n```js\nhtml`<input type=file>`\n```\n\nIn general, you probably want to use the [html](#html) tagged template literal instead of DOM.input.\n\n<a href=\"#DOM_range\" name=\"DOM_range\">#</a> DOM.<b>range</b>(\\[<i>min</i>, \\]\\[<i>max</i>\\]\\[, <i>step</i>\\]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/range.js \"Source\")\n\nReturns a new range input element. (See also [DOM.input](#input).) If *max* is specified, sets the maximum value of the range to the specified number; if *max* is not specified or null, sets the maximum value of the range to 1. If *min* is specified, sets the minimum value of the range to the specified number; if *min* is not specified or null, sets the minimum value of the range to 0. If *step* is specified, sets the step value of the range to the specified number; if *step* is not specified or null, sets the step value of the range to `any`. For example, to create a slider that ranges the integers from -180 to +180, inclusive:\n\n```js\nDOM.range(-180, 180, 1)\n```\n\nThis is equivalent to using the [html](#html) tagged template literal:\n\n```js\nhtml`<input type=range min=-180 max=180 step=1>`\n```\n\nIn general, you probably want to use the [html](#html) tagged template literal instead of DOM.input.\n\n<a href=\"#DOM_select\" name=\"DOM_select\">#</a> DOM.<b>select</b>(<i>values</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/select.js \"Source\")\n\nReturns a new select element with an option for each string in the specified *values* array. For example, to create a drop-down menu of three colors:\n\n```js\nDOM.select([\"red\", \"green\", \"blue\"])\n```\n\nThis is equivalent to using the [html](#html) tagged template literal:\n\n```js\nhtml`<select>\n  <option value=\"red\">red</option>\n  <option value=\"green\">green</option>\n  <option value=\"blue\">blue</option>\n</select>`\n```\n\nOr, from an array of data:\n\n```js\nhtml`<select>${colors.map(color => `\n  <option value=\"${color}\">${color}</option>`)}\n</select>`\n```\n\nIn general, you probably want to use the [html](#html) tagged template literal instead of DOM.select, particularly if you want greater control of the display, such as to customize the displayed option labels.\n\n<a href=\"#DOM_svg\" name=\"DOM_svg\">#</a> DOM.<b>svg</b>(<i>width</i>, <i>height</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/svg.js \"Source\")\n\nReturns a new SVG element with the specified *width* and *height*. For example, to create a 960×500 blank SVG:\n\n```js\nDOM.svg(960, 500)\n```\n\nThis is equivalent to using the [svg](#svg) tagged template literal:\n\n```js\nsvg`<svg width=960 height=500 viewBox=\"0,0,960,500\">`\n```\n\nTo create responsive SVG, set the max-width to 100% and the height to auto:\n\n```js\nsvg`<svg\n  width=960\n  height=500\n  viewBox=\"0,0,960,500\"\n  style=\"max-width:100%;height:auto;\"\n>`\n```\n\nIn general, you probably want to use the [html](#html) or [svg](#svg) tagged template literal instead of DOM.svg.\n\n<a href=\"#DOM_text\" name=\"DOM_text\">#</a> DOM.<b>text</b>(<i>string</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/text.js \"Source\")\n\nReturns a new text node with the specified *string* value. For example, to say hello:\n\n```js\nDOM.text(\"Hello, world!\")\n```\n\nThis is equivalent to using the [html](#html) tagged template literal:\n\n\n```js\nhtml`Hello, world!`\n```\n\nIn general, you probably want to use the [html](#html) tagged template literal instead of DOM.text.\n\n<a href=\"#DOM_uid\" name=\"DOM_uid\">#</a> DOM.<b>uid</b>([<i>name</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/dom/uid.js \"Source\")\n\nReturns a new unique *identifier*. If *name* is specified, the *identifier*.id will be derived from the specified *name*, which may be useful for debugging. If DOM.uid is called repeatedly with the same *name*, every returned *identifier* is still unique (that is, different). Identifiers are useful in SVG: use *identifier*.href for IRI references, such as the [xlink:href](https://www.w3.org/TR/SVG/animate.html#HrefAttribute) attribute; use *identifier*.toString for functional notation, such as the [clip-path](https://www.w3.org/TR/SVG/masking.html#ClipPathProperty) presentation attribute.\n\nFor example, to [clip the Mona Lisa](https://beta.observablehq.com/@mbostock/svg-clipping-test) to a circle of radius 320px:\n\n```js\n{\n  const clip = DOM.uid(\"clip\");\n  return svg`<svg width=\"640\" height=\"640\">\n  <defs>\n    <clipPath id=\"${clip.id}\">\n      <circle cx=\"320\" cy=\"320\" r=\"320\"></circle>\n    </clipPath>\n  </defs>\n  <image\n    clip-path=\"${clip}\"\n    width=\"640\" height=\"640\"\n    preserveAspectRatio=\"xMidYMin slice\"\n    xlink:href=\"https://gist.githubusercontent.com/mbostock/9511ae067889eefa5537eedcbbf87dab/raw/944b6e5fe8dd535d6381b93d88bf4a854dac53d4/mona-lisa.jpg\"\n  ></image>\n</svg>`;\n}\n```\n\nThe use of DOM.uid is strongly recommended over hand-coding as it ensures that your identifiers are still unique if your code is imported into another notebook. Because *identifier*.href and *identifier*.toString return absolute rather than local IRIs, it also works well in conjunction with a notebook’s [base URL](https://developer.mozilla.org/docs/Web/HTML/Element/base).\n\n### Files\n\nSee [Reading Local Files](https://beta.observablehq.com/@mbostock/reading-local-files) for examples.\n\n<a href=\"#Files_buffer\" name=\"Files_buffer\">#</a> Files.<b>buffer</b>(<i>file</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/files/buffer.js \"Source\")\n\nReads the specified *file*, returning a promise of the ArrayBuffer yielded by [*fileReader*.readAsArrayBuffer](https://developer.mozilla.org/docs/Web/API/FileReader/readAsArrayBuffer). This is useful for reading binary files, such as shapefiles and ZIP archives.\n\n<a href=\"#Files_text\" name=\"Files_text\">#</a> Files.<b>text</b>(<i>file</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/files/text.js \"Source\")\n\nReads the specified *file*, returning a promise of the string yielded by [*fileReader*.readAsText](https://developer.mozilla.org/docs/Web/API/FileReader/readAsText). This is useful for reading text files, such as plain text, CSV, Markdown and HTML.\n\n<a href=\"#Files_url\" name=\"Files_url\">#</a> Files.<b>url</b>(<i>file</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/files/url.js \"Source\")\n\nReads the specified *file*, returning a promise of the data URL yielded by [*fileReader*.readAsDataURL](https://developer.mozilla.org/docs/Web/API/FileReader/readAsDataURL). This is useful for reading a file into memory, represented as a data URL. For example, to display a local file as an image:\n\n```js\nFiles.url(file).then(url => {\n  var image = new Image;\n  image.src = url;\n  return image;\n})\n```\n\nA data URL may be significantly less efficient than [URL.createObjectURL](https://developer.mozilla.org/docs/Web/API/URL/createObjectURL) method for large files. For example:\n\n```js\n{\n  const image = new Image;\n  image.src = URL.createObjectURL(file);\n  invalidation.then(() => URL.revokeObjectURL(image.src));\n  return image;\n}\n```\n\n### Generators\n\n<a href=\"#Generators_disposable\" name=\"Generators_disposable\">#</a> Generators.<b>disposable</b>(<i>value</i>, <i>dispose</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/disposable.js \"Source\")\n\nReturns a new generator that yields the specified *value* exactly once. The [*generator*.return](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator/return) method of the generator will call the specified *dispose* function, passing in the specified *value*. When this generator is the return value of a cell, this allows resources associated with the specified *value* to be disposed automatically when a cell is re-evaluated: *generator*.return is called by the Observable runtime on invalidation.  For example, to define a cell that creates a self-disposing [Tensor](https://js.tensorflow.org/):\n\n```js\nx = Generators.disposable(tf.tensor2d([[0.0, 2.0], [4.0, 6.0]]), x => x.dispose())\n```\n\nSee also [invalidation](#invalidation).\n\n<a href=\"#Generators_filter\" name=\"Generators_filter\">#</a> Generators.<b>filter</b>(<i>iterator</i>, <i>test</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/filter.js \"Source\")\n\nReturns a generator that yields a subset of values from the specified *iterator*, if and only if the specified *test* function returns truthy for the given value. The *test* function is invoked with the current value from the *iterator* and the current index, starting at 0 and increasing by one. For example, to yield only odd integers in [0, 100]:\n\n```js\nx = Generators.filter(Generators.range(100), x => x & 1)\n```\n\nThis method assumes that the specified *iterator* is synchronous; if the *iterator* yields a promise, this method does not wait for the promise to resolve before continuing. If the specified *iterator* is a generator, this method also does not (currently) wrap the specified generator’s [return](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator/return) and [throw](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator/throw) methods.\n\n<a href=\"#Generators_input\" name=\"Generators_input\">#</a> Generators.<b>input</b>(<i>input</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/input.js \"Source\")\n\nReturns a new generator that yields promises to the current value of the specified *input* element; each promise resolves when the *input* element emits an event. (The promise resolves when the event is emitted, even if the value of the input is unchanged.) If the initial value of the *input* is not undefined, the returned generator’s first yielded value is a resolved promise with the initial value of the *input*.\n\nThe type of event that triggers promise resolution depends on the *input*.type as follows:\n\n* For button, submit and checkbox inputs, *click* events.\n* For file inputs, *change* events.\n* For all other types, *input* events.\n\nThe resolved value is likewise dependent on the *input*.type as follows:\n\n* For range and number inputs, *input*.valueAsNumber.\n* For date inputs, *input*.valueAsDate.\n* For checkbox inputs, *input*.checked.\n* For single-file inputs (*input*.multiple is falsey), *input*.files[0].\n* For multi-file inputs (*input*.multiple is truthy), *input*.files.\n* For all other types, *input*.value.\n\nThe specified *input* need not be an HTMLInputElement, but it must support the *target*.addEventListener and *target*.removeEventListener methods of the [EventTarget interface](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener).\n\nGenerators.input is used by Observable’s [viewof operator](https://beta.observablehq.com/@mbostock/a-brief-introduction-to-viewof) to define the current value of a view, and is based on [Generators.observe](#Generators_observe). One often does not use Generators.input directly, but it can be used to define a [generator cell](https://beta.observablehq.com/@mbostock/generator-cells-functions-and-objects) exposing the current value of an input, and you can also read the yielded values by hand. For example, to accumulate the first four values:\n\n```js\n{\n  const values = [];\n  for (const value of Generators.input(element)) {\n    if (values.push(await value) >= 4) {\n      return values;\n    }\n  }\n}\n```\n\nGenerators.input is lossy and may skip values: if more than one event is emitted before the next promise is pulled from the generator (more than once per animation frame), then the next promise returned by the generator will be resolved with the latest *input* value, potentially skipping intermediate values. See [Generators.queue](#Generators_queue) for a non-debouncing generator.\n\n<a href=\"#Generators_map\" name=\"Generators_map\">#</a> Generators.<b>map</b>(<i>iterator</i>, <i>transform</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/map.js \"Source\")\n\nReturns a generator that yields transformed values from the specified *iterator*, applying the specified *transform* function to each value. The *transform* function is invoked with the current value from the *iterator* and the current index, starting at 0 and increasing by one. For example, to yield perfect squares:\n\n```js\nx = Generators.map(Generators.range(100), x => x * x)\n```\n\nThis method assumes that the specified *iterator* is synchronous; if the *iterator* yields a promise, this method does not wait for the promise to resolve before continuing. If the specified *iterator* is a generator, this method also does not (currently) wrap the specified generator’s [return](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator/return) and [throw](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator/throw) methods.\n\n<a href=\"#Generators_observe\" name=\"Generators_observe\">#</a> Generators.<b>observe</b>(<i>initialize</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/observe.js \"Source\")\n\nReturns a generator that yields promises to an observable value, adapting a push-based data source (such as an [Observable](https://github.com/tc39/proposal-observable/blob/master/README.md), an [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) or an [EventTarget](https://developer.mozilla.org/docs/Web/API/EventTarget)) to a pull-based one.\n\nThe specified *initialize* function is invoked before Generators.observe returns, being passed a *change* function; calling *change* triggers the resolution of the current promise with the passed value. The *initialize* function may also return a *dispose* function; this function will be called when the generator is [disposed](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator/return). (See [invalidation](#invalidation).)\n\nFor example, to observe the current value of a text input element, you might say:\n\n```js\nGenerators.observe(change => {\n\n  // An event listener to yield the element’s new value.\n  const inputted = () => change(element.value);\n\n  // Attach the event listener.\n  element.addEventListener(\"input\", inputted);\n\n  // Yield the element’s initial value.\n  change(element.value);\n\n  // Detach the event listener when the generator is disposed.\n  return () => element.removeEventListener(\"input\", inputted);\n})\n```\n\n(See also [Generators.input](#Generators_input).)\n\nGenerators.observe is typically used to define a [generator cell](https://beta.observablehq.com/@mbostock/generator-cells-functions-and-objects), but you can also read the yielded values by hand. For example, to accumulate the first four values:\n\n```js\n{\n  const generator = Generators.observe(…);\n  const values = [];\n  for (const value of generator) {\n    if (values.push(await value) >= 4) {\n      return values;\n    }\n  }\n}\n```\n\nGenerators.observe is lossy and may skip values: if *change* is called more than once before the next promise is pulled from the generator (more than once per animation frame), then the next promise returned by the generator will be resolved with the latest value passed to *change*, potentially skipping intermediate values. See [Generators.queue](#Generators_queue) for a non-debouncing generator.\n\n<a href=\"#Generators_queue\" name=\"Generators_queue\">#</a> Generators.<b>queue</b>(<i>initialize</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/queue.js \"Source\")\n\nReturns a generator that yields promises to an observable value, adapting a push-based data source (such as an [Observable](https://github.com/tc39/proposal-observable/blob/master/README.md), an [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) or an [EventTarget](https://developer.mozilla.org/docs/Web/API/EventTarget)) to a pull-based one. The specified *initialize* function is invoked before Generators.queue returns, being passed a *change* function; calling *change* triggers the resolution of the current promise with the passed value. The *initialize* function may also return a *dispose* function; this function will be called when the generator is [disposed](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator/return). (See [invalidation](#invalidation).)\n\nFor example, to observe the value of a text input element, you might say:\n\n```js\nGenerators.queue(change => {\n\n  // An event listener to yield the element’s new value.\n  const inputted = () => change(element.value);\n\n  // Attach the event listener.\n  element.addEventListener(\"input\", inputted);\n\n  // Yield the element’s initial value.\n  change(element.value);\n\n  // Detach the event listener when the generator is disposed.\n  return () => element.removeEventListener(\"input\", inputted);\n})\n```\n\n(See also [Generators.input](#Generators_input).)\n\nGenerators.queue is typically used to define a [generator cell](https://beta.observablehq.com/@mbostock/generator-cells-functions-and-objects), but you can also read the yielded values by hand. For example, to accumulate the first four values:\n\n```js\n{\n  const generator = Generators.queue(…);\n  const values = [];\n  for (const value of generator) {\n    if (values.push(await value) >= 4) {\n      return values;\n    }\n  }\n}\n```\n\nGenerators.queue is non-lossy and, as a result, may yield “stale” values: if *change* is called more than once before the next promise is pulled from the generator (more than once per animation frame), the passed values are queued in order and the generator will return resolved promises until the queue is empty again. See [Generators.observe](#Generators_observe) for a debouncing generator.\n\n<a href=\"#Generators_range\" name=\"Generators_range\">#</a> Generators.<b>range</b>([<i>start</i>, ]<i>stop</i>[, <i>step</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/range.js \"Source\")\n\nReturns a generator yielding an arithmetic progression, similar to the Python built-in [range](https://docs.python.org/3/library/stdtypes.html#typesseq-range). This method is often used to iterate over a sequence of uniformly-spaced numeric values, such as the indexes of an array or the ticks of a linear scale. (See also [d3.range](https://github.com/d3/d3-array/blob/master/README.md#range).)\n\nFor example, to iterator over the integers from 0 to 100:\n\n```js\ni = {\n  for (const i of Generators.range(0, 100, 1)) {\n    yield i;\n  }\n}\n```\n\nOr more simply:\n\n```js\ni = Generators.range(100)\n```\n\nIf *step* is omitted, it defaults to 1. If *start* is omitted, it defaults to 0. The *stop* value is exclusive; it is not included in the result. If *step* is positive, the last element is the largest *start* + *i* \\* *step* less than *stop*; if *step* is negative, the last element is the smallest *start* + *i* \\* *step* greater than *stop*. If the returned array would contain an infinite number of values, an empty range is returned.\n\nThe arguments are not required to be integers; however, the results are more predictable if they are. The values in the returned array are defined as *start* + *i* \\* *step*, where *i* is an integer from zero to one minus the total number of elements in the returned array. For example:\n\n```js\nGenerators.range(0, 1, 0.2) // 0, 0.2, 0.4, 0.6000000000000001, 0.8\n```\n\nThis unexpected behavior is due to IEEE 754 double-precision floating point, which defines 0.2 * 3 = 0.6000000000000001. Use [d3-format](https://github.com/d3/d3-format) to format numbers for human consumption with appropriate rounding.\n\nLikewise, if the returned array should have a specific length, consider using [*array*.map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map) on an integer range. For example:\n\n```js\n[...Generators.range(0, 1, 1 / 49)] // BAD: returns 50 elements!\n```\n\n```js\n[...Generators.range(49)].map(d => d / 49) // GOOD: returns 49 elements.\n```\n\n\n<a href=\"#Generators_valueAt\" name=\"Generators_valueAt\">#</a> Generators.<b>valueAt</b>(<i>iterator</i>, <i>index</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/valueAt.js \"Source\")\n\nReturns the value from the specified *iterator* at the specified *index*. For example, to return the first element from the iterator:\n\n```js\nfirst = Generators.valueAt(iterator, 0)\n```\n\nThis method assumes that the specified *iterator* is synchronous; if the *iterator* yields a promise, this method does not wait for the promise to resolve before continuing.\n\n<a href=\"#Generators_worker\" name=\"Generators_worker\">#</a> Generators.<b>worker</b>(<i>source</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/generators/worker.js \"Source\")\n\nReturns a new [disposable generator](#Generators_disposable) that yields a [dedicated Worker](https://developer.mozilla.org/docs/Web/API/Web_Workers_API) running the specified JavaScript *source*. For example, to create a worker that echos messages sent to it:\n\n```js\nworker = Generators.worker(`\nonmessage = function({data}) {\n  postMessage({echo: data});\n};\n`)\n```\n\nThe worker will be automatically [terminated](https://developer.mozilla.org/docs/Web/API/Worker/terminate) when [*generator*.return](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator/return) is called.\n\n### Promises\n\n<a href=\"#Promises_delay\" name=\"Promises_delay\">#</a> Promises.<b>delay</b>(<i>duration</i>[, <i>value</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/promises/delay.js \"Source\")\n\nReturns a promise that resolves with the specified *value* after the specified *duration* in milliseconds. For example, to define a cell that increments approximately every second:\n\n```js\ni = {\n  let i = 0;\n  yield i;\n  while (true) {\n    yield Promises.delay(1000, ++i);\n  }\n}\n```\n\nIf you desire precise synchronization, such as a timer that ticks exactly every second, use [Promises.tick](#Promises_tick) instead of Promises.delay.\n\n<a href=\"#Promises_tick\" name=\"Promises_tick\">#</a> Promises.<b>tick</b>(<i>duration</i>[, <i>value</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/promises/tick.js \"Source\")\n\nReturns a promise that resolves with the specified *value* at the next integer multiple of *milliseconds* since the UNIX epoch. This is much like [Promises.delay](#Promises_delay), except it allows promises to be synchronized. For example, to define a cell that increments every second, on the second:\n\n```js\ni = {\n  let i = 0;\n  yield i;\n  while (true) {\n    yield Promises.tick(1000, ++i);\n  }\n}\n```\n\nOr, as an async generator:\n\n```js\ni = {\n  let i = 0;\n  while (true) {\n    yield i++;\n    await Promises.tick(1000);\n  }\n}\n```\n\n<a href=\"#Promises_when\" name=\"Promises_when\">#</a> Promises.<b>when</b>(<i>date</i>[, <i>value</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/promises/when.js \"Source\")\n\nReturns a promise that resolves with the specified *value* at the specified *date*. This method relies on [setTimeout](https://developer.mozilla.org/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), and thus the specified *date* must be no longer than 2,147,483,647 milliseconds (24.9 days) from now.\n\n### Specials\n\n<a href=\"#invalidation\" name=\"invalidation\">#</a> <b>invalidation</b>\n\nA promise that resolves when the current cell is re-evaluated: when the cell’s code changes, when it is run using Shift-Enter, or when a referenced input changes. This promise is typically used to dispose of resources that were allocated by the cell. For example, to abort a fetch if the cell is invalidated:\n\n```js\n{\n  const controller = new AbortController;\n  invalidation.then(() => controller.abort());\n  const response = await fetch(url, {signal: controller.signal});\n  return response.json();\n}\n```\n\nThe invalidation promise is provided by the runtime rather than the standard library because it resolves to a new promise each time a cell is evaluated. See also [Generators.disposable](#Generators_disposable).\n\n<a href=\"#now\" name=\"now\">#</a> <b>now</b> [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/now.js \"Source\")\n\nThe current value of [Date.now](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date/now). For example, to display the current time in Markdown:\n\n```js\nmd`The current time is: ${new Date(now).toISOString()}`\n```\n\n<a href=\"#width\" name=\"width\">#</a> <b>width</b> [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/width.js \"Source\")\n\nThe current width of cells. For example, to make a rounded rectangle in SVG that resizes to fit the page:\n\n```js\nhtml`<svg width=${width} height=200>\n  <rect width=${width} height=200 rx=10 ry=10></rect>\n</svg>`\n```\n\n<a href=\"#visibility\" name=\"visibility\">#</a> <b>visibility</b>([<i>value</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/width.js \"Source\")\n\nReturns a promise that resolves with the specified *value* when this cell is visible in the viewport.\n\n### HTML\n\n<a href=\"#html\" name=\"html\">#</a> <b>html</b>\\`<i>string</i>\\` [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/html.js \"Source\")\n\nReturns the HTML element represented by the specified HTML *string* literal. This function is intended to be used as a [tagged template literal](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals_and_escape_sequences). Leading and trailing whitespace is automatically trimmed. For example, to create an H1 element whose content is “Hello, world!”:\n\n```js\nhtml`<h1>Hello, world!`\n```\n\nIf the resulting HTML fragment is not a single HTML element or node, is it wrapped in a DIV element. For example, this expression:\n\n```js\nhtml`Hello, <b>world</b>!`\n```\n\nIs equivalent to this expression:\n\n```js\nhtml`<div>Hello, <b>world</b>!</div>`\n```\n\nIf an embedded expression is a DOM element, it is embedded in generated HTML. For example, to embed [TeX](#tex) within HTML:\n\n```js\nhtml`I like ${tex`\\KaTeX`} for math.`\n```\n\nIf an embedded expression is an array, the elements of the array are embedded in the generated HTML. For example, to create a table from an array of values:\n\n```js\nhtml`<table>\n  <tbody>${[\"zero\", \"one\", \"two\"].map((name, i) => html`<tr>\n    <td>${name}</td><td>${i}</td>\n  </tr>`)}</tbody>\n</table>`\n```\n\n<a href=\"#svg\" name=\"svg\">#</a> <b>svg</b>\\`<i>string</i>\\` [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/svg.js \"Source\")\n\nReturns the SVG element represented by the specified SVG *string* literal. This function is intended to be used as a [tagged template literal](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals_and_escape_sequences). Leading and trailing whitespace is automatically trimmed. For example, to create an SVG element whose content is a circle:\n\n```js\nsvg`<svg width=16 height=16>\n  <circle cx=8 cy=8 r=4></circle>\n</svg>`\n```\n\nIf the resulting SVG fragment is not a single SVG element, is it wrapped in a G element. For example, this expression:\n\n```js\nsvg`\n<circle cx=8 cy=4 r=4></circle>\n<circle cx=8 cy=8 r=4></circle>\n`\n```\n\nIs equivalent to this expression:\n\n```js\nsvg`<g>\n  <circle cx=8 cy=4 r=4></circle>\n  <circle cx=8 cy=8 r=4></circle>\n</g>`\n```\n\nIf an embedded expression is a DOM element, it is embedded in generated SVG. If an embedded expression is an array, the elements of the array are embedded in the generated SVG.\n\n### Markdown\n\n<a href=\"#md\" name=\"md\">#</a> <b>md</b>\\`<i>string</i>\\` [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/md.js \"Source\")\n\nReturns the HTML element represented by the specified Markdown *string* literal. Implemented by [Marked](https://github.com/markedjs/marked). Leading and trailing whitespace is automatically trimmed. For example, to create an H1 element whose content is “Hello, world!”:\n\n```js\nmd`# Hello, world!`\n```\n\nIf an embedded expression is a DOM element, it is embedded in generated HTML. For example, to embed [LaTeX](#tex) within Markdown:\n\n```js\nmd`My *favorite* number is ${tex`\\tau`}.`\n```\n\nIf an embedded expression is an array, the elements of the array are embedded in the generated HTML. The elements may either be strings, which are interpreted as Markdown, or DOM elements. For example, given an array of data:\n\n```js\nelements = [\n  {symbol: \"Co\", name: \"Cobalt\", number: 27},\n  {symbol: \"Cu\", name: \"Copper\", number: 29},\n  {symbol: \"Sn\", name: \"Tin\", number: 50},\n  {symbol: \"Pb\", name: \"Lead\", number: 82}\n]\n```\n\nTo create a table:\n\n```js\nmd`\n| Name      | Symbol      | Atomic number |\n|-----------|-------------|---------------|${elements.map(e => `\n| ${e.name} | ${e.symbol} | ${e.number}   |`)}\n`\n```\n\n### TeX\n\n<a href=\"#tex\" name=\"tex\">#</a> <b>tex</b>\\`<i>string</i>\\` [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/tex.js \"Source\")\n\nReturns the HTML element represented by the specified LaTeX *string* literal. Implemented by [KaTeX](https://github.com/Khan/KaTeX).\n\n```js\ntex`E = mc^2`\n```\n\n<a href=\"#tex_block\" name=\"tex_block\">#</a> tex.<b>block</b>\\`<i>string</i>\\` [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/tex.js \"Source\")\n\nEquivalent to [tex](#tex), but uses KaTeX’s display mode to produce a bigger block element rather than a smaller inline element.\n\n```js\ntex.block`E = mc^2`\n```\n\n<a href=\"#tex_options\" name=\"tex_options\">#</a> tex.<b>options</b>(<i>options</i>) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/tex.js \"Source\")\n\nReturns a function equivalent to [tex](#tex), but with the specified *options*.\n\n```js\ntex.options({displayMode: true})`E = mc^2`\n```\n\n### require\n\n<a href=\"#require\" name=\"require\">#</a> <b>require</b>(<i>names…</i>) [<>](https://github.com/d3/d3-require/blob/master/index.js \"Source\")\n\nReturns a promise of the [asynchronous module definition](https://github.com/amdjs/amdjs-api/blob/master/AMD.md) (AMD) with the specified *names*, loaded from [unpkg](https://unpkg.com/). Each module *name* can be a package (or scoped package) name optionally followed by the at sign (`@`) and a semver range. For example, to load [d3-array](https://github.com/d3/d3-array):\n\n```js\nd3 = require(\"d3-array\")\n```\n\nOr, to load [d3-array](https://github.com/d3/d3-array) and [d3-color](https://github.com/d3/d3-color) and merge them into a single object:\n\n```js\nd3 = require(\"d3-array\", \"d3-color\")\n```\n\nOr, to load [d3-array](https://github.com/d3/d3-array) 1.1.x:\n\n```js\nd3 = require(\"d3-array@1.1\")\n```\n\nSee [d3-require](https://github.com/d3/d3-require) for more information.\n\n<a href=\"#require_resolve\" name=\"require_resolve\">#</a> require.<b>resolve</b>(<i>name</i>) [<>](https://github.com/d3/d3-require/blob/master/index.js \"Source\")\n\nReturns a promise to the resolved URL to require the module with the specified *name*. For example:\n\n```js\nrequire.resolve(\"d3-array\") // \"https://unpkg.com/d3-array@1.2.1/build/d3-array.js\"\n```\n\n<a href=\"#require_alias\" name=\"require_alias\">#</a> require.<b>alias</b>(<i>aliases</i>) [<>](https://github.com/d3/d3-require/blob/master/index.js \"Source\")\n\nReturns a [require function](#require) with the specified *aliases*. For each key in the specified *aliases* object, any require of that key is substituted with the corresponding value. For example:\n\n```js\nReact = require(\"react@16/umd/react.production.min.js\")\n```\n```js\nReactDOM = require(\"react-dom@16/umd/react-dom.production.min.js\")\n```\n```js\nSemiotic = require.alias({\"react\": React, \"react-dom\": ReactDOM})(\"semiotic@1\")\n```\n\nEquivalently:\n\n```js\nr = require.alias({\n  \"react\": \"react@16/umd/react.production.min.js\",\n  \"react-dom\": \"react-dom@16/umd/react-dom.production.min.js\",\n  \"semiotic\": \"semiotic@1\"\n})\n```\n\nThen to require the libraries:\n\n```js\nReact = r(\"react\")\n```\n```js\nReactDOM = r(\"react-dom\")\n```\n```js\nSemiotic = r(\"semiotic\")\n```\n\n## Installing\n\nThe Observable notebook standard library is built-in to Observable, so you don’t normally need to install or instantiate it directly. If you use NPM, `npm install @observablehq/notebook-stdlib`.\n\n<a href=\"#Library\" name=\"Library\">#</a> <b>Library</b>([<i>resolve</i>]) [<>](https://github.com/observablehq/notebook-stdlib/blob/master/src/index.js \"Source\")\n\nReturns a new standard library object. If a *resolve* function is specified, it is a function that returns a promise to the URL of the module with the specified *name*; this is used internally by [require](#require) (and by extension, [md](#md) and [tex](#tex)). See [d3-require](https://github.com/d3/d3-require/blob/master/README.md) for details.\n\nFor example, to create the default standard library, and then use it to create a [canvas](#DOM_canvas):\n\n```js\nconst library = new Library();\nconst canvas = library.DOM.canvas(960, 500);\n```\n\nThe properties on the returned *library* instance correspond to the symbols (documented above) that are available in Observable notebook cells. However, note that the library fields (such as *library*.now) are *definitions*, not values: the values may be wrapped in a function which, when invoked, returns the corresponding value.\n","readmeFilename":"README.md"}