Running with gitlab-runner 15.5.0 (0d4137b8)  on osm3 6MUAF4hG section_start:1699182205:resolve_secrets Resolving secrets section_end:1699182205:resolve_secrets section_start:1699182205:prepare_executor Preparing the "docker" executor Using Docker executor with image registry.gitlab.com/gitlab-org/security-products/analyzers/license-finder:3 ... Pulling docker image registry.gitlab.com/gitlab-org/security-products/analyzers/license-finder:3 ... Using docker image sha256:187bbe13220c1953d0cd31be26de3114f2081a3b35a3bce1d85e2f500982d461 for registry.gitlab.com/gitlab-org/security-products/analyzers/license-finder:3 with digest registry.gitlab.com/gitlab-org/security-products/analyzers/license-finder@sha256:ede37f6ce2be0ddf9c19f60666e06c7d2c4181ad329934e333d49fdf07eafcb7 ... section_end:1699182209:prepare_executor section_start:1699182209:prepare_script Preparing environment Running on runner-6muaf4hg-project-68-concurrent-0 via osm3... section_end:1699182210:prepare_script section_start:1699182210:get_sources Getting source from Git repository Fetching changes with git depth set to 50... Reinitialized existing Git repository in /builds/gitlab/osm/ng-ui/.git/ Checking out bc7c077f as master... Removing .tool-versions Removing doc/ Removing gl-license-scanning-report.json Removing node_modules/ Skipping Git submodules setup section_end:1699182214:get_sources section_start:1699182214:step_script Executing "step_script" stage of the job script Using docker image sha256:187bbe13220c1953d0cd31be26de3114f2081a3b35a3bce1d85e2f500982d461 for registry.gitlab.com/gitlab-org/security-products/analyzers/license-finder:3 with digest registry.gitlab.com/gitlab-org/security-products/analyzers/license-finder@sha256:ede37f6ce2be0ddf9c19f60666e06c7d2c4181ad329934e333d49fdf07eafcb7 ... $ /run.sh analyze . Selecting previously unselected package asdf. (Reading database ... 19586 files and directories currently installed.) Preparing to unpack .../asdf_0.7.8-1_amd64.deb ... Unpacking asdf (0.7.8-1) ... Setting up asdf (0.7.8-1) ... Added development to the ignored groups Added develop to the ignored groups Added test to the ignored groups license_management report --prepare-no-fail --format=json --save=gl-license-scanning-report.json --no-recursive --no-debug LicenseFinder::NPM: is active [v3.32.2] version 14.17.1 is not installed for nodejs Selecting previously unselected package nodejs-14.17.1. (Reading database ... 20908 files and directories currently installed.) Preparing to unpack .../nodejs-14.17.1_14.17.1-1_amd64.deb ... Unpacking nodejs-14.17.1 (14.17.1-1) ... Setting up nodejs-14.17.1 (14.17.1-1) ... nodejs 14.17.1 is already installed npm WARN deprecated @angular/flex-layout@9.0.0-beta.31: This package has been deprecated. Please see https://blog.angular.io/modern-css-in-angular-layouts-4a259dca9127 npm WARN deprecated sourcemap-codec@1.4.8: Please use @jridgewell/sourcemap-codec instead npm WARN deprecated @babel/plugin-proposal-async-generator-functions@7.18.10: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. npm WARN deprecated @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. npm WARN deprecated @babel/plugin-proposal-export-namespace-from@7.18.9: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead. npm WARN deprecated @babel/plugin-proposal-json-strings@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead. npm WARN deprecated @babel/plugin-proposal-dynamic-import@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead. npm WARN deprecated @babel/plugin-proposal-nullish-coalescing-operator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. npm WARN deprecated @babel/plugin-proposal-numeric-separator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. npm WARN deprecated @babel/plugin-proposal-optional-catch-binding@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. npm WARN deprecated @babel/plugin-proposal-private-property-in-object@7.21.11: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. npm WARN deprecated @babel/plugin-proposal-optional-chaining@7.21.0: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. npm WARN deprecated @babel/plugin-proposal-object-rest-spread@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. npm WARN deprecated @babel/plugin-proposal-async-generator-functions@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. npm WARN deprecated @babel/plugin-proposal-unicode-property-regex@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. npm WARN deprecated @babel/plugin-proposal-class-static-block@7.21.0: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead. npm WARN deprecated @babel/plugin-proposal-private-methods@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. npm WARN deprecated @babel/plugin-proposal-logical-assignment-operators@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs npm WARN optional SKIPPING OPTIONAL DEPENDENCY: @esbuild/linux-loong64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/@esbuild/linux-loong64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @esbuild/linux-loong64@0.15.5: wanted {"os":"linux","arch":"loong64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-android-arm64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-android-arm64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-android-arm64@0.15.5: wanted {"os":"android","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-android-64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-android-64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-android-64@0.15.5: wanted {"os":"android","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-darwin-64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-darwin-64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-darwin-64@0.15.5: wanted {"os":"darwin","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-darwin-arm64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-darwin-arm64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-darwin-arm64@0.15.5: wanted {"os":"darwin","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-freebsd-64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-freebsd-64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-freebsd-64@0.15.5: wanted {"os":"freebsd","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-freebsd-arm64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-freebsd-arm64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-freebsd-arm64@0.15.5: wanted {"os":"freebsd","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-linux-32@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-linux-32): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-linux-32@0.15.5: wanted {"os":"linux","arch":"ia32"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-linux-arm@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-linux-arm): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-linux-arm@0.15.5: wanted {"os":"linux","arch":"arm"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-linux-arm64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-linux-arm64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-linux-arm64@0.15.5: wanted {"os":"linux","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-linux-mips64le@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-linux-mips64le): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-linux-mips64le@0.15.5: wanted {"os":"linux","arch":"mips64el"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-linux-ppc64le@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-linux-ppc64le): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-linux-ppc64le@0.15.5: wanted {"os":"linux","arch":"ppc64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-linux-riscv64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-linux-riscv64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-linux-riscv64@0.15.5: wanted {"os":"linux","arch":"riscv64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-linux-s390x@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-linux-s390x): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-linux-s390x@0.15.5: wanted {"os":"linux","arch":"s390x"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-netbsd-64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-netbsd-64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-netbsd-64@0.15.5: wanted {"os":"netbsd","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-openbsd-64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-openbsd-64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-openbsd-64@0.15.5: wanted {"os":"openbsd","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-sunos-64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-sunos-64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-sunos-64@0.15.5: wanted {"os":"sunos","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-windows-32@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-windows-32): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-windows-32@0.15.5: wanted {"os":"win32","arch":"ia32"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-windows-64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-windows-64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-windows-64@0.15.5: wanted {"os":"win32","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: esbuild-windows-arm64@0.15.5 (node_modules/@angular-devkit/build-angular/node_modules/esbuild/node_modules/esbuild-windows-arm64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for esbuild-windows-arm64@0.15.5: wanted {"os":"win32","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.3.2 (node_modules/chokidar/node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) npm WARN notsup Unsupported engine for @yarnpkg/parsers@3.0.0: wanted: {"node":">=18.12.0"} (current: {"node":"14.17.1","npm":"6.14.16"}) npm WARN notsup Not compatible with your version of node/npm: @yarnpkg/parsers@3.0.0 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: @nrwl/nx-darwin-x64@15.9.3 (node_modules/@nrwl/cli/node_modules/nx/node_modules/@nrwl/nx-darwin-x64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @nrwl/nx-darwin-x64@15.9.3: wanted {"os":"darwin","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: @nrwl/nx-darwin-arm64@15.9.3 (node_modules/@nrwl/cli/node_modules/nx/node_modules/@nrwl/nx-darwin-arm64): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @nrwl/nx-darwin-arm64@15.9.3: wanted {"os":"darwin","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: @nrwl/nx-linux-arm-gnueabihf@15.9.3 (node_modules/@nrwl/cli/node_modules/nx/node_modules/@nrwl/nx-linux-arm-gnueabihf): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @nrwl/nx-linux-arm-gnueabihf@15.9.3: wanted {"os":"linux","arch":"arm"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: @nrwl/nx-linux-arm64-gnu@15.9.3 (node_modules/@nrwl/cli/node_modules/nx/node_modules/@nrwl/nx-linux-arm64-gnu): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @nrwl/nx-linux-arm64-gnu@15.9.3: wanted {"os":"linux","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: @nrwl/nx-linux-arm64-musl@15.9.3 (node_modules/@nrwl/cli/node_modules/nx/node_modules/@nrwl/nx-linux-arm64-musl): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @nrwl/nx-linux-arm64-musl@15.9.3: wanted {"os":"linux","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: @nrwl/nx-win32-arm64-msvc@15.9.3 (node_modules/@nrwl/cli/node_modules/nx/node_modules/@nrwl/nx-win32-arm64-msvc): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @nrwl/nx-win32-arm64-msvc@15.9.3: wanted {"os":"win32","arch":"arm64"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: @nrwl/nx-win32-x64-msvc@15.9.3 (node_modules/@nrwl/cli/node_modules/nx/node_modules/@nrwl/nx-win32-x64-msvc): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @nrwl/nx-win32-x64-msvc@15.9.3: wanted {"os":"win32","arch":"x64"} (current: {"os":"linux","arch":"x64"}) npm WARN @angular/flex-layout@9.0.0-beta.31 requires a peer of @angular/cdk@^9.0.0-rc.8 but none is installed. You must install peer dependencies yourself. npm WARN @angular/flex-layout@9.0.0-beta.31 requires a peer of tslib@^1.9.0 but none is installed. You must install peer dependencies yourself. npm WARN @ng-bootstrap/ng-bootstrap@11.0.1 requires a peer of @angular/common@^13.0.0 but none is installed. You must install peer dependencies yourself. npm WARN @ng-bootstrap/ng-bootstrap@11.0.1 requires a peer of @angular/core@^13.0.0 but none is installed. You must install peer dependencies yourself. npm WARN @ng-bootstrap/ng-bootstrap@11.0.1 requires a peer of @angular/forms@^13.0.0 but none is installed. You must install peer dependencies yourself. npm WARN @ng-bootstrap/ng-bootstrap@11.0.1 requires a peer of @angular/localize@^13.0.0 but none is installed. You must install peer dependencies yourself. npm WARN @ng-select/ng-select@8.3.0 requires a peer of @angular/common@>=13.0.0 <14.0.0 but none is installed. You must install peer dependencies yourself. npm WARN @ng-select/ng-select@8.3.0 requires a peer of @angular/core@>=13.0.0 <14.0.0 but none is installed. You must install peer dependencies yourself. npm WARN @ng-select/ng-select@8.3.0 requires a peer of @angular/forms@>=13.0.0 <14.0.0 but none is installed. You must install peer dependencies yourself. npm WARN angular-notifier@9.1.0 requires a peer of @angular/common@>= 11.0.0 < 12.0.0 but none is installed. You must install peer dependencies yourself. npm WARN angular-notifier@9.1.0 requires a peer of @angular/core@>= 11.0.0 < 12.0.0 but none is installed. You must install peer dependencies yourself. npm WARN bootstrap@4.6.2 requires a peer of jquery@1.9.1 - 3 but none is installed. You must install peer dependencies yourself. npm WARN bootstrap@4.6.2 requires a peer of popper.js@^1.16.1 but none is installed. You must install peer dependencies yourself. npm WARN ng2-smart-table@1.6.0 requires a peer of @angular/common@^9.0.0 but none is installed. You must install peer dependencies yourself. npm WARN ng2-smart-table@1.6.0 requires a peer of @angular/core@^9.0.0 but none is installed. You must install peer dependencies yourself. npm WARN ng2-smart-table@1.6.0 requires a peer of @angular/forms@^9.0.0 but none is installed. You must install peer dependencies yourself. npm WARN ng2-smart-table@1.6.0 requires a peer of tslib@^1.9.0 but none is installed. You must install peer dependencies yourself. npm WARN @angular-eslint/schematics@13.5.0 requires a peer of @angular/cli@>= 13.0.0 < 14.0.0 but none is installed. You must install peer dependencies yourself. npm WARN ajv-keywords@3.5.2 requires a peer of ajv@^6.9.1 but none is installed. You must install peer dependencies yourself. added 251 packages from 1165 contributors in 63.272s 24 packages are looking for funding run `npm fund` for details [v3.32.2] { "name": "osm", "version": "14.0.0", "engines": { "node": ">=14.0.0" }, "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build --configuration production --aot", "test": "ng test", "lint": "eslint --ext ts,tsx .", "e2e": "ng e2e", "proxy": "ng serve --proxy-config proxy.conf.json" }, "private": true, "dependencies": { "@akveo/ng2-completer": { "_from": "@akveo/ng2-completer@^9.0.1", "_id": "@akveo/ng2-completer@9.0.1", "_inBundle": false, "_integrity": "sha512-iACL0heOUmGV1GBKD3srwBJMFLZykld1MiTDvmbgEEXMhavp0UA45GdNsv7BBKI9XauuFKpOqHLlC+fT6DLGAQ==", "_location": "/@akveo/ng2-completer", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@akveo/ng2-completer@^9.0.1", "name": "@akveo/ng2-completer", "escapedName": "@akveo%2fng2-completer", "scope": "@akveo", "rawSpec": "^9.0.1", "saveSpec": null, "fetchSpec": "^9.0.1" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@akveo/ng2-completer/-/ng2-completer-9.0.1.tgz", "_shasum": "49d2914fb62b78cc6ae5aed861ea7fa4ed5863d1", "_spec": "@akveo/ng2-completer@^9.0.1", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Ofer Herman", "email": "oferhe@gmail.com" }, "bugs": { "url": "https://github.com/oferh/ng2-completer/issues" }, "contributors": [ { "name": "Martin Donadieu", "email": "martindonadieu@gmail.com" }, { "name": "Andrew Rumm", "email": "rayz@rayz.ru" } ], "dependencies": {}, "deprecated": false, "description": "Temporary fork of https://github.com/oferh/ng2-completer to fix build issue", "devDependencies": { "@angular/animations": ">= 6.0.0", "@angular/cdk": ">= 6.0.0", "@angular/common": ">= 6.0.0", "@angular/compiler": ">= 6.0.0", "@angular/compiler-cli": ">= 6.0.0", "@angular/core": ">= 6.0.0", "@angular/forms": ">= 6.0.0", "@angular/material": ">= 6.0.0", "@angular/platform-browser": ">= 6.0.0", "@angular/platform-browser-dynamic": ">= 6.0.0", "@angular/platform-server": ">= 6.0.0", "@angular/router": ">= 6.0.0", "@compodoc/compodoc": "^1.0.3", "@rollup/plugin-node-resolve": "^7.1.1", "@types/jasmine": "^3.5.3", "@types/node": "^13.7.0", "angular2-template-loader": "^0.6.2", "awesome-typescript-loader": "^5.0.0", "chalk": "^3.0.0", "codelyzer": "^5.2.1", "copy-webpack-plugin": "^5.1.1", "core-js": "^3.6.4", "cross-env": "^7.0.0", "extract-text-webpack-plugin": "^4.0.0-beta.0", "gh-pages": "^2.2.0", "html-loader": "^0.5.1", "html-webpack-plugin": "^3.2.0", "istanbul-instrumenter-loader": "^3.0.0", "jasmine-core": "^3.1.0", "karma": "^4.4.1", "karma-chrome-launcher": "^3.1.0", "karma-coverage-istanbul-reporter": "^2.0.0", "karma-jasmine": "^3.1.0", "karma-sourcemap-loader": "0.3.7", "karma-spec-reporter": "^0.0.32", "karma-webpack": "^4.0.2", "ngx-bootstrap": "^5.3.2", "raw-loader": "^4.0.0", "reflect-metadata": "^0.1.10", "rollup": "^1.31.0", "rollup-plugin-license": "^0.13.0", "rollup-plugin-sourcemaps": "^0.5.0", "rollup-plugin-visualizer": "^3.3.1", "rxjs": "^6.5.4", "shelljs": "^0.8.2", "source-map-loader": "^0.2.4", "to-string-loader": "^1.1.6", "ts-loader": "^6.2.1", "tslint": "^6.0.0", "typescript": "~3.7.5", "uglify-js": "^3.1.6", "webpack": "^4.0.0", "webpack-cli": "^3.0.3", "webpack-dev-server": "^3.1.4", "webpack-merge": "^4.1.0", "zone.js": "^0.10.2" }, "es2015": "./esm2015/ng2-completer.js", "homepage": "https://github.com/oferh/ng2-completer/issues/447", "keywords": [ "angular", "autcomplete", "typeahead", "word completion", "ng2" ], "license": "MIT", "main": "./bundles/ng2-completer.umd.js", "module": "./esm5/ng2-completer.js", "name": "@akveo/ng2-completer", "peerDependencies": { "@angular/common": ">= 6.0.0", "@angular/core": ">= 6.0.0", "@angular/forms": ">= 6.0.0" }, "repository": { "type": "git", "url": "git+https://github.com/oferh/ng2-completer.git" }, "typings": "./ng2-completer.d.ts", "version": "9.0.1", "readme": "# ng2-completer\n\nAuto complete component for Angular 2.\n\nThis component is based on [angucomplete-alt](https://github.com/ghiden/angucomplete-alt)\n\nClick for [demo](http://oferh.github.io/ng2-completer/) or [plunk](https://plnkr.co/edit/sVnfpBiEb5jBdtul4ls9?p=preview)\n\n## help needed\nI don't use this library much anymore and don't have time to properly maintain it.\nIf you are currently using ng2-completer and interested to maintain it please let me know!\n\n## Installation\n\n```sh\nnpm install ng2-completer --save\n```\n\n## Usage\n\nThe module you want to use ng2-completer in must import `Ng2CompleterModule` and `FormsModule` (to use the ngModel\ndirective on ng2-completer). `Ng2CompleterModule` provides the `CompleterService`, and declares the `ng2-completer`\ndirective.\n```ts\nimport { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from \"@angular/forms\";\nimport { HttpClientModule } from \"@angular/common/http\";\nimport { AppComponent } from './app.component';\nimport { Ng2CompleterModule } from \"ng2-completer\";\n\n\n@NgModule({\n imports: [\n BrowserModule,\n FormsModule,\n HttpClientModule,\n Ng2CompleterModule,\n ],\n declarations: [ AppComponent ],\n bootstrap: [ AppComponent ]\n})\nexport class AppModule { }\n```\n\nAdd ng2-completer to your component and create a data source:\n\n```ts\nimport { Component } from '@angular/core';\nimport { CompleterService, CompleterData } from 'ng2-completer';\n\n@Component({\n selector: 'my-component',\n template: `

Search color

\n \n

Search captain

\n `\n})\nexport class MyComponent {\n\n protected searchStr: string;\n protected captain: string;\n protected dataService: CompleterData;\n protected searchData = [\n { color: 'red', value: '#f00' },\n { color: 'green', value: '#0f0' },\n { color: 'blue', value: '#00f' },\n { color: 'cyan', value: '#0ff' },\n { color: 'magenta', value: '#f0f' },\n { color: 'yellow', value: '#ff0' },\n { color: 'black', value: '#000' }\n ];\n protected captains = ['James T. Kirk', 'Benjamin Sisko', 'Jean-Luc Picard', 'Spock', 'Jonathan Archer', 'Hikaru Sulu', 'Christopher Pike', 'Rachel Garrett' ];\n\n constructor(private completerService: CompleterService) {\n this.dataService = completerService.local(this.searchData, 'color', 'color');\n }\n}\n```\n\nng2-completer uses [rxjs](https://github.com/Reactive-Extensions/RxJS) stream as data sources.\nThere are 2 ready made data sources that can be used to fetch local and remote data but it's also possible to provide\na custom source that generates a stream of items.\n\n### System.js configuration\n\nAdd the following to `System.js` map configuration:\n```ts\n var map = {\n ...\n 'ng2-completer': 'node_modules/ng2-completer/ng2-completer.umd.js'\n }\n```\n\n\n\n## API\n\n### ng2-completer component\n\n|Attribute|Description|Type|Required|Default|\n|:--- |:--- |:--- |:--- |:--- |\n|datasource|Autocomplete list data source can be an array of strings or a URL that results in an array of strings or a CompleterData object|Array\\\\|string\\|CompleterData|Yes||\n|dataService|**Deprecated** use `datasource` instead. Autocomplete list data source.|CompleterData|Yes||\n|ngModel| see the angular [forms API](https://angular.io/docs/js/latest/guide/forms.html).|string|Yes||\n|autoMatch|Auto select an item if it is the only result and it is an exact match of the search text.|boolean|No|false\n|autofocus|Set input focus when the page loads|boolean|No|false\n|clearUnselected|Clear the input on blur if not selected.|boolean|No|false|\n|clearSelected|Clear the input when a result is selected.|boolean|No|false|\n|disableInput|If true disable the input field.|boolean|No|false|\n|fieldTabindex|Set the `tabIndex` of the input.|number|No||\n|initialValue|Initial value for the component. Value is parsed using: titleField, descriptionField and imageField and used as selected value|any|No||\n|inputId|`id` attribute of the input element.|string|No||\n|inputName|`name` attribute of the input element.|string|No||\n|inputClass| `class` attribute of the input element.|string|No||\n|matchClass|CSS class to apply for matching part of the title and description.|string|No||\n|maxChars|Maximal number of characters that the user can type in the component.|number|No|524288|\n|minSearchLength|Minimal number of characters required for searching.|number|No|3|\n|overrideSuggested|If true will override suggested and set the model with the value in the input field.|boolean|No|false|\n|openOnFocus|If true will open the dropdown and perform search when the input gets the focus.|boolean|No|false|\n|openOnClick|If true will open and close the dropdown by click.|boolean|No|false|\n|selectOnFocus|If true will select the input text upon focus.|boolean|No|false|\n|selectOnClick|If true will select the input text by click.|boolean|No|false|\n|fillHighlighted|If true will set the model with the value in the input field when item is highlighted.|boolean|No|true|\n|pause|Number of msec. to wait before searching.|number|No|250|\n|placeholder|Placeholder text for the search field.|string|No||\n|textNoResults|Text displayed when the search returned no results. if the string is falsy it won't be displayed|string|No|\n|textSearching|Text displayed while search is active. if the string is falsy it won't be displayed|string|No|Searching...|\n|autoHighlight|Automatically highlight the best matching search result when the input changes. the \"best match\" is selected by: exact match, starts with and finally includes|boolean|No|false|\n\n### ng2-completer events\n\n|Name|Description|Type|\n|:--- |:--- |:--- |\n|selected|emitted when an item is selected.|(selected: CompleterItem): void|\n|highlighted|emitted when an item is highlighted.|(highlighted: CompleterItem): void|\n|focus|emitted when the input gets focus|(): void|\n|blur|emitted when the input looses focus|(): void|\n|opened|emitted when the dropdown is opened or closed|(isOpen: boolean): void|\n|keyup|emitted when the input emits keyup|(event: any): void|\n|keydown|emitted when the input emits keydown|(event: any): void|\n\n### ng2-completer methods\n\n|Method|Description|Parameters|\n|:--- |:--- |:--- |\n|open()|Open the dropdown| |\n|close()|Close the dropdown| |\n|focus()|Set the focus to the completer input| |\n|blur()|Remove the focus from the completer input| |\n|isOpen()|Returns the state of the dropdown| |\n\n### Local data\n\nCreate local data provider by calling `CompleterService.local`.\n\n#### Parameters\n\n|Name|Type|Description|Required|\n|:---|:---|:--- |:--- |\n|data|any[] \\| Observable|A JSON array with the data to use or an Observable that emits one|Yes|\n|searchFields|string|Comma separated list of fields to search on. Fields may contain dots for nested attributes; if empty or null all data will be returned.|Yes|\n|titleField|string|Name of the field to use as title for the list item.|Yes|\n\n#### Attributes\n|Name|Type|Description|\n|:---|:---|:--- |\n|descriptionField|string|Name of the field to use as description for the list item.|\n|imageField|string|Name of the field to use as image url for the list item.|\n\n### Remote data\n\nCreate remote data provider by calling `CompleterService.remote`.\n\n#### Parameters\n\n|Name|Type|Description|Required|\n|:---|:---|:--- |:--- |\n|url|string|Base url for the search|Yes|\n|searchFields|string|Comma separated list of fields to search on. Fields may contain dots for nested attributes; if empty or null all data will be returned.|Yes|\n|titleField|string|Name of the field to use as title for the list item.|Yes|\n\n#### Attributes\n\n|Name|Type|Description|\n|:---|:---|:--- |\n|descriptionField|string|Name of the field to use as description for the list item.|\n|imageField|string|Name of the field to use as image url for the list item.|\n|urlFormater|(term: string) => string|Function that get's the searchterm and returns the search url before each search.|\n|dataField|string|The field in the response that includes the data.|\n|requestOptions|RequestOptions (@angular/common/http)|HTTP request options that should be sent with the search request.|\n\n### CSS classes\n\n* `.completer-holder`\n* `.completer-input`\n* `.completer-dropdown-holder`\n* `.completer-dropdown`\n* `.completer-searching`\n* `.completer-no-results`\n* `.completer-row`\n* `.completer-image-holder`\n* `.completer-image`\n* `.completer-image-default`\n* `.completer-title`\n* `.completer-description`\n* `.completer-list-item-holder`\n* `.completer-list-item`\n* `.completer-selected-row`\n\n## Credits\n\n* This product uses the TMDb API but is not endorsed or certified by TMDb\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/@akveo/ng2-completer", "error": "[Circular]", "extraneous": false }, "@angular/animations": { "_from": "@angular/animations@^14.2.12", "_id": "@angular/animations@14.3.0", "_inBundle": false, "_integrity": "sha512-QoBcIKy1ZiU+4qJsAh5Ls20BupWiXiZzKb0s6L9/dntPt5Msr4Ao289XR2P6O1L+kTsCprH9Kt41zyGQ/bkRqg==", "_location": "/@angular/animations", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@angular/animations@^14.2.12", "name": "@angular/animations", "escapedName": "@angular%2fanimations", "scope": "@angular", "rawSpec": "^14.2.12", "saveSpec": "[Circular]", "fetchSpec": "^14.2.12" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.3.0.tgz", "_shasum": "71e22cc1bdfcefc7d8d38cc3bb300b768940f816", "_spec": "@angular/animations@^14.2.12", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "angular" }, "bugs": { "url": "https://github.com/angular/angular/issues" }, "dependencies": { "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "tslib@^2.5.0", "name": "tslib", "escapedName": "tslib", "rawSpec": "^2.5.0", "saveSpec": "[Circular]", "fetchSpec": "^2.5.0" }, "_requiredBy": [ "/", "/@angular/animations", "/@angular/cdk", "/@angular/common", "/@angular/compiler", "/@angular/compiler-cli", "/@angular/core", "/@angular/forms", "/@angular/platform-browser", "/@angular/platform-browser-dynamic", "/@angular/router", "/@ctrl/ngx-codemirror", "/@ng-bootstrap/ng-bootstrap", "/@ng-idle/core", "/@ng-idle/keepalive", "/@ng-select/ng-select", "/@ngx-translate/core", "/@nrwl/cli/nx", "/@nrwl/devkit", "/@nrwl/tao", "/@yarnpkg/parsers", "/eslint-plugin-deprecation", "/inquirer/rxjs", "/less", "/listr2/rxjs", "/ng2-charts", "/ngx-toastr", "/zone.js" ], "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Microsoft Corp." }, "bugs": { "url": "https://github.com/Microsoft/TypeScript/issues" }, "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": { ".": { "module": { "types": "./modules/index.d.ts", "default": "./tslib.es6.mjs" }, "import": { "node": "./modules/index.js", "default": { "types": "./modules/index.d.ts", "default": "./tslib.es6.mjs" } }, "default": "./tslib.js" }, "./*": "./*", "./": "./" }, "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": [ "TypeScript", "Microsoft", "compiler", "language", "javascript", "tslib", "runtime" ], "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": { "type": "git", "url": "git+https://github.com/Microsoft/tslib.git" }, "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": [ { "requiredBy": "@angular/flex-layout@9.0.0-beta.31", "requires": "tslib@^1.9.0" }, { "requiredBy": "ng2-smart-table@1.6.0", "requires": "tslib@^1.9.0" } ], "_deduped": "tslib" } }, "deprecated": false, "description": "Angular - animations integration with web-animations", "engines": { "node": "^14.15.0 || >=16.10.0" }, "es2020": "./fesm2020/animations.mjs", "esm2020": "./esm2020/animations.mjs", "exports": { "./package.json": { "default": "./package.json" }, ".": { "types": "./index.d.ts", "esm2020": "./esm2020/animations.mjs", "es2020": "./fesm2020/animations.mjs", "es2015": "./fesm2015/animations.mjs", "node": "./fesm2015/animations.mjs", "default": "./fesm2020/animations.mjs" }, "./browser": { "types": "./browser/index.d.ts", "esm2020": "./esm2020/browser/browser.mjs", "es2020": "./fesm2020/browser.mjs", "es2015": "./fesm2015/browser.mjs", "node": "./fesm2015/browser.mjs", "default": "./fesm2020/browser.mjs" }, "./browser/testing": { "types": "./browser/testing/index.d.ts", "esm2020": "./esm2020/browser/testing/testing.mjs", "es2020": "./fesm2020/browser/testing.mjs", "es2015": "./fesm2015/browser/testing.mjs", "node": "./fesm2015/browser/testing.mjs", "default": "./fesm2020/browser/testing.mjs" } }, "fesm2015": "./fesm2015/animations.mjs", "fesm2020": "./fesm2020/animations.mjs", "homepage": "https://github.com/angular/angular#readme", "license": "MIT", "module": "./fesm2015/animations.mjs", "name": "@angular/animations", "ng-update": { "packageGroup": [ "@angular/core", "@angular/bazel", "@angular/common", "@angular/compiler", "@angular/compiler-cli", "@angular/animations", "@angular/elements", "@angular/platform-browser", "@angular/platform-browser-dynamic", "@angular/forms", "@angular/platform-server", "@angular/upgrade", "@angular/router", "@angular/language-service", "@angular/localize", "@angular/service-worker" ] }, "peerDependencies": { "@angular/core": "14.3.0" }, "repository": { "type": "git", "url": "git+https://github.com/angular/angular.git", "directory": "packages/animations" }, "sideEffects": false, "type": "module", "typings": "./index.d.ts", "version": "14.3.0", "readme": "Angular\n=======\n\nThe sources for this package are in the main [Angular](https://github.com/angular/angular) repo. Please file issues and pull requests against that repo.\n\nUsage information and reference details can be found in [Angular documentation](https://angular.io/docs).\n\nLicense: MIT\n", "readmeFilename": "README.md", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "tslib": "^2.3.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@angular/animations", "error": "[Circular]", "extraneous": false }, "@angular/cdk": { "_from": "@angular/cdk@^13.3.9", "_id": "@angular/cdk@13.3.9", "_inBundle": false, "_integrity": "sha512-XCuCbeuxWFyo3EYrgEYx7eHzwl76vaWcxtWXl00ka8d+WAOtMQ6Tf1D98ybYT5uwF9889fFpXAPw98mVnlo3MA==", "_location": "/@angular/cdk", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@angular/cdk@^13.3.9", "name": "@angular/cdk", "escapedName": "@angular%2fcdk", "scope": "@angular", "rawSpec": "^13.3.9", "saveSpec": "[Circular]", "fetchSpec": "^13.3.9" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.9.tgz", "_shasum": "a177196e872e29be3f84d3a50f778d361c689ff7", "_spec": "@angular/cdk@^13.3.9", "_where": "/builds/gitlab/osm/ng-ui", "bugs": { "url": "https://github.com/angular/components/issues" }, "dependencies": { "parse5": { "_from": "parse5@^5.0.0", "_id": "parse5@5.1.1", "_inBundle": false, "_integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "_location": "/parse5", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "parse5@^5.0.0", "name": "parse5", "escapedName": "parse5", "rawSpec": "^5.0.0", "saveSpec": "[Circular]", "fetchSpec": "^5.0.0" }, "_requiredBy": [ "/@angular/cdk" ], "_resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", "_shasum": "f68e4e5ba1852ac2cadc00f4555fff6c2abb6178", "_spec": "parse5@^5.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@angular/cdk", "author": { "name": "Ivan Nikulin", "email": "ifaaan@gmail.com", "url": "https://github.com/inikulin" }, "bugs": { "url": "https://github.com/inikulin/parse5/issues" }, "contributors": "https://github.com/inikulin/parse5/graphs/contributors", "deprecated": false, "description": "HTML parser and serializer.", "files": [ "lib" ], "gitHead": "9c7556ed05e4ff4d884ab2447e27ce3817c42e79", "homepage": "https://github.com/inikulin/parse5", "keywords": [ "html", "parser", "html5", "WHATWG", "specification", "fast", "html parser", "html5 parser", "htmlparser", "parse5", "serializer", "html serializer", "htmlserializer", "parse", "serialize" ], "license": "MIT", "main": "./lib/index.js", "name": "parse5", "repository": { "type": "git", "url": "git://github.com/inikulin/parse5.git" }, "version": "5.1.1", "readme": "

\n \n \"parse5\"\n \n

\n\n
\n

parse5

\nHTML parser and serializer.\n
\n
\n\n
\nnpm install --save parse5\n
\n
\n\n

\n 📖 Documentation 📖\n

\n\n---\n\n

\n List of parse5 toolset packages\n

\n\n

\n GitHub\n

\n\n

\n Online playground\n

\n\n

\n Version history\n

\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/parse5", "error": "[Circular]", "extraneous": false }, "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]", "_deduped": "tslib" } }, "deprecated": false, "description": "Angular Material Component Development Kit", "es2020": "./fesm2020/cdk.mjs", "esm2020": "./esm2020/index.mjs", "exports": { ".": { "sass": "./_index.scss", "types": "./index.d.ts", "esm2020": "./esm2020/index.mjs", "es2020": "./fesm2020/cdk.mjs", "es2015": "./fesm2015/cdk.mjs", "node": "./fesm2015/cdk.mjs", "default": "./fesm2020/cdk.mjs" }, "./a11y-prebuilt.css": { "style": "./a11y-prebuilt.css" }, "./a11y-prebuilt": { "style": "./a11y-prebuilt.css" }, "./overlay-prebuilt.css": { "style": "./overlay-prebuilt.css" }, "./overlay-prebuilt": { "style": "./overlay-prebuilt.css" }, "./text-field-prebuilt.css": { "style": "./text-field-prebuilt.css" }, "./text-field-prebuilt": { "style": "./text-field-prebuilt.css" }, "./schematics": { "default": "./schematics/index.js" }, "./package.json": { "default": "./package.json" }, "./a11y": { "types": "./a11y/a11y_public_index.d.ts", "esm2020": "./esm2020/a11y/a11y_public_index.mjs", "es2020": "./fesm2020/a11y.mjs", "es2015": "./fesm2015/a11y.mjs", "node": "./fesm2015/a11y.mjs", "default": "./fesm2020/a11y.mjs" }, "./accordion": { "types": "./accordion/accordion_public_index.d.ts", "esm2020": "./esm2020/accordion/accordion_public_index.mjs", "es2020": "./fesm2020/accordion.mjs", "es2015": "./fesm2015/accordion.mjs", "node": "./fesm2015/accordion.mjs", "default": "./fesm2020/accordion.mjs" }, "./bidi": { "types": "./bidi/bidi_public_index.d.ts", "esm2020": "./esm2020/bidi/bidi_public_index.mjs", "es2020": "./fesm2020/bidi.mjs", "es2015": "./fesm2015/bidi.mjs", "node": "./fesm2015/bidi.mjs", "default": "./fesm2020/bidi.mjs" }, "./clipboard": { "types": "./clipboard/clipboard_public_index.d.ts", "esm2020": "./esm2020/clipboard/clipboard_public_index.mjs", "es2020": "./fesm2020/clipboard.mjs", "es2015": "./fesm2015/clipboard.mjs", "node": "./fesm2015/clipboard.mjs", "default": "./fesm2020/clipboard.mjs" }, "./coercion": { "types": "./coercion/index.d.ts", "esm2020": "./esm2020/coercion/index.mjs", "es2020": "./fesm2020/coercion.mjs", "es2015": "./fesm2015/coercion.mjs", "node": "./fesm2015/coercion.mjs", "default": "./fesm2020/coercion.mjs" }, "./collections": { "types": "./collections/collections_public_index.d.ts", "esm2020": "./esm2020/collections/collections_public_index.mjs", "es2020": "./fesm2020/collections.mjs", "es2015": "./fesm2015/collections.mjs", "node": "./fesm2015/collections.mjs", "default": "./fesm2020/collections.mjs" }, "./drag-drop": { "types": "./drag-drop/drag-drop_public_index.d.ts", "esm2020": "./esm2020/drag-drop/drag-drop_public_index.mjs", "es2020": "./fesm2020/drag-drop.mjs", "es2015": "./fesm2015/drag-drop.mjs", "node": "./fesm2015/drag-drop.mjs", "default": "./fesm2020/drag-drop.mjs" }, "./keycodes": { "types": "./keycodes/keycodes_public_index.d.ts", "esm2020": "./esm2020/keycodes/keycodes_public_index.mjs", "es2020": "./fesm2020/keycodes.mjs", "es2015": "./fesm2015/keycodes.mjs", "node": "./fesm2015/keycodes.mjs", "default": "./fesm2020/keycodes.mjs" }, "./layout": { "types": "./layout/layout_public_index.d.ts", "esm2020": "./esm2020/layout/layout_public_index.mjs", "es2020": "./fesm2020/layout.mjs", "es2015": "./fesm2015/layout.mjs", "node": "./fesm2015/layout.mjs", "default": "./fesm2020/layout.mjs" }, "./observers": { "types": "./observers/observers_public_index.d.ts", "esm2020": "./esm2020/observers/observers_public_index.mjs", "es2020": "./fesm2020/observers.mjs", "es2015": "./fesm2015/observers.mjs", "node": "./fesm2015/observers.mjs", "default": "./fesm2020/observers.mjs" }, "./overlay": { "types": "./overlay/overlay_public_index.d.ts", "esm2020": "./esm2020/overlay/overlay_public_index.mjs", "es2020": "./fesm2020/overlay.mjs", "es2015": "./fesm2015/overlay.mjs", "node": "./fesm2015/overlay.mjs", "default": "./fesm2020/overlay.mjs" }, "./platform": { "types": "./platform/platform_public_index.d.ts", "esm2020": "./esm2020/platform/platform_public_index.mjs", "es2020": "./fesm2020/platform.mjs", "es2015": "./fesm2015/platform.mjs", "node": "./fesm2015/platform.mjs", "default": "./fesm2020/platform.mjs" }, "./portal": { "types": "./portal/portal_public_index.d.ts", "esm2020": "./esm2020/portal/portal_public_index.mjs", "es2020": "./fesm2020/portal.mjs", "es2015": "./fesm2015/portal.mjs", "node": "./fesm2015/portal.mjs", "default": "./fesm2020/portal.mjs" }, "./scrolling": { "types": "./scrolling/scrolling_public_index.d.ts", "esm2020": "./esm2020/scrolling/scrolling_public_index.mjs", "es2020": "./fesm2020/scrolling.mjs", "es2015": "./fesm2015/scrolling.mjs", "node": "./fesm2015/scrolling.mjs", "default": "./fesm2020/scrolling.mjs" }, "./stepper": { "types": "./stepper/stepper_public_index.d.ts", "esm2020": "./esm2020/stepper/stepper_public_index.mjs", "es2020": "./fesm2020/stepper.mjs", "es2015": "./fesm2015/stepper.mjs", "node": "./fesm2015/stepper.mjs", "default": "./fesm2020/stepper.mjs" }, "./table": { "types": "./table/table_public_index.d.ts", "esm2020": "./esm2020/table/table_public_index.mjs", "es2020": "./fesm2020/table.mjs", "es2015": "./fesm2015/table.mjs", "node": "./fesm2015/table.mjs", "default": "./fesm2020/table.mjs" }, "./testing": { "types": "./testing/index.d.ts", "esm2020": "./esm2020/testing/index.mjs", "es2020": "./fesm2020/testing.mjs", "es2015": "./fesm2015/testing.mjs", "node": "./fesm2015/testing.mjs", "default": "./fesm2020/testing.mjs" }, "./testing/protractor": { "types": "./testing/protractor/index.d.ts", "esm2020": "./esm2020/testing/protractor/index.mjs", "es2020": "./fesm2020/testing/protractor.mjs", "es2015": "./fesm2015/testing/protractor.mjs", "node": "./fesm2015/testing/protractor.mjs", "default": "./fesm2020/testing/protractor.mjs" }, "./testing/selenium-webdriver": { "types": "./testing/selenium-webdriver/index.d.ts", "esm2020": "./esm2020/testing/selenium-webdriver/index.mjs", "es2020": "./fesm2020/testing/selenium-webdriver.mjs", "es2015": "./fesm2015/testing/selenium-webdriver.mjs", "node": "./fesm2015/testing/selenium-webdriver.mjs", "default": "./fesm2020/testing/selenium-webdriver.mjs" }, "./testing/testbed": { "types": "./testing/testbed/index.d.ts", "esm2020": "./esm2020/testing/testbed/index.mjs", "es2020": "./fesm2020/testing/testbed.mjs", "es2015": "./fesm2015/testing/testbed.mjs", "node": "./fesm2015/testing/testbed.mjs", "default": "./fesm2020/testing/testbed.mjs" }, "./text-field": { "types": "./text-field/text-field_public_index.d.ts", "esm2020": "./esm2020/text-field/text-field_public_index.mjs", "es2020": "./fesm2020/text-field.mjs", "es2015": "./fesm2015/text-field.mjs", "node": "./fesm2015/text-field.mjs", "default": "./fesm2020/text-field.mjs" }, "./tree": { "types": "./tree/tree_public_index.d.ts", "esm2020": "./esm2020/tree/tree_public_index.mjs", "es2020": "./fesm2020/tree.mjs", "es2015": "./fesm2015/tree.mjs", "node": "./fesm2015/tree.mjs", "default": "./fesm2020/tree.mjs" } }, "fesm2015": "./fesm2015/cdk.mjs", "fesm2020": "./fesm2020/cdk.mjs", "homepage": "https://github.com/angular/components#readme", "keywords": [ "angular", "cdk", "component", "development", "kit" ], "license": "MIT", "module": "./fesm2015/cdk.mjs", "name": "@angular/cdk", "ng-update": { "migrations": "./schematics/migration.json" }, "optionalDependencies": { "parse5": "^5.0.0" }, "peerDependencies": { "@angular/core": "^13.0.0 || ^14.0.0-0", "@angular/common": "^13.0.0 || ^14.0.0-0", "rxjs": "^6.5.3 || ^7.4.0" }, "repository": { "type": "git", "url": "git+https://github.com/angular/components.git" }, "schematics": "./schematics/collection.json", "sideEffects": false, "type": "module", "typings": "./index.d.ts", "version": "13.3.9", "readme": "Angular Material\n=======\n\nThe sources for this package are in the main [Angular Material](https://github.com/angular/components) repo. Please file issues and pull requests against that repo.\n\nLicense: MIT\n", "readmeFilename": "README.md", "devDependencies": {}, "_dependencies": { "parse5": "^5.0.0", "tslib": "^2.3.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@angular/cdk", "error": "[Circular]", "extraneous": false, "peerMissing": [ { "requiredBy": "@angular/flex-layout@9.0.0-beta.31", "requires": "@angular/cdk@^9.0.0-rc.8" } ] }, "@angular/common": { "_from": "@angular/common@^14.2.12", "_id": "@angular/common@14.3.0", "_inBundle": false, "_integrity": "sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ==", "_location": "/@angular/common", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@angular/common@^14.2.12", "name": "@angular/common", "escapedName": "@angular%2fcommon", "scope": "@angular", "rawSpec": "^14.2.12", "saveSpec": "[Circular]", "fetchSpec": "^14.2.12" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz", "_shasum": "dcf675e1db3016cdb605a05be6182a8cea71e139", "_spec": "@angular/common@^14.2.12", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "angular" }, "bugs": { "url": "https://github.com/angular/angular/issues" }, "dependencies": { "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]", "_deduped": "tslib" } }, "deprecated": false, "description": "Angular - commonly needed directives and services", "engines": { "node": "^14.15.0 || >=16.10.0" }, "es2020": "./fesm2020/common.mjs", "esm2020": "./esm2020/common.mjs", "exports": { "./locales/global/*": { "default": "./locales/global/*.js" }, "./locales/*": { "default": "./locales/*.mjs" }, "./package.json": { "default": "./package.json" }, ".": { "types": "./index.d.ts", "esm2020": "./esm2020/common.mjs", "es2020": "./fesm2020/common.mjs", "es2015": "./fesm2015/common.mjs", "node": "./fesm2015/common.mjs", "default": "./fesm2020/common.mjs" }, "./http": { "types": "./http/index.d.ts", "esm2020": "./esm2020/http/http.mjs", "es2020": "./fesm2020/http.mjs", "es2015": "./fesm2015/http.mjs", "node": "./fesm2015/http.mjs", "default": "./fesm2020/http.mjs" }, "./http/testing": { "types": "./http/testing/index.d.ts", "esm2020": "./esm2020/http/testing/testing.mjs", "es2020": "./fesm2020/http/testing.mjs", "es2015": "./fesm2015/http/testing.mjs", "node": "./fesm2015/http/testing.mjs", "default": "./fesm2020/http/testing.mjs" }, "./testing": { "types": "./testing/index.d.ts", "esm2020": "./esm2020/testing/testing.mjs", "es2020": "./fesm2020/testing.mjs", "es2015": "./fesm2015/testing.mjs", "node": "./fesm2015/testing.mjs", "default": "./fesm2020/testing.mjs" }, "./upgrade": { "types": "./upgrade/index.d.ts", "esm2020": "./esm2020/upgrade/upgrade.mjs", "es2020": "./fesm2020/upgrade.mjs", "es2015": "./fesm2015/upgrade.mjs", "node": "./fesm2015/upgrade.mjs", "default": "./fesm2020/upgrade.mjs" } }, "fesm2015": "./fesm2015/common.mjs", "fesm2020": "./fesm2020/common.mjs", "homepage": "https://github.com/angular/angular#readme", "license": "MIT", "locales": "locales", "module": "./fesm2015/common.mjs", "name": "@angular/common", "ng-update": { "packageGroup": [ "@angular/core", "@angular/bazel", "@angular/common", "@angular/compiler", "@angular/compiler-cli", "@angular/animations", "@angular/elements", "@angular/platform-browser", "@angular/platform-browser-dynamic", "@angular/forms", "@angular/platform-server", "@angular/upgrade", "@angular/router", "@angular/language-service", "@angular/localize", "@angular/service-worker" ] }, "peerDependencies": { "@angular/core": "14.3.0", "rxjs": "^6.5.3 || ^7.4.0" }, "repository": { "type": "git", "url": "git+https://github.com/angular/angular.git", "directory": "packages/common" }, "sideEffects": [ "**/global/*.js", "**/closure-locale.*" ], "type": "module", "typings": "./index.d.ts", "version": "14.3.0", "readme": "Angular\n=======\n\nThe sources for this package are in the main [Angular](https://github.com/angular/angular) repo. Please file issues and pull requests against that repo.\n\nUsage information and reference details can be found in [Angular documentation](https://angular.io/docs).\n\nLicense: MIT\n", "readmeFilename": "README.md", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "tslib": "^2.3.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@angular/common", "error": "[Circular]", "extraneous": false, "peerMissing": [ { "requiredBy": "@ng-bootstrap/ng-bootstrap@11.0.1", "requires": "@angular/common@^13.0.0" }, { "requiredBy": "@ng-select/ng-select@8.3.0", "requires": "@angular/common@>=13.0.0 <14.0.0" }, { "requiredBy": "angular-notifier@9.1.0", "requires": "@angular/common@>= 11.0.0 < 12.0.0" }, { "requiredBy": "ng2-smart-table@1.6.0", "requires": "@angular/common@^9.0.0" } ] }, "@angular/compiler": { "_from": "@angular/compiler@^14.2.12", "_id": "@angular/compiler@14.3.0", "_inBundle": false, "_integrity": "sha512-E15Rh0t3vA+bctbKnBCaDmLvc3ix+ZBt6yFZmhZalReQ+KpOlvOJv+L9oiFEgg+rYVl2QdvN7US1fvT0PqswLw==", "_location": "/@angular/compiler", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@angular/compiler@^14.2.12", "name": "@angular/compiler", "escapedName": "@angular%2fcompiler", "scope": "@angular", "rawSpec": "^14.2.12", "saveSpec": "[Circular]", "fetchSpec": "^14.2.12" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.3.0.tgz", "_shasum": "106d3ef296700ab7021a52b2e09d8da1384d086a", "_spec": "@angular/compiler@^14.2.12", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "angular" }, "bugs": { "url": "https://github.com/angular/angular/issues" }, "dependencies": { "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]", "_deduped": "tslib" } }, "deprecated": false, "description": "Angular - the compiler library", "engines": { "node": "^14.15.0 || >=16.10.0" }, "es2020": "./fesm2020/compiler.mjs", "esm2020": "./esm2020/index.mjs", "exports": { "./package.json": { "default": "./package.json" }, ".": { "types": "./index.d.ts", "esm2020": "./esm2020/index.mjs", "es2020": "./fesm2020/compiler.mjs", "es2015": "./fesm2015/compiler.mjs", "node": "./fesm2015/compiler.mjs", "default": "./fesm2020/compiler.mjs" }, "./testing": { "types": "./testing/index.d.ts", "esm2020": "./esm2020/testing/testing.mjs", "es2020": "./fesm2020/testing.mjs", "es2015": "./fesm2015/testing.mjs", "node": "./fesm2015/testing.mjs", "default": "./fesm2020/testing.mjs" } }, "fesm2015": "./fesm2015/compiler.mjs", "fesm2020": "./fesm2020/compiler.mjs", "homepage": "https://github.com/angular/angular#readme", "license": "MIT", "module": "./fesm2015/compiler.mjs", "name": "@angular/compiler", "ng-update": { "packageGroup": [ "@angular/core", "@angular/bazel", "@angular/common", "@angular/compiler", "@angular/compiler-cli", "@angular/animations", "@angular/elements", "@angular/platform-browser", "@angular/platform-browser-dynamic", "@angular/forms", "@angular/platform-server", "@angular/upgrade", "@angular/router", "@angular/language-service", "@angular/localize", "@angular/service-worker" ] }, "peerDependencies": { "@angular/core": "14.3.0" }, "peerDependenciesMeta": { "@angular/core": { "optional": true } }, "repository": { "type": "git", "url": "git+https://github.com/angular/angular.git", "directory": "packages/compiler" }, "sideEffects": true, "type": "module", "typings": "./index.d.ts", "version": "14.3.0", "readme": "Angular\n=======\n\nThe sources for this package are in the main [Angular](https://github.com/angular/angular) repo. Please file issues and pull requests against that repo.\n\nUsage information and reference details can be found in [Angular documentation](https://angular.io/docs).\n\nLicense: MIT\n", "readmeFilename": "README.md", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "tslib": "^2.3.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@angular/compiler", "error": "[Circular]", "extraneous": false }, "@angular/core": { "_from": "@angular/core@^14.2.12", "_id": "@angular/core@14.3.0", "_inBundle": false, "_integrity": "sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ==", "_location": "/@angular/core", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@angular/core@^14.2.12", "name": "@angular/core", "escapedName": "@angular%2fcore", "scope": "@angular", "rawSpec": "^14.2.12", "saveSpec": "[Circular]", "fetchSpec": "^14.2.12" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz", "_shasum": "7f44c59b6e866fa4cee7221495040c1ead433895", "_spec": "@angular/core@^14.2.12", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "angular" }, "bugs": { "url": "https://github.com/angular/angular/issues" }, "dependencies": { "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]", "_deduped": "tslib" } }, "deprecated": false, "description": "Angular - the core framework", "engines": { "node": "^14.15.0 || >=16.10.0" }, "es2020": "./fesm2020/core.mjs", "esm2020": "./esm2020/core.mjs", "exports": { "./schematics/*": { "default": "./schematics/*.js" }, "./package.json": { "default": "./package.json" }, ".": { "types": "./index.d.ts", "esm2020": "./esm2020/core.mjs", "es2020": "./fesm2020/core.mjs", "es2015": "./fesm2015/core.mjs", "node": "./fesm2015/core.mjs", "default": "./fesm2020/core.mjs" }, "./testing": { "types": "./testing/index.d.ts", "esm2020": "./esm2020/testing/testing.mjs", "es2020": "./fesm2020/testing.mjs", "es2015": "./fesm2015/testing.mjs", "node": "./fesm2015/testing.mjs", "default": "./fesm2020/testing.mjs" } }, "fesm2015": "./fesm2015/core.mjs", "fesm2020": "./fesm2020/core.mjs", "homepage": "https://github.com/angular/angular#readme", "license": "MIT", "module": "./fesm2015/core.mjs", "name": "@angular/core", "ng-update": { "migrations": "./schematics/migrations.json", "packageGroup": [ "@angular/core", "@angular/bazel", "@angular/common", "@angular/compiler", "@angular/compiler-cli", "@angular/animations", "@angular/elements", "@angular/platform-browser", "@angular/platform-browser-dynamic", "@angular/forms", "@angular/platform-server", "@angular/upgrade", "@angular/router", "@angular/language-service", "@angular/localize", "@angular/service-worker" ] }, "peerDependencies": { "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.11.4 || ~0.12.0" }, "repository": { "type": "git", "url": "git+https://github.com/angular/angular.git", "directory": "packages/core" }, "sideEffects": false, "type": "module", "typings": "./index.d.ts", "version": "14.3.0", "readme": "Angular\n=======\n\nThe sources for this package are in the main [Angular](https://github.com/angular/angular) repo. Please file issues and pull requests against that repo.\n\nUsage information and reference details can be found in [Angular documentation](https://angular.io/docs).\n\nLicense: MIT\n", "readmeFilename": "README.md", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "tslib": "^2.3.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@angular/core", "error": "[Circular]", "extraneous": false, "peerMissing": [ { "requiredBy": "@ng-bootstrap/ng-bootstrap@11.0.1", "requires": "@angular/core@^13.0.0" }, { "requiredBy": "@ng-select/ng-select@8.3.0", "requires": "@angular/core@>=13.0.0 <14.0.0" }, { "requiredBy": "angular-notifier@9.1.0", "requires": "@angular/core@>= 11.0.0 < 12.0.0" }, { "requiredBy": "ng2-smart-table@1.6.0", "requires": "@angular/core@^9.0.0" } ] }, "@angular/flex-layout": { "_from": "@angular/flex-layout@^9.0.0-beta.29", "_id": "@angular/flex-layout@9.0.0-beta.31", "_inBundle": false, "_integrity": "sha512-g94u2mecDl87ORvFRuOBshV/S/ETE4bybClU2e1xXKWNG+rhRHchChneHSonc29ZLyROTjHhmAtKOYojL92uLA==", "_location": "/@angular/flex-layout", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@angular/flex-layout@^9.0.0-beta.29", "name": "@angular/flex-layout", "escapedName": "@angular%2fflex-layout", "scope": "@angular", "rawSpec": "^9.0.0-beta.29", "saveSpec": "[Circular]", "fetchSpec": "^9.0.0-beta.29" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-9.0.0-beta.31.tgz", "_shasum": "9c0672acafa87de4759f7d0a9aab004e7da105d2", "_spec": "@angular/flex-layout@^9.0.0-beta.29", "_where": "/builds/gitlab/osm/ng-ui", "bugs": { "url": "https://github.com/angular/flex-layout/issues" }, "deprecated": "This package has been deprecated. Please see https://blog.angular.io/modern-css-in-angular-layouts-4a259dca9127", "description": "Angular Flex-Layout", "es2015": "./esm2015/flex-layout.js", "homepage": "https://github.com/angular/flex-layout#readme", "keywords": [ "angular", "flex-layout", "flexbox css", "media query", "breakpoints" ], "license": "MIT", "main": "./bundles/flex-layout.umd.js", "module": "./esm5/flex-layout.es5.js", "name": "@angular/flex-layout", "peerDependencies": { "@angular/cdk": "^9.0.0-rc.8", "@angular/core": ">=9.1.5", "@angular/common": ">=9.1.5", "@angular/platform-browser": ">=9.1.5", "rxjs": "^6.0.0", "tslib": "^1.9.0" }, "repository": { "type": "git", "url": "git+https://github.com/angular/flex-layout.git" }, "sideEffects": false, "typings": "./flex-layout.d.ts", "version": "9.0.0-beta.31", "readme": "Angular Flex-Layout\n=======\n\nThe sources for this package are in the main [Angular Flex-Layout](https://github.com/angular/flex-layout) repo. \nPlease file issues and pull requests against that repo.\n\nLicense: MIT\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/@angular/flex-layout", "error": "[Circular]", "extraneous": false }, "@angular/forms": { "_from": "@angular/forms@^14.2.12", "_id": "@angular/forms@14.3.0", "_inBundle": false, "_integrity": "sha512-fBZZC2UFMom2AZPjGQzROPXFWO6kvCsPDKctjJwClVC8PuMrkm+RRyiYRdBbt2qxWHEqOZM2OCQo73xUyZOYHw==", "_location": "/@angular/forms", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@angular/forms@^14.2.12", "name": "@angular/forms", "escapedName": "@angular%2fforms", "scope": "@angular", "rawSpec": "^14.2.12", "saveSpec": "[Circular]", "fetchSpec": "^14.2.12" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.3.0.tgz", "_shasum": "f8659269c9ddef557f04fb782942f5983c5e4556", "_spec": "@angular/forms@^14.2.12", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "angular" }, "bugs": { "url": "https://github.com/angular/angular/issues" }, "dependencies": { "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]", "_deduped": "tslib" } }, "deprecated": false, "description": "Angular - directives and services for creating forms", "engines": { "node": "^14.15.0 || >=16.10.0" }, "es2020": "./fesm2020/forms.mjs", "esm2020": "./esm2020/forms.mjs", "exports": { "./package.json": { "default": "./package.json" }, ".": { "types": "./index.d.ts", "esm2020": "./esm2020/forms.mjs", "es2020": "./fesm2020/forms.mjs", "es2015": "./fesm2015/forms.mjs", "node": "./fesm2015/forms.mjs", "default": "./fesm2020/forms.mjs" } }, "fesm2015": "./fesm2015/forms.mjs", "fesm2020": "./fesm2020/forms.mjs", "homepage": "https://github.com/angular/angular#readme", "license": "MIT", "module": "./fesm2015/forms.mjs", "name": "@angular/forms", "ng-update": { "packageGroup": [ "@angular/core", "@angular/bazel", "@angular/common", "@angular/compiler", "@angular/compiler-cli", "@angular/animations", "@angular/elements", "@angular/platform-browser", "@angular/platform-browser-dynamic", "@angular/forms", "@angular/platform-server", "@angular/upgrade", "@angular/router", "@angular/language-service", "@angular/localize", "@angular/service-worker" ] }, "peerDependencies": { "@angular/core": "14.3.0", "@angular/common": "14.3.0", "@angular/platform-browser": "14.3.0", "rxjs": "^6.5.3 || ^7.4.0" }, "repository": { "type": "git", "url": "git+https://github.com/angular/angular.git", "directory": "packages/forms" }, "sideEffects": false, "type": "module", "typings": "./index.d.ts", "version": "14.3.0", "readme": "Angular\n=======\n\nThe sources for this package are in the main [Angular](https://github.com/angular/angular) repo. Please file issues and pull requests against that repo.\n\nUsage information and reference details can be found in [Angular documentation](https://angular.io/docs).\n\nLicense: MIT\n", "readmeFilename": "README.md", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "tslib": "^2.3.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@angular/forms", "error": "[Circular]", "extraneous": false, "peerMissing": [ { "requiredBy": "@ng-bootstrap/ng-bootstrap@11.0.1", "requires": "@angular/forms@^13.0.0" }, { "requiredBy": "@ng-select/ng-select@8.3.0", "requires": "@angular/forms@>=13.0.0 <14.0.0" }, { "requiredBy": "ng2-smart-table@1.6.0", "requires": "@angular/forms@^9.0.0" } ] }, "@angular/localize": { "_from": "@angular/localize@^14.2.12", "_id": "@angular/localize@14.3.0", "_inBundle": false, "_integrity": "sha512-YmwlOEGnFonfDrIcWqlxXVFFjd0Q6yXeHGZCBFBfwbtjIseiJJ4UBmkTUgFeq7qlWevSFQzHdQnraFRGZpnMig==", "_location": "/@angular/localize", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@angular/localize@^14.2.12", "name": "@angular/localize", "escapedName": "@angular%2flocalize", "scope": "@angular", "rawSpec": "^14.2.12", "saveSpec": "[Circular]", "fetchSpec": "^14.2.12" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.3.0.tgz", "_shasum": "ceed16c7e30b2220881668e5cb2cbf303f525cc3", "_spec": "@angular/localize@^14.2.12", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "angular" }, "bin": { "localize-translate": "tools/bundles/src/translate/cli.js", "localize-extract": "tools/bundles/src/extract/cli.js", "localize-migrate": "tools/bundles/src/migrate/cli.js" }, "bugs": { "url": "https://github.com/angular/angular/issues" }, "dependencies": { "@babel/core": { "_from": "@babel/core@7.18.9", "_id": "@babel/core@7.18.9", "_inBundle": false, "_integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", "_location": "/@babel/core", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "@babel/core@7.18.9", "name": "@babel/core", "escapedName": "@babel%2fcore", "scope": "@babel", "rawSpec": "7.18.9", "saveSpec": "[Circular]", "fetchSpec": "7.18.9" }, "_requiredBy": [ "/@angular/compiler-cli", "/@angular/localize", "/istanbul-lib-instrument", "/karma-coverage/istanbul-lib-instrument" ], "_resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", "_shasum": "805461f967c77ff46c74ca0460ccf4fe933ddd59", "_spec": "@babel/core@7.18.9", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@angular/localize", "author": { "name": "The Babel Team", "url": "https://babel.dev/team" }, "browser": { "./lib/config/files/index.js": "./lib/config/files/index-browser.js", "./lib/config/resolve-targets.js": "./lib/config/resolve-targets-browser.js", "./lib/transform-file.js": "./lib/transform-file-browser.js", "./src/config/files/index.ts": "./src/config/files/index-browser.ts", "./src/config/resolve-targets.ts": "./src/config/resolve-targets-browser.ts", "./src/transform-file.ts": "./src/transform-file-browser.ts" }, "bugs": { "url": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen" }, "dependencies": { "@ampproject/remapping": { "_from": "@ampproject/remapping@^2.1.0", "_id": "@ampproject/remapping@2.2.1", "_inBundle": false, "_integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "_location": "/@ampproject/remapping", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@ampproject/remapping@^2.1.0", "name": "@ampproject/remapping", "escapedName": "@ampproject%2fremapping", "scope": "@ampproject", "rawSpec": "^2.1.0", "saveSpec": "[Circular]", "fetchSpec": "^2.1.0" }, "_requiredBy": [ "/@babel/core" ], "_resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "_shasum": "99e8e11851128b8702cd57c33684f1d0f260b630", "_spec": "@ampproject/remapping@^2.1.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@babel/core", "author": { "name": "Justin Ridgewell", "email": "jridgewell@google.com" }, "bugs": { "url": "https://github.com/ampproject/remapping/issues" }, "dependencies": { "@jridgewell/gen-mapping": { "_from": "@jridgewell/gen-mapping@^0.3.0", "_id": "@jridgewell/gen-mapping@0.3.3", "_inBundle": false, "_integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "_location": "/@jridgewell/gen-mapping", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@jridgewell/gen-mapping@^0.3.0", "name": "@jridgewell/gen-mapping", "escapedName": "@jridgewell%2fgen-mapping", "scope": "@jridgewell", "rawSpec": "^0.3.0", "saveSpec": "[Circular]", "fetchSpec": "^0.3.0" }, "_requiredBy": [ "/@ampproject/remapping", "/@babel/generator", "/@jridgewell/source-map" ], "_resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "_shasum": "7e02e6eb5df901aaedb08514203b096614024098", "_spec": "@jridgewell/gen-mapping@^0.3.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@ampproject/remapping", "author": { "name": "Justin Ridgewell", "email": "justin@ridgewell.name" }, "bugs": { "url": "https://github.com/jridgewell/gen-mapping/issues" }, "dependencies": { "@jridgewell/set-array": { "_from": "@jridgewell/set-array@^1.0.1", "_id": "@jridgewell/set-array@1.1.2", "_inBundle": false, "_integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "_location": "/@jridgewell/set-array", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@jridgewell/set-array@^1.0.1", "name": "@jridgewell/set-array", "escapedName": "@jridgewell%2fset-array", "scope": "@jridgewell", "rawSpec": "^1.0.1", "saveSpec": "[Circular]", "fetchSpec": "^1.0.1" }, "_requiredBy": [ "/@angular-devkit/build-angular/@babel/generator/@jridgewell/gen-mapping", "/@angular-devkit/build-angular/@jridgewell/gen-mapping", "/@jridgewell/gen-mapping" ], "_resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "_shasum": "7c6cf998d6d20b914c0a55a91ae928ff25965e72", "_spec": "@jridgewell/set-array@^1.0.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/gen-mapping", "author": { "name": "Justin Ridgewell", "email": "justin@ridgewell.name" }, "bugs": { "url": "https://github.com/jridgewell/set-array/issues" }, "deprecated": false, "description": "Like a Set, but provides the index of the `key` in the backing array", "devDependencies": { "@rollup/plugin-typescript": "8.3.0", "@types/mocha": "9.1.1", "@types/node": "17.0.29", "@typescript-eslint/eslint-plugin": "5.10.0", "@typescript-eslint/parser": "5.10.0", "c8": "7.11.0", "eslint": "8.7.0", "eslint-config-prettier": "8.3.0", "mocha": "9.2.0", "npm-run-all": "4.1.5", "prettier": "2.5.1", "rollup": "2.66.0", "typescript": "4.5.5" }, "engines": { "node": ">=6.0.0" }, "exports": { ".": [ { "types": "./dist/types/set-array.d.ts", "browser": "./dist/set-array.umd.js", "require": "./dist/set-array.umd.js", "import": "./dist/set-array.mjs" }, "./dist/set-array.umd.js" ], "./package.json": "./package.json" }, "files": [ "dist", "src" ], "homepage": "https://github.com/jridgewell/set-array#readme", "keywords": [], "license": "MIT", "main": "dist/set-array.umd.js", "module": "dist/set-array.mjs", "name": "@jridgewell/set-array", "repository": { "type": "git", "url": "git+https://github.com/jridgewell/set-array.git" }, "scripts": { "build": "run-s -n build:*", "build:rollup": "rollup -c rollup.config.js", "build:ts": "tsc --project tsconfig.build.json", "lint": "run-s -n lint:*", "lint:prettier": "npm run test:lint:prettier -- --write", "lint:ts": "npm run test:lint:ts -- --fix", "prebuild": "rm -rf dist", "prepublishOnly": "npm run preversion", "pretest": "run-s build:rollup", "preversion": "run-s test build", "test": "run-s -n test:lint test:only", "test:coverage": "c8 mocha", "test:debug": "mocha --inspect-brk", "test:lint": "run-s -n test:lint:*", "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", "test:lint:ts": "eslint '{src,test}/**/*.ts'", "test:only": "mocha", "test:watch": "mocha --watch" }, "typings": "dist/types/set-array.d.ts", "version": "1.1.2", "readme": "# @jridgewell/set-array\n\n> Like a Set, but provides the index of the `key` in the backing array\n\nThis is designed to allow synchronizing a second array with the contents of the backing array, like\nhow in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, and there\nare never duplicates.\n\n## Installation\n\n```sh\nnpm install @jridgewell/set-array\n```\n\n## Usage\n\n```js\nimport { SetArray, get, put, pop } from '@jridgewell/set-array';\n\nconst sa = new SetArray();\n\nlet index = put(sa, 'first');\nassert.strictEqual(index, 0);\n\nindex = put(sa, 'second');\nassert.strictEqual(index, 1);\n\nassert.deepEqual(sa.array, [ 'first', 'second' ]);\n\nindex = get(sa, 'first');\nassert.strictEqual(index, 0);\n\npop(sa);\nindex = get(sa, 'second');\nassert.strictEqual(index, undefined);\nassert.deepEqual(sa.array, [ 'first' ]);\n```\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/set-array", "error": "[Circular]", "extraneous": false }, "@jridgewell/sourcemap-codec": { "_from": "@jridgewell/sourcemap-codec@^1.4.10", "_id": "@jridgewell/sourcemap-codec@1.4.15", "_inBundle": false, "_integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "_location": "/@jridgewell/sourcemap-codec", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@jridgewell/sourcemap-codec@^1.4.10", "name": "@jridgewell/sourcemap-codec", "escapedName": "@jridgewell%2fsourcemap-codec", "scope": "@jridgewell", "rawSpec": "^1.4.10", "saveSpec": "[Circular]", "fetchSpec": "^1.4.10" }, "_requiredBy": [ "/@angular-devkit/build-angular/@babel/generator/@jridgewell/gen-mapping", "/@angular-devkit/build-angular/@jridgewell/gen-mapping", "/@jridgewell/gen-mapping", "/@jridgewell/trace-mapping" ], "_resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "_shasum": "d7c6e6755c78567a951e04ab52ef0fd26de59f32", "_spec": "@jridgewell/sourcemap-codec@^1.4.10", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/gen-mapping", "author": { "name": "Rich Harris" }, "bugs": { "url": "https://github.com/jridgewell/sourcemap-codec/issues" }, "deprecated": false, "description": "Encode/decode sourcemap mappings", "devDependencies": { "@rollup/plugin-typescript": "8.3.0", "@types/node": "17.0.15", "@typescript-eslint/eslint-plugin": "5.10.0", "@typescript-eslint/parser": "5.10.0", "benchmark": "2.1.4", "c8": "7.11.2", "eslint": "8.7.0", "eslint-config-prettier": "8.3.0", "mocha": "9.2.0", "npm-run-all": "4.1.5", "prettier": "2.5.1", "rollup": "2.64.0", "source-map": "0.6.1", "source-map-js": "1.0.2", "sourcemap-codec": "1.4.8", "typescript": "4.5.4" }, "exports": { ".": [ { "types": "./dist/types/sourcemap-codec.d.ts", "browser": "./dist/sourcemap-codec.umd.js", "require": "./dist/sourcemap-codec.umd.js", "import": "./dist/sourcemap-codec.mjs" }, "./dist/sourcemap-codec.umd.js" ], "./package.json": "./package.json" }, "files": [ "dist" ], "homepage": "https://github.com/jridgewell/sourcemap-codec#readme", "keywords": [ "sourcemap", "vlq" ], "license": "MIT", "main": "dist/sourcemap-codec.umd.js", "module": "dist/sourcemap-codec.mjs", "name": "@jridgewell/sourcemap-codec", "repository": { "type": "git", "url": "git+https://github.com/jridgewell/sourcemap-codec.git" }, "scripts": { "benchmark": "run-s build:rollup benchmark:*", "benchmark:install": "cd benchmark && npm install", "benchmark:only": "node --expose-gc benchmark/index.js", "build": "run-s -n build:*", "build:rollup": "rollup -c rollup.config.js", "build:ts": "tsc --project tsconfig.build.json", "lint": "run-s -n lint:*", "lint:prettier": "npm run test:lint:prettier -- --write", "lint:ts": "npm run test:lint:ts -- --fix", "prebuild": "rm -rf dist", "prepublishOnly": "npm run preversion", "pretest": "run-s build:rollup", "preversion": "run-s test build", "test": "run-s -n test:lint test:only", "test:coverage": "c8 mocha", "test:debug": "mocha --inspect-brk", "test:lint": "run-s -n test:lint:*", "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", "test:lint:ts": "eslint '{src,test}/**/*.ts'", "test:only": "mocha", "test:watch": "mocha --watch" }, "types": "dist/types/sourcemap-codec.d.ts", "version": "1.4.15", "readme": "# @jridgewell/sourcemap-codec\n\nEncode/decode the `mappings` property of a [sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit).\n\n\n## Why?\n\nSourcemaps are difficult to generate and manipulate, because the `mappings` property – the part that actually links the generated code back to the original source – is encoded using an obscure method called [Variable-length quantity](https://en.wikipedia.org/wiki/Variable-length_quantity). On top of that, each segment in the mapping contains offsets rather than absolute indices, which means that you can't look at a segment in isolation – you have to understand the whole sourcemap.\n\nThis package makes the process slightly easier.\n\n\n## Installation\n\n```bash\nnpm install @jridgewell/sourcemap-codec\n```\n\n\n## Usage\n\n```js\nimport { encode, decode } from '@jridgewell/sourcemap-codec';\n\nvar decoded = decode( ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );\n\nassert.deepEqual( decoded, [\n\t// the first line (of the generated code) has no mappings,\n\t// as shown by the starting semi-colon (which separates lines)\n\t[],\n\n\t// the second line contains four (comma-separated) segments\n\t[\n\t\t// segments are encoded as you'd expect:\n\t\t// [ generatedCodeColumn, sourceIndex, sourceCodeLine, sourceCodeColumn, nameIndex ]\n\n\t\t// i.e. the first segment begins at column 2, and maps back to the second column\n\t\t// of the second line (both zero-based) of the 0th source, and uses the 0th\n\t\t// name in the `map.names` array\n\t\t[ 2, 0, 2, 2, 0 ],\n\n\t\t// the remaining segments are 4-length rather than 5-length,\n\t\t// because they don't map a name\n\t\t[ 4, 0, 2, 4 ],\n\t\t[ 6, 0, 2, 5 ],\n\t\t[ 7, 0, 2, 7 ]\n\t],\n\n\t// the final line contains two segments\n\t[\n\t\t[ 2, 1, 10, 19 ],\n\t\t[ 12, 1, 11, 20 ]\n\t]\n]);\n\nvar encoded = encode( decoded );\nassert.equal( encoded, ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );\n```\n\n## Benchmarks\n\n```\nnode v18.0.0\n\namp.js.map - 45120 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec 5479160 bytes\nsourcemap-codec 5659336 bytes\nsource-map-0.6.1 17144440 bytes\nsource-map-0.8.0 6867424 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 502 ops/sec ±1.03% (90 runs sampled)\ndecode: sourcemap-codec x 445 ops/sec ±0.97% (92 runs sampled)\ndecode: source-map-0.6.1 x 36.01 ops/sec ±1.64% (49 runs sampled)\ndecode: source-map-0.8.0 x 367 ops/sec ±0.04% (95 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec 1261620 bytes\nsourcemap-codec 9119248 bytes\nsource-map-0.6.1 8968560 bytes\nsource-map-0.8.0 8952952 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 738 ops/sec ±0.42% (98 runs sampled)\nencode: sourcemap-codec x 238 ops/sec ±0.73% (88 runs sampled)\nencode: source-map-0.6.1 x 162 ops/sec ±0.43% (84 runs sampled)\nencode: source-map-0.8.0 x 191 ops/sec ±0.34% (90 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\nbabel.min.js.map - 347793 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec 35338184 bytes\nsourcemap-codec 35922736 bytes\nsource-map-0.6.1 62366360 bytes\nsource-map-0.8.0 44337416 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 40.35 ops/sec ±4.47% (54 runs sampled)\ndecode: sourcemap-codec x 36.76 ops/sec ±3.67% (51 runs sampled)\ndecode: source-map-0.6.1 x 4.44 ops/sec ±2.15% (16 runs sampled)\ndecode: source-map-0.8.0 x 59.35 ops/sec ±0.05% (78 runs sampled)\nFastest is decode: source-map-0.8.0\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec 7212604 bytes\nsourcemap-codec 21421456 bytes\nsource-map-0.6.1 25286888 bytes\nsource-map-0.8.0 25498744 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 112 ops/sec ±0.13% (84 runs sampled)\nencode: sourcemap-codec x 30.23 ops/sec ±2.76% (53 runs sampled)\nencode: source-map-0.6.1 x 19.43 ops/sec ±3.70% (37 runs sampled)\nencode: source-map-0.8.0 x 19.40 ops/sec ±3.26% (37 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\npreact.js.map - 1992 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec 500272 bytes\nsourcemap-codec 516864 bytes\nsource-map-0.6.1 1596672 bytes\nsource-map-0.8.0 517272 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 16,137 ops/sec ±0.17% (99 runs sampled)\ndecode: sourcemap-codec x 12,139 ops/sec ±0.13% (99 runs sampled)\ndecode: source-map-0.6.1 x 1,264 ops/sec ±0.12% (100 runs sampled)\ndecode: source-map-0.8.0 x 9,894 ops/sec ±0.08% (101 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec 321026 bytes\nsourcemap-codec 830832 bytes\nsource-map-0.6.1 586608 bytes\nsource-map-0.8.0 586680 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 19,876 ops/sec ±0.78% (95 runs sampled)\nencode: sourcemap-codec x 6,983 ops/sec ±0.15% (100 runs sampled)\nencode: source-map-0.6.1 x 5,070 ops/sec ±0.12% (102 runs sampled)\nencode: source-map-0.8.0 x 5,641 ops/sec ±0.17% (100 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\nreact.js.map - 5726 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec 734848 bytes\nsourcemap-codec 954200 bytes\nsource-map-0.6.1 2276432 bytes\nsource-map-0.8.0 955488 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 5,723 ops/sec ±0.12% (98 runs sampled)\ndecode: sourcemap-codec x 4,555 ops/sec ±0.09% (101 runs sampled)\ndecode: source-map-0.6.1 x 437 ops/sec ±0.11% (93 runs sampled)\ndecode: source-map-0.8.0 x 3,441 ops/sec ±0.15% (100 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec 638672 bytes\nsourcemap-codec 1109840 bytes\nsource-map-0.6.1 1321224 bytes\nsource-map-0.8.0 1324448 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 6,801 ops/sec ±0.48% (98 runs sampled)\nencode: sourcemap-codec x 2,533 ops/sec ±0.13% (101 runs sampled)\nencode: source-map-0.6.1 x 2,248 ops/sec ±0.08% (100 runs sampled)\nencode: source-map-0.8.0 x 2,303 ops/sec ±0.15% (100 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n```\n\n# License\n\nMIT\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/sourcemap-codec", "error": "[Circular]", "extraneous": false }, "@jridgewell/trace-mapping": { "_from": "@jridgewell/trace-mapping@^0.3.9", "_id": "@jridgewell/trace-mapping@0.3.20", "_inBundle": false, "_integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "_location": "/@jridgewell/trace-mapping", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@jridgewell/trace-mapping@^0.3.9", "name": "@jridgewell/trace-mapping", "escapedName": "@jridgewell%2ftrace-mapping", "scope": "@jridgewell", "rawSpec": "^0.3.9", "saveSpec": "[Circular]", "fetchSpec": "^0.3.9" }, "_requiredBy": [ "/@ampproject/remapping", "/@angular-devkit/build-angular/@ampproject/remapping", "/@angular-devkit/build-angular/@babel/generator/@jridgewell/gen-mapping", "/@babel/generator", "/@jridgewell/gen-mapping", "/@jridgewell/source-map", "/terser-webpack-plugin" ], "_resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", "_shasum": "72e45707cf240fa6b081d0366f8265b0cd10197f", "_spec": "@jridgewell/trace-mapping@^0.3.9", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@ampproject/remapping", "author": { "name": "Justin Ridgewell", "email": "justin@ridgewell.name" }, "bugs": { "url": "https://github.com/jridgewell/trace-mapping/issues" }, "dependencies": {}, "deprecated": false, "description": "Trace the original position through a source map", "devDependencies": { "@rollup/plugin-typescript": "8.5.0", "@typescript-eslint/eslint-plugin": "5.39.0", "@typescript-eslint/parser": "5.39.0", "ava": "4.3.3", "benchmark": "2.1.4", "c8": "7.12.0", "esbuild": "0.15.10", "eslint": "8.25.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-no-only-tests": "3.0.0", "npm-run-all": "4.1.5", "prettier": "2.7.1", "rollup": "2.79.1", "tsx": "3.10.1", "typescript": "4.8.4" }, "exports": { ".": [ { "types": "./dist/types/trace-mapping.d.ts", "browser": "./dist/trace-mapping.umd.js", "require": "./dist/trace-mapping.umd.js", "import": "./dist/trace-mapping.mjs" }, "./dist/trace-mapping.umd.js" ], "./package.json": "./package.json" }, "files": [ "dist" ], "homepage": "https://github.com/jridgewell/trace-mapping#readme", "keywords": [ "source", "map" ], "license": "MIT", "main": "dist/trace-mapping.umd.js", "module": "dist/trace-mapping.mjs", "name": "@jridgewell/trace-mapping", "repository": { "type": "git", "url": "git+https://github.com/jridgewell/trace-mapping.git" }, "scripts": { "benchmark": "run-s build:rollup benchmark:*", "benchmark:install": "cd benchmark && npm install", "benchmark:only": "node --expose-gc benchmark/index.mjs", "build": "run-s -n build:*", "build:rollup": "rollup -c rollup.config.js", "build:ts": "tsc --project tsconfig.build.json", "lint": "run-s -n lint:*", "lint:prettier": "npm run test:lint:prettier -- --write", "lint:ts": "npm run test:lint:ts -- --fix", "prebuild": "rm -rf dist", "prepublishOnly": "npm run preversion", "preversion": "run-s test build", "test": "run-s -n test:lint test:only", "test:debug": "ava debug", "test:lint": "run-s -n test:lint:*", "test:lint:prettier": "prettier --check '{src,test}/**/*.ts' '**/*.md'", "test:lint:ts": "eslint '{src,test}/**/*.ts'", "test:only": "c8 ava", "test:watch": "ava --watch" }, "types": "dist/types/trace-mapping.d.ts", "version": "0.3.20", "readme": "# @jridgewell/trace-mapping\n\n> Trace the original position through a source map\n\n`trace-mapping` allows you to take the line and column of an output file and trace it to the\noriginal location in the source file through a source map.\n\nYou may already be familiar with the [`source-map`][source-map] package's `SourceMapConsumer`. This\nprovides the same `originalPositionFor` and `generatedPositionFor` API, without requiring WASM.\n\n## Installation\n\n```sh\nnpm install @jridgewell/trace-mapping\n```\n\n## Usage\n\n```typescript\nimport {\n TraceMap,\n originalPositionFor,\n generatedPositionFor,\n sourceContentFor,\n} from '@jridgewell/trace-mapping';\n\nconst tracer = new TraceMap({\n version: 3,\n sources: ['input.js'],\n sourcesContent: ['content of input.js'],\n names: ['foo'],\n mappings: 'KAyCIA',\n});\n\n// Lines start at line 1, columns at column 0.\nconst traced = originalPositionFor(tracer, { line: 1, column: 5 });\nassert.deepEqual(traced, {\n source: 'input.js',\n line: 42,\n column: 4,\n name: 'foo',\n});\n\nconst content = sourceContentFor(tracer, traced.source);\nassert.strictEqual(content, 'content for input.js');\n\nconst generated = generatedPositionFor(tracer, {\n source: 'input.js',\n line: 42,\n column: 4,\n});\nassert.deepEqual(generated, {\n line: 1,\n column: 5,\n});\n```\n\nWe also provide a lower level API to get the actual segment that matches our line and column. Unlike\n`originalPositionFor`, `traceSegment` uses a 0-base for `line`:\n\n```typescript\nimport { traceSegment } from '@jridgewell/trace-mapping';\n\n// line is 0-base.\nconst traced = traceSegment(tracer, /* line */ 0, /* column */ 5);\n\n// Segments are [outputColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]\n// Again, line is 0-base and so is sourceLine\nassert.deepEqual(traced, [5, 0, 41, 4, 0]);\n```\n\n### SectionedSourceMaps\n\nThe sourcemap spec defines a special `sections` field that's designed to handle concatenation of\noutput code with associated sourcemaps. This type of sourcemap is rarely used (no major build tool\nproduces it), but if you are hand coding a concatenation you may need it. We provide an `AnyMap`\nhelper that can receive either a regular sourcemap or a `SectionedSourceMap` and returns a\n`TraceMap` instance:\n\n```typescript\nimport { AnyMap } from '@jridgewell/trace-mapping';\nconst fooOutput = 'foo';\nconst barOutput = 'bar';\nconst output = [fooOutput, barOutput].join('\\n');\n\nconst sectioned = new AnyMap({\n version: 3,\n sections: [\n {\n // 0-base line and column\n offset: { line: 0, column: 0 },\n // fooOutput's sourcemap\n map: {\n version: 3,\n sources: ['foo.js'],\n names: ['foo'],\n mappings: 'AAAAA',\n },\n },\n {\n // barOutput's sourcemap will not affect the first line, only the second\n offset: { line: 1, column: 0 },\n map: {\n version: 3,\n sources: ['bar.js'],\n names: ['bar'],\n mappings: 'AAAAA',\n },\n },\n ],\n});\n\nconst traced = originalPositionFor(sectioned, {\n line: 2,\n column: 0,\n});\n\nassert.deepEqual(traced, {\n source: 'bar.js',\n line: 1,\n column: 0,\n name: 'bar',\n});\n```\n\n## Benchmarks\n\n```\nnode v18.0.0\n\namp.js.map - 45120 segments\n\nMemory Usage:\ntrace-mapping decoded 562400 bytes\ntrace-mapping encoded 5706544 bytes\nsource-map-js 10717664 bytes\nsource-map-0.6.1 17446384 bytes\nsource-map-0.8.0 9701757 bytes\nSmallest memory usage is trace-mapping decoded\n\nInit speed:\ntrace-mapping: decoded JSON input x 180 ops/sec ±0.34% (85 runs sampled)\ntrace-mapping: encoded JSON input x 364 ops/sec ±1.77% (89 runs sampled)\ntrace-mapping: decoded Object input x 3,116 ops/sec ±0.50% (96 runs sampled)\ntrace-mapping: encoded Object input x 410 ops/sec ±2.62% (85 runs sampled)\nsource-map-js: encoded Object input x 84.23 ops/sec ±0.91% (73 runs sampled)\nsource-map-0.6.1: encoded Object input x 37.21 ops/sec ±2.08% (51 runs sampled)\nFastest is trace-mapping: decoded Object input\n\nTrace speed:\ntrace-mapping: decoded originalPositionFor x 3,952,212 ops/sec ±0.17% (98 runs sampled)\ntrace-mapping: encoded originalPositionFor x 3,487,468 ops/sec ±1.58% (90 runs sampled)\nsource-map-js: encoded originalPositionFor x 827,730 ops/sec ±0.78% (97 runs sampled)\nsource-map-0.6.1: encoded originalPositionFor x 748,991 ops/sec ±0.53% (94 runs sampled)\nsource-map-0.8.0: encoded originalPositionFor x 2,532,894 ops/sec ±0.57% (95 runs sampled)\nFastest is trace-mapping: decoded originalPositionFor\n\n\n***\n\n\nbabel.min.js.map - 347793 segments\n\nMemory Usage:\ntrace-mapping decoded 89832 bytes\ntrace-mapping encoded 35474640 bytes\nsource-map-js 51257176 bytes\nsource-map-0.6.1 63515664 bytes\nsource-map-0.8.0 42933752 bytes\nSmallest memory usage is trace-mapping decoded\n\nInit speed:\ntrace-mapping: decoded JSON input x 15.41 ops/sec ±8.65% (34 runs sampled)\ntrace-mapping: encoded JSON input x 28.20 ops/sec ±12.87% (42 runs sampled)\ntrace-mapping: decoded Object input x 964 ops/sec ±0.36% (99 runs sampled)\ntrace-mapping: encoded Object input x 31.77 ops/sec ±13.79% (45 runs sampled)\nsource-map-js: encoded Object input x 6.45 ops/sec ±5.16% (21 runs sampled)\nsource-map-0.6.1: encoded Object input x 4.07 ops/sec ±5.24% (15 runs sampled)\nFastest is trace-mapping: decoded Object input\n\nTrace speed:\ntrace-mapping: decoded originalPositionFor x 7,183,038 ops/sec ±0.58% (95 runs sampled)\ntrace-mapping: encoded originalPositionFor x 5,192,185 ops/sec ±0.41% (100 runs sampled)\nsource-map-js: encoded originalPositionFor x 4,259,489 ops/sec ±0.79% (94 runs sampled)\nsource-map-0.6.1: encoded originalPositionFor x 3,742,629 ops/sec ±0.71% (95 runs sampled)\nsource-map-0.8.0: encoded originalPositionFor x 6,270,211 ops/sec ±0.64% (94 runs sampled)\nFastest is trace-mapping: decoded originalPositionFor\n\n\n***\n\n\npreact.js.map - 1992 segments\n\nMemory Usage:\ntrace-mapping decoded 37128 bytes\ntrace-mapping encoded 247280 bytes\nsource-map-js 1143536 bytes\nsource-map-0.6.1 1290992 bytes\nsource-map-0.8.0 96544 bytes\nSmallest memory usage is trace-mapping decoded\n\nInit speed:\ntrace-mapping: decoded JSON input x 3,483 ops/sec ±0.30% (98 runs sampled)\ntrace-mapping: encoded JSON input x 6,092 ops/sec ±0.18% (97 runs sampled)\ntrace-mapping: decoded Object input x 249,076 ops/sec ±0.24% (98 runs sampled)\ntrace-mapping: encoded Object input x 14,555 ops/sec ±0.48% (100 runs sampled)\nsource-map-js: encoded Object input x 2,447 ops/sec ±0.36% (99 runs sampled)\nsource-map-0.6.1: encoded Object input x 1,201 ops/sec ±0.57% (96 runs sampled)\nFastest is trace-mapping: decoded Object input\n\nTrace speed:\ntrace-mapping: decoded originalPositionFor x 7,620,192 ops/sec ±0.09% (99 runs sampled)\ntrace-mapping: encoded originalPositionFor x 6,872,554 ops/sec ±0.30% (97 runs sampled)\nsource-map-js: encoded originalPositionFor x 2,489,570 ops/sec ±0.35% (94 runs sampled)\nsource-map-0.6.1: encoded originalPositionFor x 1,698,633 ops/sec ±0.28% (98 runs sampled)\nsource-map-0.8.0: encoded originalPositionFor x 4,015,644 ops/sec ±0.22% (98 runs sampled)\nFastest is trace-mapping: decoded originalPositionFor\n\n\n***\n\n\nreact.js.map - 5726 segments\n\nMemory Usage:\ntrace-mapping decoded 16176 bytes\ntrace-mapping encoded 681552 bytes\nsource-map-js 2418352 bytes\nsource-map-0.6.1 2443672 bytes\nsource-map-0.8.0 111768 bytes\nSmallest memory usage is trace-mapping decoded\n\nInit speed:\ntrace-mapping: decoded JSON input x 1,720 ops/sec ±0.34% (98 runs sampled)\ntrace-mapping: encoded JSON input x 4,406 ops/sec ±0.35% (100 runs sampled)\ntrace-mapping: decoded Object input x 92,122 ops/sec ±0.10% (99 runs sampled)\ntrace-mapping: encoded Object input x 5,385 ops/sec ±0.37% (99 runs sampled)\nsource-map-js: encoded Object input x 794 ops/sec ±0.40% (98 runs sampled)\nsource-map-0.6.1: encoded Object input x 416 ops/sec ±0.54% (91 runs sampled)\nFastest is trace-mapping: decoded Object input\n\nTrace speed:\ntrace-mapping: decoded originalPositionFor x 32,759,519 ops/sec ±0.33% (100 runs sampled)\ntrace-mapping: encoded originalPositionFor x 31,116,306 ops/sec ±0.33% (97 runs sampled)\nsource-map-js: encoded originalPositionFor x 17,458,435 ops/sec ±0.44% (97 runs sampled)\nsource-map-0.6.1: encoded originalPositionFor x 12,687,097 ops/sec ±0.43% (95 runs sampled)\nsource-map-0.8.0: encoded originalPositionFor x 23,538,275 ops/sec ±0.38% (95 runs sampled)\nFastest is trace-mapping: decoded originalPositionFor\n```\n\n[source-map]: https://www.npmjs.com/package/source-map\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/trace-mapping", "error": "[Circular]", "extraneous": false, "_deduped": "@jridgewell/trace-mapping" } }, "deprecated": false, "description": "Generate source maps", "devDependencies": { "@rollup/plugin-typescript": "8.3.2", "@types/mocha": "9.1.1", "@types/node": "17.0.29", "@typescript-eslint/eslint-plugin": "5.21.0", "@typescript-eslint/parser": "5.21.0", "benchmark": "2.1.4", "c8": "7.11.2", "eslint": "8.14.0", "eslint-config-prettier": "8.5.0", "mocha": "9.2.2", "npm-run-all": "4.1.5", "prettier": "2.6.2", "rollup": "2.70.2", "typescript": "4.6.3" }, "engines": { "node": ">=6.0.0" }, "exports": { ".": [ { "types": "./dist/types/gen-mapping.d.ts", "browser": "./dist/gen-mapping.umd.js", "require": "./dist/gen-mapping.umd.js", "import": "./dist/gen-mapping.mjs" }, "./dist/gen-mapping.umd.js" ], "./package.json": "./package.json" }, "files": [ "dist" ], "homepage": "https://github.com/jridgewell/gen-mapping#readme", "keywords": [ "source", "map" ], "license": "MIT", "main": "dist/gen-mapping.umd.js", "module": "dist/gen-mapping.mjs", "name": "@jridgewell/gen-mapping", "repository": { "type": "git", "url": "git+https://github.com/jridgewell/gen-mapping.git" }, "scripts": { "benchmark": "run-s build:rollup benchmark:*", "benchmark:install": "cd benchmark && npm install", "benchmark:only": "node benchmark/index.mjs", "build": "run-s -n build:*", "build:rollup": "rollup -c rollup.config.js", "build:ts": "tsc --project tsconfig.build.json", "lint": "run-s -n lint:*", "lint:prettier": "npm run test:lint:prettier -- --write", "lint:ts": "npm run test:lint:ts -- --fix", "prebuild": "rm -rf dist", "prepublishOnly": "npm run preversion", "pretest": "run-s build:rollup", "preversion": "run-s test build", "test": "run-s -n test:lint test:coverage", "test:coverage": "c8 mocha", "test:debug": "mocha --inspect-brk", "test:lint": "run-s -n test:lint:*", "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", "test:lint:ts": "eslint '{src,test}/**/*.ts'", "test:only": "mocha", "test:watch": "run-p 'build:rollup -- --watch' 'test:only -- --watch'" }, "types": "dist/types/gen-mapping.d.ts", "version": "0.3.3", "readme": "# @jridgewell/gen-mapping\n\n> Generate source maps\n\n`gen-mapping` allows you to generate a source map during transpilation or minification.\nWith a source map, you're able to trace the original location in the source file, either in Chrome's\nDevTools or using a library like [`@jridgewell/trace-mapping`][trace-mapping].\n\nYou may already be familiar with the [`source-map`][source-map] package's `SourceMapGenerator`. This\nprovides the same `addMapping` and `setSourceContent` API.\n\n## Installation\n\n```sh\nnpm install @jridgewell/gen-mapping\n```\n\n## Usage\n\n```typescript\nimport { GenMapping, addMapping, setSourceContent, toEncodedMap, toDecodedMap } from '@jridgewell/gen-mapping';\n\nconst map = new GenMapping({\n file: 'output.js',\n sourceRoot: 'https://example.com/',\n});\n\nsetSourceContent(map, 'input.js', `function foo() {}`);\n\naddMapping(map, {\n // Lines start at line 1, columns at column 0.\n generated: { line: 1, column: 0 },\n source: 'input.js',\n original: { line: 1, column: 0 },\n});\n\naddMapping(map, {\n generated: { line: 1, column: 9 },\n source: 'input.js',\n original: { line: 1, column: 9 },\n name: 'foo',\n});\n\nassert.deepEqual(toDecodedMap(map), {\n version: 3,\n file: 'output.js',\n names: ['foo'],\n sourceRoot: 'https://example.com/',\n sources: ['input.js'],\n sourcesContent: ['function foo() {}'],\n mappings: [\n [ [0, 0, 0, 0], [9, 0, 0, 9, 0] ]\n ],\n});\n\nassert.deepEqual(toEncodedMap(map), {\n version: 3,\n file: 'output.js',\n names: ['foo'],\n sourceRoot: 'https://example.com/',\n sources: ['input.js'],\n sourcesContent: ['function foo() {}'],\n mappings: 'AAAA,SAASA',\n});\n```\n\n### Smaller Sourcemaps\n\nNot everything needs to be added to a sourcemap, and needless markings can cause signficantly\nlarger file sizes. `gen-mapping` exposes `maybeAddSegment`/`maybeAddMapping` APIs that will\nintelligently determine if this marking adds useful information. If not, the marking will be\nskipped.\n\n```typescript\nimport { maybeAddMapping } from '@jridgewell/gen-mapping';\n\nconst map = new GenMapping();\n\n// Adding a sourceless marking at the beginning of a line isn't useful.\nmaybeAddMapping(map, {\n generated: { line: 1, column: 0 },\n});\n\n// Adding a new source marking is useful.\nmaybeAddMapping(map, {\n generated: { line: 1, column: 0 },\n source: 'input.js',\n original: { line: 1, column: 0 },\n});\n\n// But adding another marking pointing to the exact same original location isn't, even if the\n// generated column changed.\nmaybeAddMapping(map, {\n generated: { line: 1, column: 9 },\n source: 'input.js',\n original: { line: 1, column: 0 },\n});\n\nassert.deepEqual(toEncodedMap(map), {\n version: 3,\n names: [],\n sources: ['input.js'],\n sourcesContent: [null],\n mappings: 'AAAA',\n});\n```\n\n## Benchmarks\n\n```\nnode v18.0.0\n\namp.js.map\nMemory Usage:\ngen-mapping: addSegment 5852872 bytes\ngen-mapping: addMapping 7716042 bytes\nsource-map-js 6143250 bytes\nsource-map-0.6.1 6124102 bytes\nsource-map-0.8.0 6121173 bytes\nSmallest memory usage is gen-mapping: addSegment\n\nAdding speed:\ngen-mapping: addSegment x 441 ops/sec ±2.07% (90 runs sampled)\ngen-mapping: addMapping x 350 ops/sec ±2.40% (86 runs sampled)\nsource-map-js: addMapping x 169 ops/sec ±2.42% (80 runs sampled)\nsource-map-0.6.1: addMapping x 167 ops/sec ±2.56% (80 runs sampled)\nsource-map-0.8.0: addMapping x 168 ops/sec ±2.52% (80 runs sampled)\nFastest is gen-mapping: addSegment\n\nGenerate speed:\ngen-mapping: decoded output x 150,824,370 ops/sec ±0.07% (102 runs sampled)\ngen-mapping: encoded output x 663 ops/sec ±0.22% (98 runs sampled)\nsource-map-js: encoded output x 197 ops/sec ±0.45% (84 runs sampled)\nsource-map-0.6.1: encoded output x 198 ops/sec ±0.33% (85 runs sampled)\nsource-map-0.8.0: encoded output x 197 ops/sec ±0.06% (93 runs sampled)\nFastest is gen-mapping: decoded output\n\n\n***\n\n\nbabel.min.js.map\nMemory Usage:\ngen-mapping: addSegment 37578063 bytes\ngen-mapping: addMapping 37212897 bytes\nsource-map-js 47638527 bytes\nsource-map-0.6.1 47690503 bytes\nsource-map-0.8.0 47470188 bytes\nSmallest memory usage is gen-mapping: addMapping\n\nAdding speed:\ngen-mapping: addSegment x 31.05 ops/sec ±8.31% (43 runs sampled)\ngen-mapping: addMapping x 29.83 ops/sec ±7.36% (51 runs sampled)\nsource-map-js: addMapping x 20.73 ops/sec ±6.22% (38 runs sampled)\nsource-map-0.6.1: addMapping x 20.03 ops/sec ±10.51% (38 runs sampled)\nsource-map-0.8.0: addMapping x 19.30 ops/sec ±8.27% (37 runs sampled)\nFastest is gen-mapping: addSegment\n\nGenerate speed:\ngen-mapping: decoded output x 381,379,234 ops/sec ±0.29% (96 runs sampled)\ngen-mapping: encoded output x 95.15 ops/sec ±2.98% (72 runs sampled)\nsource-map-js: encoded output x 15.20 ops/sec ±7.41% (33 runs sampled)\nsource-map-0.6.1: encoded output x 16.36 ops/sec ±10.46% (31 runs sampled)\nsource-map-0.8.0: encoded output x 16.06 ops/sec ±6.45% (31 runs sampled)\nFastest is gen-mapping: decoded output\n\n\n***\n\n\npreact.js.map\nMemory Usage:\ngen-mapping: addSegment 416247 bytes\ngen-mapping: addMapping 419824 bytes\nsource-map-js 1024619 bytes\nsource-map-0.6.1 1146004 bytes\nsource-map-0.8.0 1113250 bytes\nSmallest memory usage is gen-mapping: addSegment\n\nAdding speed:\ngen-mapping: addSegment x 13,755 ops/sec ±0.15% (98 runs sampled)\ngen-mapping: addMapping x 13,013 ops/sec ±0.11% (101 runs sampled)\nsource-map-js: addMapping x 4,564 ops/sec ±0.21% (98 runs sampled)\nsource-map-0.6.1: addMapping x 4,562 ops/sec ±0.11% (99 runs sampled)\nsource-map-0.8.0: addMapping x 4,593 ops/sec ±0.11% (100 runs sampled)\nFastest is gen-mapping: addSegment\n\nGenerate speed:\ngen-mapping: decoded output x 379,864,020 ops/sec ±0.23% (93 runs sampled)\ngen-mapping: encoded output x 14,368 ops/sec ±4.07% (82 runs sampled)\nsource-map-js: encoded output x 5,261 ops/sec ±0.21% (99 runs sampled)\nsource-map-0.6.1: encoded output x 5,124 ops/sec ±0.58% (99 runs sampled)\nsource-map-0.8.0: encoded output x 5,434 ops/sec ±0.33% (96 runs sampled)\nFastest is gen-mapping: decoded output\n\n\n***\n\n\nreact.js.map\nMemory Usage:\ngen-mapping: addSegment 975096 bytes\ngen-mapping: addMapping 1102981 bytes\nsource-map-js 2918836 bytes\nsource-map-0.6.1 2885435 bytes\nsource-map-0.8.0 2874336 bytes\nSmallest memory usage is gen-mapping: addSegment\n\nAdding speed:\ngen-mapping: addSegment x 4,772 ops/sec ±0.15% (100 runs sampled)\ngen-mapping: addMapping x 4,456 ops/sec ±0.13% (97 runs sampled)\nsource-map-js: addMapping x 1,618 ops/sec ±0.24% (97 runs sampled)\nsource-map-0.6.1: addMapping x 1,622 ops/sec ±0.12% (99 runs sampled)\nsource-map-0.8.0: addMapping x 1,631 ops/sec ±0.12% (100 runs sampled)\nFastest is gen-mapping: addSegment\n\nGenerate speed:\ngen-mapping: decoded output x 379,107,695 ops/sec ±0.07% (99 runs sampled)\ngen-mapping: encoded output x 5,421 ops/sec ±1.60% (89 runs sampled)\nsource-map-js: encoded output x 2,113 ops/sec ±1.81% (98 runs sampled)\nsource-map-0.6.1: encoded output x 2,126 ops/sec ±0.10% (100 runs sampled)\nsource-map-0.8.0: encoded output x 2,176 ops/sec ±0.39% (98 runs sampled)\nFastest is gen-mapping: decoded output\n```\n\n[source-map]: https://www.npmjs.com/package/source-map\n[trace-mapping]: https://github.com/jridgewell/trace-mapping\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/gen-mapping", "error": "[Circular]", "extraneous": false }, "@jridgewell/trace-mapping": { "_from": "@jridgewell/trace-mapping@^0.3.9", "_id": "@jridgewell/trace-mapping@0.3.20", "_inBundle": false, "_integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "_location": "/@jridgewell/trace-mapping", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", "_shasum": "72e45707cf240fa6b081d0366f8265b0cd10197f", "_spec": "@jridgewell/trace-mapping@^0.3.9", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@ampproject/remapping", "author": "[Circular]", "bugs": "[Circular]", "dependencies": { "@jridgewell/resolve-uri": { "_from": "@jridgewell/resolve-uri@^3.1.0", "_id": "@jridgewell/resolve-uri@3.1.1", "_inBundle": false, "_integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "_location": "/@jridgewell/resolve-uri", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@jridgewell/resolve-uri@^3.1.0", "name": "@jridgewell/resolve-uri", "escapedName": "@jridgewell%2fresolve-uri", "scope": "@jridgewell", "rawSpec": "^3.1.0", "saveSpec": "[Circular]", "fetchSpec": "^3.1.0" }, "_requiredBy": [ "/@jridgewell/trace-mapping" ], "_resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "_shasum": "c08679063f279615a3326583ba3a90d1d82cc721", "_spec": "@jridgewell/resolve-uri@^3.1.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/trace-mapping", "author": { "name": "Justin Ridgewell", "email": "justin@ridgewell.name" }, "bugs": { "url": "https://github.com/jridgewell/resolve-uri/issues" }, "deprecated": false, "description": "Resolve a URI relative to an optional base URI", "devDependencies": { "@jridgewell/resolve-uri-latest": "npm:@jridgewell/resolve-uri@*", "@rollup/plugin-typescript": "8.3.0", "@typescript-eslint/eslint-plugin": "5.10.0", "@typescript-eslint/parser": "5.10.0", "c8": "7.11.0", "eslint": "8.7.0", "eslint-config-prettier": "8.3.0", "mocha": "9.2.0", "npm-run-all": "4.1.5", "prettier": "2.5.1", "rollup": "2.66.0", "typescript": "4.5.5" }, "engines": { "node": ">=6.0.0" }, "exports": { ".": [ { "types": "./dist/types/resolve-uri.d.ts", "browser": "./dist/resolve-uri.umd.js", "require": "./dist/resolve-uri.umd.js", "import": "./dist/resolve-uri.mjs" }, "./dist/resolve-uri.umd.js" ], "./package.json": "./package.json" }, "files": [ "dist" ], "homepage": "https://github.com/jridgewell/resolve-uri#readme", "keywords": [ "resolve", "uri", "url", "path" ], "license": "MIT", "main": "dist/resolve-uri.umd.js", "module": "dist/resolve-uri.mjs", "name": "@jridgewell/resolve-uri", "repository": { "type": "git", "url": "git+https://github.com/jridgewell/resolve-uri.git" }, "scripts": { "build": "run-s -n build:*", "build:rollup": "rollup -c rollup.config.js", "build:ts": "tsc --project tsconfig.build.json", "lint": "run-s -n lint:*", "lint:prettier": "npm run test:lint:prettier -- --write", "lint:ts": "npm run test:lint:ts -- --fix", "prebuild": "rm -rf dist", "prepublishOnly": "npm run preversion", "pretest": "run-s build:rollup", "preversion": "run-s test build", "test": "run-s -n test:lint test:only", "test:coverage": "c8 mocha", "test:debug": "mocha --inspect-brk", "test:lint": "run-s -n test:lint:*", "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", "test:lint:ts": "eslint '{src,test}/**/*.ts'", "test:only": "mocha", "test:watch": "mocha --watch" }, "types": "dist/types/resolve-uri.d.ts", "version": "3.1.1", "readme": "# @jridgewell/resolve-uri\n\n> Resolve a URI relative to an optional base URI\n\nResolve any combination of absolute URIs, protocol-realtive URIs, absolute paths, or relative paths.\n\n## Installation\n\n```sh\nnpm install @jridgewell/resolve-uri\n```\n\n## Usage\n\n```typescript\nfunction resolve(input: string, base?: string): string;\n```\n\n```js\nimport resolve from '@jridgewell/resolve-uri';\n\nresolve('foo', 'https://example.com'); // => 'https://example.com/foo'\n```\n\n| Input | Base | Resolution | Explanation |\n|-----------------------|-------------------------|--------------------------------|--------------------------------------------------------------|\n| `https://example.com` | _any_ | `https://example.com/` | Input is normalized only |\n| `//example.com` | `https://base.com/` | `https://example.com/` | Input inherits the base's protocol |\n| `//example.com` | _rest_ | `//example.com/` | Input is normalized only |\n| `/example` | `https://base.com/` | `https://base.com/example` | Input inherits the base's origin |\n| `/example` | `//base.com/` | `//base.com/example` | Input inherits the base's host and remains protocol relative |\n| `/example` | _rest_ | `/example` | Input is normalized only |\n| `example` | `https://base.com/dir/` | `https://base.com/dir/example` | Input is joined with the base |\n| `example` | `https://base.com/file` | `https://base.com/example` | Input is joined with the base without its file |\n| `example` | `//base.com/dir/` | `//base.com/dir/example` | Input is joined with the base's last directory |\n| `example` | `//base.com/file` | `//base.com/example` | Input is joined with the base without its file |\n| `example` | `/base/dir/` | `/base/dir/example` | Input is joined with the base's last directory |\n| `example` | `/base/file` | `/base/example` | Input is joined with the base without its file |\n| `example` | `base/dir/` | `base/dir/example` | Input is joined with the base's last directory |\n| `example` | `base/file` | `base/example` | Input is joined with the base without its file |\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/resolve-uri", "error": "[Circular]", "extraneous": false }, "@jridgewell/sourcemap-codec": { "_from": "@jridgewell/sourcemap-codec@^1.4.10", "_id": "@jridgewell/sourcemap-codec@1.4.15", "_inBundle": false, "_integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "_location": "/@jridgewell/sourcemap-codec", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "_shasum": "d7c6e6755c78567a951e04ab52ef0fd26de59f32", "_spec": "@jridgewell/sourcemap-codec@^1.4.10", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/gen-mapping", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Encode/decode sourcemap mappings", "devDependencies": "[Circular]", "exports": "[Circular]", "files": "[Circular]", "homepage": "https://github.com/jridgewell/sourcemap-codec#readme", "keywords": "[Circular]", "license": "MIT", "main": "dist/sourcemap-codec.umd.js", "module": "dist/sourcemap-codec.mjs", "name": "@jridgewell/sourcemap-codec", "repository": "[Circular]", "scripts": "[Circular]", "types": "dist/types/sourcemap-codec.d.ts", "version": "1.4.15", "readme": "# @jridgewell/sourcemap-codec\n\nEncode/decode the `mappings` property of a [sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit).\n\n\n## Why?\n\nSourcemaps are difficult to generate and manipulate, because the `mappings` property – the part that actually links the generated code back to the original source – is encoded using an obscure method called [Variable-length quantity](https://en.wikipedia.org/wiki/Variable-length_quantity). On top of that, each segment in the mapping contains offsets rather than absolute indices, which means that you can't look at a segment in isolation – you have to understand the whole sourcemap.\n\nThis package makes the process slightly easier.\n\n\n## Installation\n\n```bash\nnpm install @jridgewell/sourcemap-codec\n```\n\n\n## Usage\n\n```js\nimport { encode, decode } from '@jridgewell/sourcemap-codec';\n\nvar decoded = decode( ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );\n\nassert.deepEqual( decoded, [\n\t// the first line (of the generated code) has no mappings,\n\t// as shown by the starting semi-colon (which separates lines)\n\t[],\n\n\t// the second line contains four (comma-separated) segments\n\t[\n\t\t// segments are encoded as you'd expect:\n\t\t// [ generatedCodeColumn, sourceIndex, sourceCodeLine, sourceCodeColumn, nameIndex ]\n\n\t\t// i.e. the first segment begins at column 2, and maps back to the second column\n\t\t// of the second line (both zero-based) of the 0th source, and uses the 0th\n\t\t// name in the `map.names` array\n\t\t[ 2, 0, 2, 2, 0 ],\n\n\t\t// the remaining segments are 4-length rather than 5-length,\n\t\t// because they don't map a name\n\t\t[ 4, 0, 2, 4 ],\n\t\t[ 6, 0, 2, 5 ],\n\t\t[ 7, 0, 2, 7 ]\n\t],\n\n\t// the final line contains two segments\n\t[\n\t\t[ 2, 1, 10, 19 ],\n\t\t[ 12, 1, 11, 20 ]\n\t]\n]);\n\nvar encoded = encode( decoded );\nassert.equal( encoded, ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );\n```\n\n## Benchmarks\n\n```\nnode v18.0.0\n\namp.js.map - 45120 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec 5479160 bytes\nsourcemap-codec 5659336 bytes\nsource-map-0.6.1 17144440 bytes\nsource-map-0.8.0 6867424 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 502 ops/sec ±1.03% (90 runs sampled)\ndecode: sourcemap-codec x 445 ops/sec ±0.97% (92 runs sampled)\ndecode: source-map-0.6.1 x 36.01 ops/sec ±1.64% (49 runs sampled)\ndecode: source-map-0.8.0 x 367 ops/sec ±0.04% (95 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec 1261620 bytes\nsourcemap-codec 9119248 bytes\nsource-map-0.6.1 8968560 bytes\nsource-map-0.8.0 8952952 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 738 ops/sec ±0.42% (98 runs sampled)\nencode: sourcemap-codec x 238 ops/sec ±0.73% (88 runs sampled)\nencode: source-map-0.6.1 x 162 ops/sec ±0.43% (84 runs sampled)\nencode: source-map-0.8.0 x 191 ops/sec ±0.34% (90 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\nbabel.min.js.map - 347793 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec 35338184 bytes\nsourcemap-codec 35922736 bytes\nsource-map-0.6.1 62366360 bytes\nsource-map-0.8.0 44337416 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 40.35 ops/sec ±4.47% (54 runs sampled)\ndecode: sourcemap-codec x 36.76 ops/sec ±3.67% (51 runs sampled)\ndecode: source-map-0.6.1 x 4.44 ops/sec ±2.15% (16 runs sampled)\ndecode: source-map-0.8.0 x 59.35 ops/sec ±0.05% (78 runs sampled)\nFastest is decode: source-map-0.8.0\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec 7212604 bytes\nsourcemap-codec 21421456 bytes\nsource-map-0.6.1 25286888 bytes\nsource-map-0.8.0 25498744 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 112 ops/sec ±0.13% (84 runs sampled)\nencode: sourcemap-codec x 30.23 ops/sec ±2.76% (53 runs sampled)\nencode: source-map-0.6.1 x 19.43 ops/sec ±3.70% (37 runs sampled)\nencode: source-map-0.8.0 x 19.40 ops/sec ±3.26% (37 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\npreact.js.map - 1992 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec 500272 bytes\nsourcemap-codec 516864 bytes\nsource-map-0.6.1 1596672 bytes\nsource-map-0.8.0 517272 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 16,137 ops/sec ±0.17% (99 runs sampled)\ndecode: sourcemap-codec x 12,139 ops/sec ±0.13% (99 runs sampled)\ndecode: source-map-0.6.1 x 1,264 ops/sec ±0.12% (100 runs sampled)\ndecode: source-map-0.8.0 x 9,894 ops/sec ±0.08% (101 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec 321026 bytes\nsourcemap-codec 830832 bytes\nsource-map-0.6.1 586608 bytes\nsource-map-0.8.0 586680 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 19,876 ops/sec ±0.78% (95 runs sampled)\nencode: sourcemap-codec x 6,983 ops/sec ±0.15% (100 runs sampled)\nencode: source-map-0.6.1 x 5,070 ops/sec ±0.12% (102 runs sampled)\nencode: source-map-0.8.0 x 5,641 ops/sec ±0.17% (100 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\nreact.js.map - 5726 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec 734848 bytes\nsourcemap-codec 954200 bytes\nsource-map-0.6.1 2276432 bytes\nsource-map-0.8.0 955488 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 5,723 ops/sec ±0.12% (98 runs sampled)\ndecode: sourcemap-codec x 4,555 ops/sec ±0.09% (101 runs sampled)\ndecode: source-map-0.6.1 x 437 ops/sec ±0.11% (93 runs sampled)\ndecode: source-map-0.8.0 x 3,441 ops/sec ±0.15% (100 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec 638672 bytes\nsourcemap-codec 1109840 bytes\nsource-map-0.6.1 1321224 bytes\nsource-map-0.8.0 1324448 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 6,801 ops/sec ±0.48% (98 runs sampled)\nencode: sourcemap-codec x 2,533 ops/sec ±0.13% (101 runs sampled)\nencode: source-map-0.6.1 x 2,248 ops/sec ±0.08% (100 runs sampled)\nencode: source-map-0.8.0 x 2,303 ops/sec ±0.15% (100 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n```\n\n# License\n\nMIT\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/sourcemap-codec", "error": "[Circular]", "extraneous": false, "_deduped": "@jridgewell/sourcemap-codec" } }, "deprecated": false, "description": "Trace the original position through a source map", "devDependencies": "[Circular]", "exports": "[Circular]", "files": "[Circular]", "homepage": "https://github.com/jridgewell/trace-mapping#readme", "keywords": "[Circular]", "license": "MIT", "main": "dist/trace-mapping.umd.js", "module": "dist/trace-mapping.mjs", "name": "@jridgewell/trace-mapping", "repository": "[Circular]", "scripts": "[Circular]", "types": "dist/types/trace-mapping.d.ts", "version": "0.3.20", "readme": "# @jridgewell/trace-mapping\n\n> Trace the original position through a source map\n\n`trace-mapping` allows you to take the line and column of an output file and trace it to the\noriginal location in the source file through a source map.\n\nYou may already be familiar with the [`source-map`][source-map] package's `SourceMapConsumer`. This\nprovides the same `originalPositionFor` and `generatedPositionFor` API, without requiring WASM.\n\n## Installation\n\n```sh\nnpm install @jridgewell/trace-mapping\n```\n\n## Usage\n\n```typescript\nimport {\n TraceMap,\n originalPositionFor,\n generatedPositionFor,\n sourceContentFor,\n} from '@jridgewell/trace-mapping';\n\nconst tracer = new TraceMap({\n version: 3,\n sources: ['input.js'],\n sourcesContent: ['content of input.js'],\n names: ['foo'],\n mappings: 'KAyCIA',\n});\n\n// Lines start at line 1, columns at column 0.\nconst traced = originalPositionFor(tracer, { line: 1, column: 5 });\nassert.deepEqual(traced, {\n source: 'input.js',\n line: 42,\n column: 4,\n name: 'foo',\n});\n\nconst content = sourceContentFor(tracer, traced.source);\nassert.strictEqual(content, 'content for input.js');\n\nconst generated = generatedPositionFor(tracer, {\n source: 'input.js',\n line: 42,\n column: 4,\n});\nassert.deepEqual(generated, {\n line: 1,\n column: 5,\n});\n```\n\nWe also provide a lower level API to get the actual segment that matches our line and column. Unlike\n`originalPositionFor`, `traceSegment` uses a 0-base for `line`:\n\n```typescript\nimport { traceSegment } from '@jridgewell/trace-mapping';\n\n// line is 0-base.\nconst traced = traceSegment(tracer, /* line */ 0, /* column */ 5);\n\n// Segments are [outputColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]\n// Again, line is 0-base and so is sourceLine\nassert.deepEqual(traced, [5, 0, 41, 4, 0]);\n```\n\n### SectionedSourceMaps\n\nThe sourcemap spec defines a special `sections` field that's designed to handle concatenation of\noutput code with associated sourcemaps. This type of sourcemap is rarely used (no major build tool\nproduces it), but if you are hand coding a concatenation you may need it. We provide an `AnyMap`\nhelper that can receive either a regular sourcemap or a `SectionedSourceMap` and returns a\n`TraceMap` instance:\n\n```typescript\nimport { AnyMap } from '@jridgewell/trace-mapping';\nconst fooOutput = 'foo';\nconst barOutput = 'bar';\nconst output = [fooOutput, barOutput].join('\\n');\n\nconst sectioned = new AnyMap({\n version: 3,\n sections: [\n {\n // 0-base line and column\n offset: { line: 0, column: 0 },\n // fooOutput's sourcemap\n map: {\n version: 3,\n sources: ['foo.js'],\n names: ['foo'],\n mappings: 'AAAAA',\n },\n },\n {\n // barOutput's sourcemap will not affect the first line, only the second\n offset: { line: 1, column: 0 },\n map: {\n version: 3,\n sources: ['bar.js'],\n names: ['bar'],\n mappings: 'AAAAA',\n },\n },\n ],\n});\n\nconst traced = originalPositionFor(sectioned, {\n line: 2,\n column: 0,\n});\n\nassert.deepEqual(traced, {\n source: 'bar.js',\n line: 1,\n column: 0,\n name: 'bar',\n});\n```\n\n## Benchmarks\n\n```\nnode v18.0.0\n\namp.js.map - 45120 segments\n\nMemory Usage:\ntrace-mapping decoded 562400 bytes\ntrace-mapping encoded 5706544 bytes\nsource-map-js 10717664 bytes\nsource-map-0.6.1 17446384 bytes\nsource-map-0.8.0 9701757 bytes\nSmallest memory usage is trace-mapping decoded\n\nInit speed:\ntrace-mapping: decoded JSON input x 180 ops/sec ±0.34% (85 runs sampled)\ntrace-mapping: encoded JSON input x 364 ops/sec ±1.77% (89 runs sampled)\ntrace-mapping: decoded Object input x 3,116 ops/sec ±0.50% (96 runs sampled)\ntrace-mapping: encoded Object input x 410 ops/sec ±2.62% (85 runs sampled)\nsource-map-js: encoded Object input x 84.23 ops/sec ±0.91% (73 runs sampled)\nsource-map-0.6.1: encoded Object input x 37.21 ops/sec ±2.08% (51 runs sampled)\nFastest is trace-mapping: decoded Object input\n\nTrace speed:\ntrace-mapping: decoded originalPositionFor x 3,952,212 ops/sec ±0.17% (98 runs sampled)\ntrace-mapping: encoded originalPositionFor x 3,487,468 ops/sec ±1.58% (90 runs sampled)\nsource-map-js: encoded originalPositionFor x 827,730 ops/sec ±0.78% (97 runs sampled)\nsource-map-0.6.1: encoded originalPositionFor x 748,991 ops/sec ±0.53% (94 runs sampled)\nsource-map-0.8.0: encoded originalPositionFor x 2,532,894 ops/sec ±0.57% (95 runs sampled)\nFastest is trace-mapping: decoded originalPositionFor\n\n\n***\n\n\nbabel.min.js.map - 347793 segments\n\nMemory Usage:\ntrace-mapping decoded 89832 bytes\ntrace-mapping encoded 35474640 bytes\nsource-map-js 51257176 bytes\nsource-map-0.6.1 63515664 bytes\nsource-map-0.8.0 42933752 bytes\nSmallest memory usage is trace-mapping decoded\n\nInit speed:\ntrace-mapping: decoded JSON input x 15.41 ops/sec ±8.65% (34 runs sampled)\ntrace-mapping: encoded JSON input x 28.20 ops/sec ±12.87% (42 runs sampled)\ntrace-mapping: decoded Object input x 964 ops/sec ±0.36% (99 runs sampled)\ntrace-mapping: encoded Object input x 31.77 ops/sec ±13.79% (45 runs sampled)\nsource-map-js: encoded Object input x 6.45 ops/sec ±5.16% (21 runs sampled)\nsource-map-0.6.1: encoded Object input x 4.07 ops/sec ±5.24% (15 runs sampled)\nFastest is trace-mapping: decoded Object input\n\nTrace speed:\ntrace-mapping: decoded originalPositionFor x 7,183,038 ops/sec ±0.58% (95 runs sampled)\ntrace-mapping: encoded originalPositionFor x 5,192,185 ops/sec ±0.41% (100 runs sampled)\nsource-map-js: encoded originalPositionFor x 4,259,489 ops/sec ±0.79% (94 runs sampled)\nsource-map-0.6.1: encoded originalPositionFor x 3,742,629 ops/sec ±0.71% (95 runs sampled)\nsource-map-0.8.0: encoded originalPositionFor x 6,270,211 ops/sec ±0.64% (94 runs sampled)\nFastest is trace-mapping: decoded originalPositionFor\n\n\n***\n\n\npreact.js.map - 1992 segments\n\nMemory Usage:\ntrace-mapping decoded 37128 bytes\ntrace-mapping encoded 247280 bytes\nsource-map-js 1143536 bytes\nsource-map-0.6.1 1290992 bytes\nsource-map-0.8.0 96544 bytes\nSmallest memory usage is trace-mapping decoded\n\nInit speed:\ntrace-mapping: decoded JSON input x 3,483 ops/sec ±0.30% (98 runs sampled)\ntrace-mapping: encoded JSON input x 6,092 ops/sec ±0.18% (97 runs sampled)\ntrace-mapping: decoded Object input x 249,076 ops/sec ±0.24% (98 runs sampled)\ntrace-mapping: encoded Object input x 14,555 ops/sec ±0.48% (100 runs sampled)\nsource-map-js: encoded Object input x 2,447 ops/sec ±0.36% (99 runs sampled)\nsource-map-0.6.1: encoded Object input x 1,201 ops/sec ±0.57% (96 runs sampled)\nFastest is trace-mapping: decoded Object input\n\nTrace speed:\ntrace-mapping: decoded originalPositionFor x 7,620,192 ops/sec ±0.09% (99 runs sampled)\ntrace-mapping: encoded originalPositionFor x 6,872,554 ops/sec ±0.30% (97 runs sampled)\nsource-map-js: encoded originalPositionFor x 2,489,570 ops/sec ±0.35% (94 runs sampled)\nsource-map-0.6.1: encoded originalPositionFor x 1,698,633 ops/sec ±0.28% (98 runs sampled)\nsource-map-0.8.0: encoded originalPositionFor x 4,015,644 ops/sec ±0.22% (98 runs sampled)\nFastest is trace-mapping: decoded originalPositionFor\n\n\n***\n\n\nreact.js.map - 5726 segments\n\nMemory Usage:\ntrace-mapping decoded 16176 bytes\ntrace-mapping encoded 681552 bytes\nsource-map-js 2418352 bytes\nsource-map-0.6.1 2443672 bytes\nsource-map-0.8.0 111768 bytes\nSmallest memory usage is trace-mapping decoded\n\nInit speed:\ntrace-mapping: decoded JSON input x 1,720 ops/sec ±0.34% (98 runs sampled)\ntrace-mapping: encoded JSON input x 4,406 ops/sec ±0.35% (100 runs sampled)\ntrace-mapping: decoded Object input x 92,122 ops/sec ±0.10% (99 runs sampled)\ntrace-mapping: encoded Object input x 5,385 ops/sec ±0.37% (99 runs sampled)\nsource-map-js: encoded Object input x 794 ops/sec ±0.40% (98 runs sampled)\nsource-map-0.6.1: encoded Object input x 416 ops/sec ±0.54% (91 runs sampled)\nFastest is trace-mapping: decoded Object input\n\nTrace speed:\ntrace-mapping: decoded originalPositionFor x 32,759,519 ops/sec ±0.33% (100 runs sampled)\ntrace-mapping: encoded originalPositionFor x 31,116,306 ops/sec ±0.33% (97 runs sampled)\nsource-map-js: encoded originalPositionFor x 17,458,435 ops/sec ±0.44% (97 runs sampled)\nsource-map-0.6.1: encoded originalPositionFor x 12,687,097 ops/sec ±0.43% (95 runs sampled)\nsource-map-0.8.0: encoded originalPositionFor x 23,538,275 ops/sec ±0.38% (95 runs sampled)\nFastest is trace-mapping: decoded originalPositionFor\n```\n\n[source-map]: https://www.npmjs.com/package/source-map\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/@jridgewell/trace-mapping", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Remap sequential sourcemaps through transformations to point at the original source code", "devDependencies": { "@rollup/plugin-typescript": "8.3.2", "@types/jest": "27.4.1", "@typescript-eslint/eslint-plugin": "5.20.0", "@typescript-eslint/parser": "5.20.0", "eslint": "8.14.0", "eslint-config-prettier": "8.5.0", "jest": "27.5.1", "jest-config": "27.5.1", "npm-run-all": "4.1.5", "prettier": "2.6.2", "rollup": "2.70.2", "ts-jest": "27.1.4", "tslib": "2.4.0", "typescript": "4.6.3" }, "engines": { "node": ">=6.0.0" }, "exports": { ".": [ { "types": "./dist/types/remapping.d.ts", "browser": "./dist/remapping.umd.js", "require": "./dist/remapping.umd.js", "import": "./dist/remapping.mjs" }, "./dist/remapping.umd.js" ], "./package.json": "./package.json" }, "files": [ "dist" ], "homepage": "https://github.com/ampproject/remapping#readme", "keywords": [ "source", "map", "remap" ], "license": "Apache-2.0", "main": "dist/remapping.umd.js", "module": "dist/remapping.mjs", "name": "@ampproject/remapping", "repository": { "type": "git", "url": "git+https://github.com/ampproject/remapping.git" }, "scripts": { "build": "run-s -n build:*", "build:rollup": "rollup -c rollup.config.js", "build:ts": "tsc --project tsconfig.build.json", "lint": "run-s -n lint:*", "lint:prettier": "npm run test:lint:prettier -- --write", "lint:ts": "npm run test:lint:ts -- --fix", "prebuild": "rm -rf dist", "prepublishOnly": "npm run preversion", "preversion": "run-s test build", "test": "run-s -n test:lint test:only", "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand", "test:lint": "run-s -n test:lint:*", "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", "test:lint:ts": "eslint '{src,test}/**/*.ts'", "test:only": "jest --coverage", "test:watch": "jest --coverage --watch" }, "types": "dist/types/remapping.d.ts", "version": "2.2.1", "readme": "# @ampproject/remapping\n\n> Remap sequential sourcemaps through transformations to point at the original source code\n\nRemapping allows you to take the sourcemaps generated through transforming your code and \"remap\"\nthem to the original source locations. Think \"my minified code, transformed with babel and bundled\nwith webpack\", all pointing to the correct location in your original source code.\n\nWith remapping, none of your source code transformations need to be aware of the input's sourcemap,\nthey only need to generate an output sourcemap. This greatly simplifies building custom\ntransformations (think a find-and-replace).\n\n## Installation\n\n```sh\nnpm install @ampproject/remapping\n```\n\n## Usage\n\n```typescript\nfunction remapping(\n map: SourceMap | SourceMap[],\n loader: (file: string, ctx: LoaderContext) => (SourceMap | null | undefined),\n options?: { excludeContent: boolean, decodedMappings: boolean }\n): SourceMap;\n\n// LoaderContext gives the loader the importing sourcemap, tree depth, the ability to override the\n// \"source\" location (where child sources are resolved relative to, or the location of original\n// source), and the ability to override the \"content\" of an original source for inclusion in the\n// output sourcemap.\ntype LoaderContext = {\n readonly importer: string;\n readonly depth: number;\n source: string;\n content: string | null | undefined;\n}\n```\n\n`remapping` takes the final output sourcemap, and a `loader` function. For every source file pointer\nin the sourcemap, the `loader` will be called with the resolved path. If the path itself represents\na transformed file (it has a sourcmap associated with it), then the `loader` should return that\nsourcemap. If not, the path will be treated as an original, untransformed source code.\n\n```js\n// Babel transformed \"helloworld.js\" into \"transformed.js\"\nconst transformedMap = JSON.stringify({\n file: 'transformed.js',\n // 1st column of 2nd line of output file translates into the 1st source\n // file, line 3, column 2\n mappings: ';CAEE',\n sources: ['helloworld.js'],\n version: 3,\n});\n\n// Uglify minified \"transformed.js\" into \"transformed.min.js\"\nconst minifiedTransformedMap = JSON.stringify({\n file: 'transformed.min.js',\n // 0th column of 1st line of output file translates into the 1st source\n // file, line 2, column 1.\n mappings: 'AACC',\n names: [],\n sources: ['transformed.js'],\n version: 3,\n});\n\nconst remapped = remapping(\n minifiedTransformedMap,\n (file, ctx) => {\n\n // The \"transformed.js\" file is an transformed file.\n if (file === 'transformed.js') {\n // The root importer is empty.\n console.assert(ctx.importer === '');\n // The depth in the sourcemap tree we're currently loading.\n // The root `minifiedTransformedMap` is depth 0, and its source children are depth 1, etc.\n console.assert(ctx.depth === 1);\n\n return transformedMap;\n }\n\n // Loader will be called to load transformedMap's source file pointers as well.\n console.assert(file === 'helloworld.js');\n // `transformed.js`'s sourcemap points into `helloworld.js`.\n console.assert(ctx.importer === 'transformed.js');\n // This is a source child of `transformed`, which is a source child of `minifiedTransformedMap`.\n console.assert(ctx.depth === 2);\n return null;\n }\n);\n\nconsole.log(remapped);\n// {\n// file: 'transpiled.min.js',\n// mappings: 'AAEE',\n// sources: ['helloworld.js'],\n// version: 3,\n// };\n```\n\nIn this example, `loader` will be called twice:\n\n1. `\"transformed.js\"`, the first source file pointer in the `minifiedTransformedMap`. We return the\n associated sourcemap for it (its a transformed file, after all) so that sourcemap locations can\n be traced through it into the source files it represents.\n2. `\"helloworld.js\"`, our original, unmodified source code. This file does not have a sourcemap, so\n we return `null`.\n\nThe `remapped` sourcemap now points from `transformed.min.js` into locations in `helloworld.js`. If\nyou were to read the `mappings`, it says \"0th column of the first line output line points to the 1st\ncolumn of the 2nd line of the file `helloworld.js`\".\n\n### Multiple transformations of a file\n\nAs a convenience, if you have multiple single-source transformations of a file, you may pass an\narray of sourcemap files in the order of most-recent transformation sourcemap first. Note that this\nchanges the `importer` and `depth` of each call to our loader. So our above example could have been\nwritten as:\n\n```js\nconst remapped = remapping(\n [minifiedTransformedMap, transformedMap],\n () => null\n);\n\nconsole.log(remapped);\n// {\n// file: 'transpiled.min.js',\n// mappings: 'AAEE',\n// sources: ['helloworld.js'],\n// version: 3,\n// };\n```\n\n### Advanced control of the loading graph\n\n#### `source`\n\nThe `source` property can overridden to any value to change the location of the current load. Eg,\nfor an original source file, it allows us to change the location to the original source regardless\nof what the sourcemap source entry says. And for transformed files, it allows us to change the\nrelative resolving location for child sources of the loaded sourcemap.\n\n```js\nconst remapped = remapping(\n minifiedTransformedMap,\n (file, ctx) => {\n\n if (file === 'transformed.js') {\n // We pretend the transformed.js file actually exists in the 'src/' directory. When the nested\n // source files are loaded, they will now be relative to `src/`.\n ctx.source = 'src/transformed.js';\n return transformedMap;\n }\n\n console.assert(file === 'src/helloworld.js');\n // We could futher change the source of this original file, eg, to be inside a nested directory\n // itself. This will be reflected in the remapped sourcemap.\n ctx.source = 'src/nested/transformed.js';\n return null;\n }\n);\n\nconsole.log(remapped);\n// {\n// …,\n// sources: ['src/nested/helloworld.js'],\n// };\n```\n\n\n#### `content`\n\nThe `content` property can be overridden when we encounter an original source file. Eg, this allows\nyou to manually provide the source content of the original file regardless of whether the\n`sourcesContent` field is present in the parent sourcemap. It can also be set to `null` to remove\nthe source content.\n\n```js\nconst remapped = remapping(\n minifiedTransformedMap,\n (file, ctx) => {\n\n if (file === 'transformed.js') {\n // transformedMap does not include a `sourcesContent` field, so usually the remapped sourcemap\n // would not include any `sourcesContent` values.\n return transformedMap;\n }\n\n console.assert(file === 'helloworld.js');\n // We can read the file to provide the source content.\n ctx.content = fs.readFileSync(file, 'utf8');\n return null;\n }\n);\n\nconsole.log(remapped);\n// {\n// …,\n// sourcesContent: [\n// 'console.log(\"Hello world!\")',\n// ],\n// };\n```\n\n### Options\n\n#### excludeContent\n\nBy default, `excludeContent` is `false`. Passing `{ excludeContent: true }` will exclude the\n`sourcesContent` field from the returned sourcemap. This is mainly useful when you want to reduce\nthe size out the sourcemap.\n\n#### decodedMappings\n\nBy default, `decodedMappings` is `false`. Passing `{ decodedMappings: true }` will leave the\n`mappings` field in a [decoded state](https://github.com/rich-harris/sourcemap-codec) instead of\nencoding into a VLQ string.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/@ampproject/remapping", "error": "[Circular]", "extraneous": false }, "@babel/code-frame": { "_from": "@babel/code-frame@^7.18.6", "_id": "@babel/code-frame@7.22.13", "_inBundle": false, "_integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "_location": "/@babel/code-frame", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@babel/code-frame@^7.18.6", "name": "@babel/code-frame", "escapedName": "@babel%2fcode-frame", "scope": "@babel", "rawSpec": "^7.18.6", "saveSpec": "[Circular]", "fetchSpec": "^7.18.6" }, "_requiredBy": [ "/@angular-devkit/build-angular/@babel/core", "/@angular-devkit/build-angular/@babel/template", "/@babel/core", "/@babel/template", "/@babel/traverse", "/parse-json" ], "_resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "_shasum": "e3c1c099402598483b7a8c46a721d1038803755e", "_spec": "@babel/code-frame@^7.18.6", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@babel/core", "author": { "name": "The Babel Team", "url": "https://babel.dev/team" }, "bugs": { "url": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen" }, "dependencies": { "@babel/highlight": { "_from": "@babel/highlight@^7.22.13", "_id": "@babel/highlight@7.22.20", "_inBundle": false, "_integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "_location": "/@babel/highlight", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@babel/highlight@^7.22.13", "name": "@babel/highlight", "escapedName": "@babel%2fhighlight", "scope": "@babel", "rawSpec": "^7.22.13", "saveSpec": "[Circular]", "fetchSpec": "^7.22.13" }, "_requiredBy": [ "/@babel/code-frame", "/eslint/@babel/code-frame" ], "_resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "_shasum": "4ca92b71d80554b01427815e06f2df965b9c1f54", "_spec": "@babel/highlight@^7.22.13", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@babel/code-frame", "author": { "name": "The Babel Team", "url": "https://babel.dev/team" }, "bugs": { "url": "https://github.com/babel/babel/issues" }, "dependencies": { "@babel/helper-validator-identifier": { "_from": "@babel/helper-validator-identifier@^7.22.20", "_id": "@babel/helper-validator-identifier@7.22.20", "_inBundle": false, "_integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "_location": "/@babel/helper-validator-identifier", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "@babel/helper-validator-identifier@^7.22.20", "name": "@babel/helper-validator-identifier", "escapedName": "@babel%2fhelper-validator-identifier", "scope": "@babel", "rawSpec": "^7.22.20", "saveSpec": "[Circular]", "fetchSpec": "^7.22.20" }, "_requiredBy": [ "/@babel/helper-module-transforms", "/@babel/highlight", "/@babel/plugin-transform-modules-systemjs", "/@babel/types" ], "_resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "_shasum": "c4ae002c61d2879e724581d96665583dbc1dc0e0", "_spec": "@babel/helper-validator-identifier@^7.22.20", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@babel/highlight", "author": { "name": "The Babel Team", "url": "https://babel.dev/team" }, "bugs": { "url": "https://github.com/babel/babel/issues" }, "deprecated": false, "description": "Validate identifier/keywords name", "devDependencies": { "@unicode/unicode-15.1.0": "^1.5.2", "charcodes": "^0.2.0" }, "engines": { "node": ">=6.9.0" }, "exports": { ".": "./lib/index.js", "./package.json": "./package.json" }, "homepage": "https://github.com/babel/babel#readme", "license": "MIT", "main": "./lib/index.js", "name": "@babel/helper-validator-identifier", "publishConfig": { "access": "public" }, "repository": { "type": "git", "url": "git+https://github.com/babel/babel.git", "directory": "packages/babel-helper-validator-identifier" }, "type": "commonjs", "version": "7.22.20", "readme": "# @babel/helper-validator-identifier\n\n> Validate identifier/keywords name\n\nSee our website [@babel/helper-validator-identifier](https://babeljs.io/docs/babel-helper-validator-identifier) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-validator-identifier\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-validator-identifier\n```\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/@babel/helper-validator-identifier", "error": "[Circular]", "extraneous": false, "_deduped": "@babel/helper-validator-identifier" }, "chalk": { "_from": "chalk@^2.4.2", "_id": "chalk@2.4.2", "_inBundle": false, "_integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "_location": "/chalk", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "chalk@^2.4.2", "name": "chalk", "escapedName": "chalk", "rawSpec": "^2.4.2", "saveSpec": "[Circular]", "fetchSpec": "^2.4.2" }, "_requiredBy": [ "/@babel/code-frame", "/@babel/highlight" ], "_resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "_shasum": "cd42541677a54333cf541a49108c1432b44c9424", "_spec": "chalk@^2.4.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/@babel/code-frame", "bugs": { "url": "https://github.com/chalk/chalk/issues" }, "dependencies": {}, "deprecated": false, "description": "Terminal string styling done right", "devDependencies": { "ava": "*", "coveralls": "^3.0.0", "execa": "^0.9.0", "flow-bin": "^0.68.0", "import-fresh": "^2.0.0", "matcha": "^0.7.0", "nyc": "^11.0.2", "resolve-from": "^4.0.0", "typescript": "^2.5.3", "xo": "*" }, "engines": { "node": ">=4" }, "files": [ "index.js", "templates.js", "types/index.d.ts", "index.js.flow" ], "homepage": "https://github.com/chalk/chalk#readme", "keywords": [ "color", "colour", "colors", "terminal", "console", "cli", "string", "str", "ansi", "style", "styles", "tty", "formatting", "rgb", "256", "shell", "xterm", "log", "logging", "command-line", "text" ], "license": "MIT", "name": "chalk", "repository": { "type": "git", "url": "git+https://github.com/chalk/chalk.git" }, "scripts": { "bench": "matcha benchmark.js", "coveralls": "nyc report --reporter=text-lcov | coveralls", "test": "xo && tsc --project types && flow --max-warnings=0 && nyc ava" }, "types": "types/index.d.ts", "version": "2.4.2", "xo": { "envs": [ "node", "mocha" ], "ignores": [ "test/_flow.js" ] }, "readme": "

\n\t
\n\t
\n\t\"Chalk\"\n\t
\n\t
\n\t
\n

\n\n> Terminal string styling done right\n\n[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) [![Mentioned in Awesome Node.js](https://awesome.re/mentioned-badge.svg)](https://github.com/sindresorhus/awesome-nodejs)\n\n### [See what's new in Chalk 2](https://github.com/chalk/chalk/releases/tag/v2.0.0)\n\n\"\"\n\n\n## Highlights\n\n- Expressive API\n- Highly performant\n- Ability to nest styles\n- [256/Truecolor color support](#256-and-truecolor-color-support)\n- Auto-detects color support\n- Doesn't extend `String.prototype`\n- Clean and focused\n- Actively maintained\n- [Used by ~23,000 packages](https://www.npmjs.com/browse/depended/chalk) as of December 31, 2017\n\n\n## Install\n\n```console\n$ npm install chalk\n```\n\n\n\t\n\n\n\n## Usage\n\n```js\nconst chalk = require('chalk');\n\nconsole.log(chalk.blue('Hello world!'));\n```\n\nChalk comes with an easy to use composable API where you just chain and nest the styles you want.\n\n```js\nconst chalk = require('chalk');\nconst log = console.log;\n\n// Combine styled and normal strings\nlog(chalk.blue('Hello') + ' World' + chalk.red('!'));\n\n// Compose multiple styles using the chainable API\nlog(chalk.blue.bgRed.bold('Hello world!'));\n\n// Pass in multiple arguments\nlog(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));\n\n// Nest styles\nlog(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));\n\n// Nest styles of the same type even (color, underline, background)\nlog(chalk.green(\n\t'I am a green line ' +\n\tchalk.blue.underline.bold('with a blue substring') +\n\t' that becomes green again!'\n));\n\n// ES2015 template literal\nlog(`\nCPU: ${chalk.red('90%')}\nRAM: ${chalk.green('40%')}\nDISK: ${chalk.yellow('70%')}\n`);\n\n// ES2015 tagged template literal\nlog(chalk`\nCPU: {red ${cpu.totalPercent}%}\nRAM: {green ${ram.used / ram.total * 100}%}\nDISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}\n`);\n\n// Use RGB colors in terminal emulators that support it.\nlog(chalk.keyword('orange')('Yay for orange colored text!'));\nlog(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));\nlog(chalk.hex('#DEADED').bold('Bold gray!'));\n```\n\nEasily define your own themes:\n\n```js\nconst chalk = require('chalk');\n\nconst error = chalk.bold.red;\nconst warning = chalk.keyword('orange');\n\nconsole.log(error('Error!'));\nconsole.log(warning('Warning!'));\n```\n\nTake advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):\n\n```js\nconst name = 'Sindre';\nconsole.log(chalk.green('Hello %s'), name);\n//=> 'Hello Sindre'\n```\n\n\n## API\n\n### chalk.`\n\n\n
I'm a tooltip
\n\n\n\n```\n\nVisit the [tutorial](https://popper.js.org/docs/v2/tutorial/) for an example of\nhow to build your own tooltip from scratch using Popper.\n\n### Module bundlers\n\nYou can import the `createPopper` constructor from the fully-featured file:\n\n```js\nimport { createPopper } from '@popperjs/core';\n\nconst button = document.querySelector('#button');\nconst tooltip = document.querySelector('#tooltip');\n\n// Pass the button, the tooltip, and some options, and Popper will do the\n// magic positioning for you:\ncreatePopper(button, tooltip, {\n placement: 'right',\n});\n```\n\nAll the modifiers listed in the docs menu will be enabled and \"just work\", so\nyou don't need to think about setting Popper up. The size of Popper including\nall of its features is about 5 kB minzipped, but it may grow a bit in the\nfuture.\n\n#### Popper Lite (tree-shaking)\n\nIf bundle size is important, you'll want to take advantage of tree-shaking. The\nlibrary is built in a modular way to allow to import only the parts you really\nneed.\n\n```js\nimport { createPopperLite as createPopper } from \"@popperjs/core\";\n```\n\nThe Lite version includes the most necessary modifiers that will compute the\noffsets of the popper, compute and add the positioning styles, and add event\nlisteners. This is close in bundle size to pure CSS tooltip libraries, and\nbehaves somewhat similarly.\n\nHowever, this does not include the features that makes Popper truly useful.\n\nThe two most useful modifiers not included in Lite are `preventOverflow` and\n`flip`:\n\n```js\nimport { createPopperLite as createPopper, preventOverflow, flip } from \"@popperjs/core\";\n\nconst button = document.querySelector('#button');\nconst tooltip = document.querySelector('#tooltip');\n\ncreatePopper(button, tooltip, {\n modifiers: [preventOverflow, flip],\n});\n```\n\nAs you make more poppers, you may be finding yourself needing other modifiers\nprovided by the library.\n\nSee [tree-shaking](https://popper.js.org/docs/v2/tree-shaking/) for more\ninformation.\n\n## Distribution targets\n\nPopper is distributed in 3 different versions, in 3 different file formats.\n\nThe 3 file formats are:\n\n- `esm` (works with `import` syntax — **recommended**)\n- `umd` (works with `\n\n```\n\n[Try d3-array in your browser.](https://tonicdev.com/npm/d3-array)\n\n## API Reference\n\n* [Statistics](#statistics)\n* [Search](#search)\n* [Transformations](#transformations)\n* [Histograms](#histograms)\n* [Histogram Thresholds](#histogram-thresholds)\n\n### Statistics\n\nMethods for computing basic summary statistics.\n\n# d3.min(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/min.js \"Source\")\n\nReturns the minimum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the minimum value.\n\nUnlike the built-in [Math.min](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/min), this method ignores undefined, null and NaN values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the minimum of the strings [“20”, “3”] is “20”, while the minimum of the numbers [20, 3] is 3.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.max(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/max.js \"Source\")\n\nReturns the maximum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the maximum value.\n\nUnlike the built-in [Math.max](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/max), this method ignores undefined values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the maximum of the strings [“20”, “3”] is “3”, while the maximum of the numbers [20, 3] is 20.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.extent(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/extent.js \"Source\")\n\nReturns the [minimum](#min) and [maximum](#max) value in the given *array* using natural order. If the array is empty, returns [undefined, undefined]. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the extent.\n\n# d3.sum(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/sum.js \"Source\")\n\nReturns the sum of the given *array* of numbers. If the array is empty, returns 0. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the sum. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.mean(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/mean.js \"Source\")\n\nReturns the mean of the given *array* of numbers. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the mean. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.median(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/median.js \"Source\")\n\nReturns the median of the given *array* of numbers using the [R-7 method](https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample). If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the median. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.quantile(array, p[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/quantile.js \"Source\")\n\nReturns the *p*-quantile of the given **sorted** *array* of numbers, where *p* is a number in the range [0, 1]. For example, the median can be computed using *p* = 0.5, the first quartile at *p* = 0.25, and the third quartile at *p* = 0.75. This particular implementation uses the [R-7 method](http://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population), which is the default for the R programming language and Excel. For example:\n\n```js\nvar a = [0, 10, 30];\nd3.quantile(a, 0); // 0\nd3.quantile(a, 0.5); // 10\nd3.quantile(a, 1); // 30\nd3.quantile(a, 0.25); // 5\nd3.quantile(a, 0.75); // 20\nd3.quantile(a, 0.1); // 2\n```\n\nAn optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the quantile.\n\n# d3.variance(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/variance.js \"Source\")\n\nReturns an [unbiased estimator of the population variance](http://mathworld.wolfram.com/SampleVariance.html) of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the variance. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.deviation(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/deviation.js \"Source\")\n\nReturns the standard deviation, defined as the square root of the [bias-corrected variance](#variance), of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the standard deviation. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n### Search\n\nMethods for searching arrays for a specific element.\n\n# d3.scan(array[, comparator]) [<>](https://github.com/d3/d3-array/blob/master/src/scan.js \"Source\")\n\nPerforms a linear scan of the specified *array*, returning the index of the least element according to the specified *comparator*. If the given *array* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns undefined. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:\n\n```js\nvar array = [{foo: 42}, {foo: 91}];\nd3.scan(array, function(a, b) { return a.foo - b.foo; }); // 0\nd3.scan(array, function(a, b) { return b.foo - a.foo; }); // 1\n```\n\nThis function is similar to [min](#min), except it allows the use of a comparator rather than an accessor and it returns the index instead of the accessed value. See also [bisect](#bisect).\n\n# d3.bisectLeft(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nReturns the insertion point for *x* in *array* to maintain sorted order. The arguments *lo* and *hi* may be used to specify a subset of the array which should be considered; by default the entire array is used. If *x* is already present in *array*, the insertion point will be before (to the left of) any existing entries. The return value is suitable for use as the first argument to [splice](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice) assuming that *array* is already sorted. The returned insertion point *i* partitions the *array* into two halves so that all *v* < *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* >= *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisect(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js \"Source\")
\n# d3.bisectRight(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nSimilar to [bisectLeft](#bisectLeft), but returns an insertion point which comes after (to the right of) any existing entries of *x* in *array*. The returned insertion point *i* partitions the *array* into two halves so that all *v* <= *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* > *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisector(accessor) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n
# d3.bisector(comparator) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n\nReturns a new bisector using the specified *accessor* or *comparator* function. This method can be used to bisect arrays of objects instead of being limited to simple arrays of primitives. For example, given the following array of objects:\n\n```js\nvar data = [\n {date: new Date(2011, 1, 1), value: 0.5},\n {date: new Date(2011, 2, 1), value: 0.6},\n {date: new Date(2011, 3, 1), value: 0.7},\n {date: new Date(2011, 4, 1), value: 0.8}\n];\n```\n\nA suitable bisect function could be constructed as:\n\n```js\nvar bisectDate = d3.bisector(function(d) { return d.date; }).right;\n```\n\nThis is equivalent to specifying a comparator:\n\n```js\nvar bisectDate = d3.bisector(function(d, x) { return d.date - x; }).right;\n```\n\nAnd then applied as *bisectDate*(*array*, *date*), returning an index. Note that the comparator is always passed the search value *x* as the second argument. Use a comparator rather than an accessor if you want values to be sorted in an order different than natural order, such as in descending rather than ascending order.\n\n# bisector.left(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L6 \"Source\")\n\nEquivalent to [bisectLeft](#bisectLeft), but uses this bisector’s associated comparator.\n\n# bisector.right(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L16 \"Source\")\n\nEquivalent to [bisectRight](#bisectRight), but uses this bisector’s associated comparator.\n\n# d3.ascending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/ascending.js \"Source\")\n\nReturns -1 if *a* is less than *b*, or 1 if *a* is greater than *b*, or 0. This is the comparator function for natural order, and can be used in conjunction with the built-in [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) method to arrange elements in ascending order. It is implemented as:\n\n```js\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n# d3.descending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/descending.js \"Source\")\n\nReturns -1 if *a* is greater than *b*, or 1 if *a* is less than *b*, or 0. This is the comparator function for reverse natural order, and can be used in conjunction with the built-in array sort method to arrange elements in descending order. It is implemented as:\n\n```js\nfunction descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n### Transformations\n\nMethods for transforming arrays and for generating new arrays.\n\n# d3.cross(a, b[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/cross.js \"Source\")\n\nReturns the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) of the two arrays *a* and *b*. For each element *i* in the specified array *a* and each element *j* in the specified array *b*, in order, invokes the specified *reducer* function passing the element *i* and element *j*. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.cross([1, 2], [\"x\", \"y\"]); // returns [[1, \"x\"], [1, \"y\"], [2, \"x\"], [2, \"y\"]]\nd3.cross([1, 2], [\"x\", \"y\"], (a, b) => a + b); // returns [\"1x\", \"1y\", \"2x\", \"2y\"]\n```\n\n# d3.merge(arrays) [<>](https://github.com/d3/d3-array/blob/master/src/merge.js \"Source\")\n\nMerges the specified *arrays* into a single array. This method is similar to the built-in array concat method; the only difference is that it is more convenient when you have an array of arrays.\n\n```js\nd3.merge([[1], [2, 3]]); // returns [1, 2, 3]\n```\n\n# d3.pairs(array[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/pairs.js \"Source\")\n\nFor each adjacent pair of elements in the specified *array*, in order, invokes the specified *reducer* function passing the element *i* and element *i* - 1. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.pairs([1, 2, 3, 4]); // returns [[1, 2], [2, 3], [3, 4]]\nd3.pairs([1, 2, 3, 4], (a, b) => b - a); // returns [1, 1, 1];\n```\n\nIf the specified array has fewer than two elements, returns the empty array.\n\n# d3.permute(array, indexes) [<>](https://github.com/d3/d3-array/blob/master/src/permute.js \"Source\")\n\nReturns a permutation of the specified *array* using the specified array of *indexes*. The returned array contains the corresponding element in array for each index in indexes, in order. For example, permute([\"a\", \"b\", \"c\"], [1, 2, 0])\nreturns [\"b\", \"c\", \"a\"]. It is acceptable for the array of indexes to be a different length from the array of elements, and for indexes to be duplicated or omitted.\n\nThis method can also be used to extract the values from an object into an array with a stable order. Extracting keyed values in order can be useful for generating data arrays in nested selections. For example:\n\n```js\nvar object = {yield: 27, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n fields = [\"site\", \"variety\", \"yield\"];\n\nd3.permute(object, fields); // returns [\"University Farm\", \"Manchuria\", 27]\n```\n\n# d3.shuffle(array[, start[, stop]]) [<>](https://github.com/d3/d3-array/blob/master/src/shuffle.js \"Source\")\n\nRandomizes the order of the specified *array* in-place using the [Fisher–Yates shuffle](https://bost.ocks.org/mike/shuffle/) and returns the *array*. If *start* is specified, it is the starting index (inclusive) of the *array* to shuffle; if *start* is not specified, it defaults to zero. If *stop* is specified, it is the ending index (exclusive) of the *array* to shuffle; if *stop* is not specified, it defaults to *array*.length. For example, to shuffle the first ten elements of the *array*: shuffle(*array*, 0, 10).\n\n# d3.ticks(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js \"Source\")\n\nReturns an array of approximately *count* + 1 uniformly-spaced, nicely-rounded values between *start* and *stop* (inclusive). Each value is a power of ten multiplied by 1, 2 or 5. See also [d3.tickIncrement](#tickIncrement), [d3.tickStep](#tickStep) and [*linear*.ticks](https://github.com/d3/d3-scale/blob/master/README.md#linear_ticks).\n\nTicks are inclusive in the sense that they may include the specified *start* and *stop* values if (and only if) they are exact, nicely-rounded values consistent with the inferred [step](#tickStep). More formally, each returned tick *t* satisfies *start* ≤ *t* and *t* ≤ *stop*.\n\n# d3.tickIncrement(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nLike [d3.tickStep](#tickStep), except requires that *start* is always less than or equal to *step*, and if the tick step for the given *start*, *stop* and *count* would be less than one, returns the negative inverse tick step instead. This method is always guaranteed to return an integer, and is used by [d3.ticks](#ticks) to avoid guarantee that the returned tick values are represented as precisely as possible in IEEE 754 floating point.\n\n# d3.tickStep(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nReturns the difference between adjacent tick values if the same arguments were passed to [d3.ticks](#ticks): a nicely-rounded value that is a power of ten multiplied by 1, 2 or 5. Note that due to the limited precision of IEEE 754 floating point, the returned value may not be exact decimals; use [d3-format](https://github.com/d3/d3-format) to format numbers for human consumption.\n\n# d3.range([start, ]stop[, step]) [<>](https://github.com/d3/d3-array/blob/master/src/range.js \"Source\")\n\nReturns an array containing an arithmetic progression, similar to the Python built-in [range](http://docs.python.org/library/functions.html#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.ticks](#ticks) for nicely-rounded values.)\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\nd3.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; see also [linear.tickFormat](https://github.com/d3/d3-scale/blob/master/README.md#linear_tickFormat) in [d3-scale](https://github.com/d3/d3-scale).\n\nLikewise, if the returned array should have a specific length, consider using [array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) on an integer range. For example:\n\n```js\nd3.range(0, 1, 1 / 49); // BAD: returns 50 elements!\nd3.range(49).map(function(d) { return d / 49; }); // GOOD: returns 49 elements.\n```\n\n# d3.transpose(matrix) [<>](https://github.com/d3/d3-array/blob/master/src/transpose.js \"Source\")\n\nUses the [zip](#zip) operator as a two-dimensional [matrix transpose](http://en.wikipedia.org/wiki/Transpose).\n\n# d3.zip(arrays…) [<>](https://github.com/d3/d3-array/blob/master/src/zip.js \"Source\")\n\nReturns an array of arrays, where the *i*th array contains the *i*th element from each of the argument *arrays*. The returned array is truncated in length to the shortest array in *arrays*. If *arrays* contains only a single array, the returned array contains one-element arrays. With no arguments, the returned array is empty.\n\n```js\nd3.zip([1, 2], [3, 4]); // returns [[1, 3], [2, 4]]\n```\n\n### Histograms\n\n[\"Histogram\"](http://bl.ocks.org/mbostock/3048450)\n\nHistograms bin many discrete samples into a smaller number of consecutive, non-overlapping intervals. They are often used to visualize the distribution of numerical data.\n\n# d3.histogram() [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js \"Source\")\n\nConstructs a new histogram generator with the default settings.\n\n# histogram(data) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L14 \"Source\")\n\nComputes the histogram for the given array of *data* samples. Returns an array of bins, where each bin is an array containing the associated elements from the input *data*. Thus, the `length` of the bin is the number of elements in that bin. Each bin has two additional attributes:\n\n* `x0` - the lower bound of the bin (inclusive).\n* `x1` - the upper bound of the bin (exclusive, except for the last bin).\n\n# histogram.value([value]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L58 \"Source\")\n\nIf *value* is specified, sets the value accessor to the specified function or constant and returns this histogram generator. If *value* is not specified, returns the current value accessor, which defaults to the identity function.\n\nWhen a histogram is [generated](#_histogram), the value accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default value accessor assumes that the input data are orderable (comparable), such as numbers or dates. If your data are not, then you should specify an accessor that returns the corresponding orderable value for a given datum.\n\nThis is similar to mapping your data to values before invoking the histogram generator, but has the benefit that the input data remains associated with the returned bins, thereby making it easier to access other fields of the data.\n\n# histogram.domain([domain]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L62 \"Source\")\n\nIf *domain* is specified, sets the domain accessor to the specified function or array and returns this histogram generator. If *domain* is not specified, returns the current domain accessor, which defaults to [extent](#extent). The histogram domain is defined as an array [*min*, *max*], where *min* is the minimum observable value and *max* is the maximum observable value; both values are inclusive. Any value outside of this domain will be ignored when the histogram is [generated](#_histogram).\n\nFor example, if you are using the the histogram in conjunction with a [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales) `x`, you might say:\n\n```js\nvar histogram = d3.histogram()\n .domain(x.domain())\n .thresholds(x.ticks(20));\n```\n\nYou can then compute the bins from an array of numbers like so:\n\n```js\nvar bins = histogram(numbers);\n```\n\nNote that the domain accessor is invoked on the materialized array of [values](#histogram_value), not on the input data array.\n\n# histogram.thresholds([count]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n
# histogram.thresholds([thresholds]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n\nIf *thresholds* is specified, sets the [threshold generator](#histogram-thresholds) to the specified function or array and returns this histogram generator. If *thresholds* is not specified, returns the current threshold generator, which by default implements [Sturges’ formula](#thresholdSturges). (Thus by default, the histogram values must be numbers!) Thresholds are defined as an array of values [*x0*, *x1*, …]. Any value less than *x0* will be placed in the first bin; any value greater than or equal to *x0* but less than *x1* will be placed in the second bin; and so on. Thus, the [generated histogram](#_histogram) will have *thresholds*.length + 1 bins. See [histogram thresholds](#histogram-thresholds) for more information.\n\nAny threshold values outside the [domain](#histogram_domain) are ignored. The first *bin*.x0 is always equal to the minimum domain value, and the last *bin*.x1 is always equal to the maximum domain value.\n\nIf a *count* is specified instead of an array of *thresholds*, then the [domain](#histogram_domain) will be uniformly divided into approximately *count* bins; see [ticks](#ticks).\n\n### Histogram Thresholds\n\nThese functions are typically not used directly; instead, pass them to [*histogram*.thresholds](#histogram_thresholds). You may also implement your own threshold generator taking three arguments: the array of input [*values*](#histogram_value) derived from the data, and the [observable domain](#histogram_domain) represented as *min* and *max*. The generator may then return either the array of numeric thresholds or the *count* of bins; in the latter case the domain is divided uniformly into approximately *count* bins; see [ticks](#ticks).\n\n# d3.thresholdFreedmanDiaconis(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/freedmanDiaconis.js \"Source\")\n\nReturns the number of bins according to the [Freedman–Diaconis rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdScott(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/scott.js \"Source\")\n\nReturns the number of bins according to [Scott’s normal reference rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdSturges(values) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/sturges.js \"Source\")\n\nReturns the number of bins according to [Sturges’ formula](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-array", "error": "[Circular]", "extraneous": false }, "d3-axis": { "_from": "d3-axis@1", "_id": "d3-axis@1.0.12", "_inBundle": false, "_integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", "_location": "/d3-axis", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-axis@1", "name": "d3-axis", "escapedName": "d3-axis", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", "_shasum": "cdf20ba210cfbb43795af33756886fb3638daac9", "_spec": "d3-axis@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-axis/issues" }, "deprecated": false, "description": "Displays automatic reference lines for scales.", "devDependencies": { "d3-scale": "2", "d3-selection": "^1.1.0", "eslint": "5", "jsdom": "12", "rollup": "0.64", "rollup-plugin-terser": "1", "tape": "4" }, "homepage": "https://d3js.org/d3-axis/", "jsdelivr": "dist/d3-axis.min.js", "keywords": [ "d3", "d3-module", "axis", "scale", "visualization" ], "license": "BSD-3-Clause", "main": "dist/d3-axis.js", "module": "src/index.js", "name": "d3-axis", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-axis.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "unpkg": "dist/d3-axis.min.js", "version": "1.0.12", "readme": "# d3-axis\n\nThe axis component renders human-readable reference marks for [scales](https://github.com/d3/d3-scale). This alleviates one of the more tedious tasks in visualizing data.\n\n## Installing\n\nIf you use NPM, `npm install d3-axis`. Otherwise, download the [latest release](https://github.com/d3/d3-axis/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-axis.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). (To be useful, you’ll also want to use [d3-scale](https://github.com/d3/d3-scale) and [d3-selection](https://github.com/d3/d3-selection), but these are soft dependencies.) AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-axis in your browser.](https://tonicdev.com/npm/d3-axis)\n\n## API Reference\n\nRegardless of orientation, axes are always rendered at the origin. To change the position of the axis with respect to the chart, specify a [transform attribute](http://www.w3.org/TR/SVG/coords.html#TransformAttribute) on the containing element. For example:\n\n```js\nd3.select(\"body\").append(\"svg\")\n .attr(\"width\", 1440)\n .attr(\"height\", 30)\n .append(\"g\")\n .attr(\"transform\", \"translate(0,30)\")\n .call(axis);\n```\n\nThe elements created by the axis are considered part of its public API. You can apply external stylesheets or modify the generated axis elements to [customize the axis appearance](https://bl.ocks.org/mbostock/3371592).\n\n[\"Custom](http://bl.ocks.org/mbostock/3371592)\n\nAn axis consists of a [path element](https://www.w3.org/TR/SVG/paths.html#PathElement) of class “domain” representing the extent of the scale’s domain, followed by transformed [g elements](https://www.w3.org/TR/SVG/struct.html#Groups) of class “tick” representing each of the scale’s ticks. Each tick has a [line element](https://www.w3.org/TR/SVG/shapes.html#LineElement) to draw the tick line, and a [text element](https://www.w3.org/TR/SVG/text.html#TextElement) for the tick label. For example, here is a typical bottom-oriented axis:\n\n```html\n\n \n \n \n 0.0\n \n \n \n 0.2\n \n \n \n 0.4\n \n \n \n 0.6\n \n \n \n 0.8\n \n \n \n 1.0\n \n\n```\n\nThe orientation of an axis is fixed; to change the orientation, remove the old axis and create a new axis.\n\n# d3.axisTop(scale) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L159 \"Source\")\n\nConstructs a new top-oriented axis generator for the given [scale](https://github.com/d3/d3-scale), with empty [tick arguments](#axis_ticks), a [tick size](#axis_tickSize) of 6 and [padding](#axis_tickPadding) of 3. In this orientation, ticks are drawn above the horizontal domain path.\n\n# d3.axisRight(scale) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L163 \"Source\")\n\nConstructs a new right-oriented axis generator for the given [scale](https://github.com/d3/d3-scale), with empty [tick arguments](#axis_ticks), a [tick size](#axis_tickSize) of 6 and [padding](#axis_tickPadding) of 3. In this orientation, ticks are drawn to the right of the vertical domain path.\n\n# d3.axisBottom(scale) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L167 \"Source\")\n\nConstructs a new bottom-oriented axis generator for the given [scale](https://github.com/d3/d3-scale), with empty [tick arguments](#axis_ticks), a [tick size](#axis_tickSize) of 6 and [padding](#axis_tickPadding) of 3. In this orientation, ticks are drawn below the horizontal domain path.\n\n# d3.axisLeft(scale) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L171 \"Source\")\n\nConstructs a new left-oriented axis generator for the given [scale](https://github.com/d3/d3-scale), with empty [tick arguments](#axis_ticks), a [tick size](#axis_tickSize) of 6 and [padding](#axis_tickPadding) of 3. In this orientation, ticks are drawn to the left of the vertical domain path.\n\n# axis(context) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L40 \"Source\")\n\nRender the axis to the given *context*, which may be either a [selection](https://github.com/d3/d3-selection) of SVG containers (either SVG or G elements) or a corresponding [transition](https://github.com/d3/d3-transition).\n\n# axis.scale([scale]) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L120 \"Source\")\n\nIf *scale* is specified, sets the [scale](https://github.com/d3/d3-scale) and returns the axis. If *scale* is not specified, returns the current scale.\n\n# axis.ticks(arguments…) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L124 \"Source\")\n
# axis.ticks([count[, specifier]])\n
# axis.ticks([interval[, specifier]])\n\nSets the *arguments* that will be passed to [*scale*.ticks](https://github.com/d3/d3-scale/blob/master/README.md#continuous_ticks) and [*scale*.tickFormat](https://github.com/d3/d3-scale/blob/master/README.md#continuous_tickFormat) when the axis is [rendered](#_axis), and returns the axis generator. The meaning of the *arguments* depends on the [axis’ scale](#axis_scale) type: most commonly, the arguments are a suggested *count* for the number of ticks (or a [time *interval*](https://github.com/d3/d3-time) for time scales), and an optional [format *specifier*](https://github.com/d3/d3-format) to customize how the tick values are formatted.\n\nThis method has no effect if the scale does not implement *scale*.ticks, as with [band](https://github.com/d3/d3-scale/blob/master/README.md#band-scales) and [point](https://github.com/d3/d3-scale/blob/master/README.md#point-scales) scales. To set the tick values explicitly, use [*axis*.tickValues](#axis_tickValues). To set the tick format explicitly, use [*axis*.tickFormat](#axis_tickFormat).\n\nFor example, to generate twenty ticks with SI-prefix formatting on a linear scale, say:\n\n```js\naxis.ticks(20, \"s\");\n```\n\nTo generate ticks every fifteen minutes with a time scale, say:\n\n```js\naxis.ticks(d3.timeMinute.every(15));\n```\n\nThis method is also a convenience function for [*axis*.tickArguments](#axis_tickArguments). For example, this:\n\n```js\naxis.ticks(10);\n```\n\nIs equivalent to:\n\n```js\naxis.tickArguments([10]);\n```\n\n# axis.tickArguments([arguments]) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L128 \"Source\")\n\nIf *arguments* is specified, sets the *arguments* that will be passed to [*scale*.ticks](https://github.com/d3/d3-scale/blob/master/README.md#continuous_ticks) and [*scale*.tickFormat](https://github.com/d3/d3-scale/blob/master/README.md#continuous_tickFormat) when the axis is [rendered](#_axis), and returns the axis generator. The meaning of the *arguments* depends on the [axis’ scale](#axis_scale) type: most commonly, the arguments are a suggested *count* for the number of ticks (or a [time *interval*](https://github.com/d3/d3-time) for time scales), and an optional [format *specifier*](https://github.com/d3/d3-format) to customize how the tick values are formatted.\n\nIf *arguments* is specified, this method has no effect if the scale does not implement *scale*.ticks, as with [band](https://github.com/d3/d3-scale/blob/master/README.md#band-scales) and [point](https://github.com/d3/d3-scale/blob/master/README.md#point-scales) scales. To set the tick values explicitly, use [*axis*.tickValues](#axis_tickValues). To set the tick format explicitly, use [*axis*.tickFormat](#axis_tickFormat).\n\nIf *arguments* is not specified, returns the current tick arguments, which defaults to the empty array.\n\nFor example, to generate twenty ticks with SI-prefix formatting on a linear scale, say:\n\n```js\naxis.tickArguments([20, \"s\"]);\n```\n\nTo generate ticks every fifteen minutes with a time scale, say:\n\n```js\naxis.tickArguments([d3.timeMinute.every(15)]);\n```\n\nSee also [*axis*.ticks](#axis_ticks).\n\n# axis.tickValues([values]) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L132 \"Source\")\n\nIf a *values* array is specified, the specified values are used for ticks rather than using the scale’s automatic tick generator. If *values* is null, clears any previously-set explicit tick values and reverts back to the scale’s tick generator. If *values* is not specified, returns the current tick values, which defaults to null. For example, to generate ticks at specific values:\n\n```js\nvar xAxis = d3.axisBottom(x)\n .tickValues([1, 2, 3, 5, 8, 13, 21]);\n```\n\nThe explicit tick values take precedent over the tick arguments set by [*axis*.tickArguments](#axis_tickArguments). However, any tick arguments will still be passed to the scale’s [tickFormat](#axis_tickFormat) function if a tick format is not also set.\n\n# axis.tickFormat([format]) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L136 \"Source\")\n\nIf *format* is specified, sets the tick format function and returns the axis. If *format* is not specified, returns the current format function, which defaults to null. A null format indicates that the scale’s default formatter should be used, which is generated by calling [*scale*.tickFormat](https://github.com/d3/d3-scale/blob/master/README.md#continuous_tickFormat). In this case, the arguments specified by [*axis*.tickArguments](#axis_tickArguments) are likewise passed to *scale*.tickFormat.\n\nSee [d3-format](https://github.com/d3/d3-format) and [d3-time-format](https://github.com/d3/d3-time-format) for help creating formatters. For example, to display integers with comma-grouping for thousands:\n\n```js\naxis.tickFormat(d3.format(\",.0f\"));\n```\n\nMore commonly, a format specifier is passed to [*axis*.ticks](#axis_ticks):\n\n```js\naxis.ticks(10, \",f\");\n```\n\nThis has the advantage of setting the format precision automatically based on the tick interval.\n\n# axis.tickSize([size]) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L140 \"Source\")\n\nIf *size* is specified, sets the [inner](#axis_tickSizeInner) and [outer](#axis_tickSizeOuter) tick size to the specified value and returns the axis. If *size* is not specified, returns the current inner tick size, which defaults to 6.\n\n# axis.tickSizeInner([size]) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L144 \"Source\")\n\nIf *size* is specified, sets the inner tick size to the specified value and returns the axis. If *size* is not specified, returns the current inner tick size, which defaults to 6. The inner tick size controls the length of the tick lines, offset from the native position of the axis.\n\n# axis.tickSizeOuter([size]) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L148 \"Source\")\n\nIf *size* is specified, sets the outer tick size to the specified value and returns the axis. If *size* is not specified, returns the current outer tick size, which defaults to 6. The outer tick size controls the length of the square ends of the domain path, offset from the native position of the axis. Thus, the “outer ticks” are not actually ticks but part of the domain path, and their position is determined by the associated scale’s domain extent. Thus, outer ticks may overlap with the first or last inner tick. An outer tick size of 0 suppresses the square ends of the domain path, instead producing a straight line.\n\n# axis.tickPadding([padding]) [<>](https://github.com/d3/d3-axis/blob/master/src/axis.js#L152 \"Source\")\n\nIf *padding* is specified, sets the padding to the specified value in pixels and returns the axis. If *padding* is not specified, returns the current padding which defaults to 3 pixels.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-axis", "error": "[Circular]", "extraneous": false }, "d3-brush": { "_from": "d3-brush@1", "_id": "d3-brush@1.1.6", "_inBundle": false, "_integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", "_location": "/d3-brush", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-brush@1", "name": "d3-brush", "escapedName": "d3-brush", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", "_shasum": "b0a22c7372cabec128bdddf9bddc058592f89e9b", "_spec": "d3-brush@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-brush/issues" }, "dependencies": { "d3-dispatch": { "_from": "d3-dispatch@1", "_id": "d3-dispatch@1.0.6", "_inBundle": false, "_integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", "_location": "/d3-dispatch", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-dispatch@1", "name": "d3-dispatch", "escapedName": "d3-dispatch", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-brush", "/d3-drag", "/d3-force", "/d3-transition", "/d3-zoom" ], "_resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", "_shasum": "00d37bcee4dd8cd97729dd893a0ac29caaba5d58", "_spec": "d3-dispatch@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-dispatch/issues" }, "deprecated": false, "description": "Register named callbacks and call them with arguments.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-dispatch/", "jsdelivr": "dist/d3-dispatch.min.js", "keywords": [ "d3", "d3-module", "event", "listener", "dispatch" ], "license": "BSD-3-Clause", "main": "dist/d3-dispatch.js", "module": "src/index.js", "name": "d3-dispatch", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-dispatch.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": false, "unpkg": "dist/d3-dispatch.min.js", "version": "1.0.6", "readme": "# d3-dispatch\n\nDispatching is a convenient mechanism for separating concerns with loosely-coupled code: register named callbacks and then call them with arbitrary arguments. A variety of D3 components, such as [d3-request](https://github.com/d3/d3-request), use this mechanism to emit events to listeners. Think of this like Node’s [EventEmitter](https://nodejs.org/api/events.html), except every listener has a well-defined name so it’s easy to remove or replace them.\n\nFor example, to create a dispatch for *start* and *end* events:\n\n```js\nvar dispatch = d3.dispatch(\"start\", \"end\");\n```\n\nYou can then register callbacks for these events using [*dispatch*.on](#dispatch_on):\n\n```js\ndispatch.on(\"start\", callback1);\ndispatch.on(\"start.foo\", callback2);\ndispatch.on(\"end\", callback3);\n```\n\nThen, you can invoke all the *start* callbacks using [*dispatch*.call](#dispatch_call) or [*dispatch*.apply](#dispatch_apply):\n\n```js\ndispatch.call(\"start\");\n```\n\nLike *function*.call, you may also specify the `this` context and any arguments:\n\n```js\ndispatch.call(\"start\", {about: \"I am a context object\"}, \"I am an argument\");\n```\n\nWant a more involved example? See how to use [d3-dispatch for coordinated views](http://bl.ocks.org/mbostock/5872848).\n\n## Installing\n\nIf you use NPM, `npm install d3-dispatch`. Otherwise, download the [latest release](https://github.com/d3/d3-dispatch/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-dispatch.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-dispatch in your browser.](https://tonicdev.com/npm/d3-dispatch)\n\n## API Reference\n\n# d3.dispatch(types…) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js \"Source\")\n\nCreates a new dispatch for the specified event *types*. Each *type* is a string, such as `\"start\"` or `\"end\"`.\n\n# *dispatch*.on(typenames[, callback]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L26 \"Source\")\n\nAdds, removes or gets the *callback* for the specified *typenames*. If a *callback* function is specified, it is registered for the specified (fully-qualified) *typenames*. If a callback was already registered for the given *typenames*, the existing callback is removed before the new callback is added.\n\nThe specified *typenames* is a string, such as `start` or `end.foo`. The 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 `start end` or `start.foo start.bar`.\n\nTo remove all callbacks for a given name `foo`, say `dispatch.on(\".foo\", null)`.\n\nIf *callback* is not specified, returns the current callback for the specified *typenames*, if any. If multiple typenames are specified, the first matching callback is returned.\n\n# *dispatch*.copy() [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L49 \"Source\")\n\nReturns a copy of this dispatch object. Changes to this dispatch do not affect the returned copy and vice versa.\n\n# *dispatch*.call(type[, that[, arguments…]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L54 \"Source\")\n\nLike [*function*.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. See [*dispatch*.apply](#dispatch_apply) for more information.\n\n# *dispatch*.apply(type[, that[, arguments]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L59 \"Source\")\n\nLike [*function*.apply](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. For example, if you wanted to dispatch your *custom* callbacks after handling a native *click* event, while preserving the current `this` context and arguments, you could say:\n\n```js\nselection.on(\"click\", function() {\n dispatch.apply(\"custom\", this, arguments);\n});\n```\n\nYou can pass whatever arguments you want to callbacks; most commonly, you might create an object that represents an event, or pass the current datum (*d*) and index (*i*). See [function.call](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call) and [function.apply](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Apply) for further information.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-dispatch", "error": "[Circular]", "extraneous": false, "_deduped": "d3-dispatch" }, "d3-drag": { "_from": "d3-drag@1", "_id": "d3-drag@1.2.5", "_inBundle": false, "_integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", "_location": "/d3-drag", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-drag@1", "name": "d3-drag", "escapedName": "d3-drag", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-brush", "/d3-zoom" ], "_resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", "_shasum": "2537f451acd39d31406677b7dc77c82f7d988f70", "_spec": "d3-drag@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-drag/issues" }, "dependencies": {}, "deprecated": false, "description": "Drag and drop SVG, HTML or Canvas using mouse or touch input.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-drag/", "jsdelivr": "dist/d3-drag.min.js", "keywords": [ "d3", "d3-module", "drag", "behavior", "interaction" ], "license": "BSD-3-Clause", "main": "dist/d3-drag.js", "module": "src/index.js", "name": "d3-drag", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-drag.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-drag.min.js", "version": "1.2.5", "readme": "# d3-drag\n\n[Drag-and-drop](https://en.wikipedia.org/wiki/Drag_and_drop) is a popular and easy-to-learn pointing gesture: move the pointer to an object, press and hold to grab it, “drag” the object to a new location, and release to “drop”. D3’s [drag behavior](#api-reference) provides a convenient but flexible abstraction for enabling drag-and-drop interaction on [selections](https://github.com/d3/d3-selection). For example, you can use d3-drag to facilitate interaction with a [force-directed graph](https://github.com/d3/d3-force), or a simulation of colliding circles:\n\n[\"Force](http://bl.ocks.org/mbostock/ad70335eeef6d167bc36fd3c04378048)[\"Force](http://bl.ocks.org/mbostock/2990a882e007f8384b04827617752738)\n\nYou can also use d3-drag to implement custom user interface elements, such as a slider. But the drag behavior isn’t just for moving elements around; there are a variety of ways to respond to a drag gesture. For example, you can use it to lasso elements in a scatterplot, or to paint lines on a canvas:\n\n[\"Line](http://bl.ocks.org/mbostock/f705fc55e6f26df29354)\n\nThe drag behavior can be combined with other behaviors, such as [d3-zoom](https://github.com/d3/d3-zoom) for zooming.\n\n[\"Drag](http://bl.ocks.org/mbostock/3127661b6f13f9316be745e77fdfb084)\n\nThe drag behavior is agnostic about the DOM, so you can use it with SVG, HTML or even Canvas! And you can extend it with advanced selection techniques, such as a Voronoi overlay or a closest-target search:\n\n[\"Circle](http://bl.ocks.org/mbostock/ec10387f24c1fad2acac3bc11eb218a5)[\"Circle](http://bl.ocks.org/mbostock/c206c20294258c18832ff80d8fd395c3)\n\nBest of all, the drag behavior automatically unifies mouse and touch input, and avoids browser idiosyncrasies. When [Pointer Events](https://www.w3.org/TR/pointerevents/) are more widely available, the drag behavior will support those, too.\n\n## Installing\n\nIf you use NPM, `npm install d3-drag`. Otherwise, download the [latest release](https://github.com/d3/d3-drag/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-drag.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n\n\n```\n\n[Try d3-drag in your browser.](https://tonicdev.com/npm/d3-drag)\n\n## API Reference\n\nThis table describes how the drag behavior interprets native events:\n\n| Event | Listening Element | Drag Event | Default Prevented? |\n| ------------ | ----------------- | ---------- | ------------------ |\n| mousedown⁵ | selection | start | no¹ |\n| mousemove² | window¹ | drag | yes |\n| mouseup² | window¹ | end | yes |\n| dragstart² | window | - | yes |\n| selectstart² | window | - | yes |\n| click³ | window | - | yes |\n| touchstart | selection | start | no⁴ |\n| touchmove | selection | drag | yes |\n| touchend | selection | end | no⁴ |\n| touchcancel | selection | end | no⁴ |\n\nThe propagation of all consumed events is [immediately stopped](https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation). If you want to prevent some events from initiating a drag gesture, use [*drag*.filter](#drag_filter).\n\n¹ Necessary to capture events outside an iframe; see [#9](https://github.com/d3/d3-drag/issues/9).\n
² Only applies during an active, mouse-based gesture; see [#9](https://github.com/d3/d3-drag/issues/9).\n
³ Only applies immediately after some mouse-based gestures; see [*drag*.clickDistance](#drag_clickDistance).\n
⁴ Necessary to allow [click emulation](https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7) on touch input; see [#9](https://github.com/d3/d3-drag/issues/9).\n
⁵ Ignored if within 500ms of a touch gesture ending; assumes [click emulation](https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7).\n\n# d3.drag() [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js \"Source\")\n\nCreates a new drag behavior. The returned behavior, [*drag*](#_drag), is both an object and a function, and is typically applied to selected elements via [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n# drag(selection) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L39 \"Source\")\n\nApplies this drag behavior to the specified [*selection*](https://github.com/d3/d3-selection). This function is typically not invoked directly, and is instead invoked via [*selection*.call](https://github.com/d3/d3-selection#selection_call). For example, to instantiate a drag behavior and apply it to a selection:\n\n```js\nd3.selectAll(\".node\").call(d3.drag().on(\"start\", started));\n```\n\nInternally, the drag behavior uses [*selection*.on](https://github.com/d3/d3-selection#selection_on) to bind the necessary event listeners for dragging. The listeners use the name `.drag`, so you can subsequently unbind the drag behavior as follows:\n\n```js\nselection.on(\".drag\", null);\n```\n\nApplying the drag behavior also sets the [-webkit-tap-highlight-color](https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/AdjustingtheTextSize/AdjustingtheTextSize.html#//apple_ref/doc/uid/TP40006510-SW5) style to transparent, disabling the tap highlight on iOS. If you want a different tap highlight color, remove or re-apply this style after applying the drag behavior.\n\n# drag.container([container]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L145 \"Source\")\n\nIf *container* is specified, sets the container accessor to the specified object or function and returns the drag behavior. If *container* is not specified, returns the current container accessor, which defaults to:\n\n```js\nfunction container() {\n return this.parentNode;\n}\n```\n\nThe *container* of a drag gesture determines the coordinate system of subsequent [drag events](#drag-events), affecting *event*.x and *event*.y. The element returned by the container accessor is subsequently passed to [d3.mouse](https://github.com/d3/d3-selection#mouse) or [d3.touch](https://github.com/d3/d3-selection#touch), as appropriate, to determine the local coordinates of the pointer.\n\nThe default container accessor returns the parent node of the element in the originating selection (see [*drag*](#_drag)) that received the initiating input event. This is often appropriate when dragging SVG or HTML elements, since those elements are typically positioned relative to a parent. For dragging graphical elements with a Canvas, however, you may want to redefine the container as the initiating element itself:\n\n```js\nfunction container() {\n return this;\n}\n```\n\nAlternatively, the container may be specified as the element directly, such as `drag.container(canvas)`.\n\n# drag.filter([filter]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L141 \"Source\")\n\nIf *filter* is specified, sets the filter to the specified function and returns the drag behavior. If *filter* is not specified, returns the current filter, which defaults to:\n\n```js\nfunction filter() {\n return !d3.event.ctrlKey && !d3.event.button;\n}\n```\n\nIf the filter returns falsey, the initiating event is ignored and no drag gestures are started. Thus, the filter determines which input events are ignored; the default filter ignores mousedown events on secondary buttons, since those buttons are typically intended for other purposes, such as the context menu.\n\n# drag.touchable([touchable]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L153 \"Source\")\n\nIf *touchable* is specified, sets the touch support detector to the specified function and returns the drag behavior. If *touchable* is not specified, returns the current touch support detector, which defaults to:\n\n```js\nfunction touchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n```\n\nTouch event listeners are only registered if the detector returns truthy for the corresponding element when the drag behavior is [applied](#_drag). The default detector works well for most browsers that are capable of touch input, but not all; Chrome’s mobile device emulator, for example, fails detection.\n\n# drag.subject([subject]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L149 \"Source\")\n\nIf *subject* is specified, sets the subject accessor to the specified object or function and returns the drag behavior. If *subject* is not specified, returns the current subject accessor, which defaults to:\n\n```js\nfunction subject(d) {\n return d == null ? {x: d3.event.x, y: d3.event.y} : d;\n}\n```\n\nThe *subject* of a drag gesture represents *the thing being dragged*. It is computed when an initiating input event is received, such as a mousedown or touchstart, immediately before the drag gesture starts. The subject is then exposed as *event*.subject on subsequent [drag events](#drag-events) for this gesture.\n\nThe default subject is the [datum](https://github.com/d3/d3-selection#selection_datum) of the element in the originating selection (see [*drag*](#_drag)) that received the initiating input event; if this datum is undefined, an object representing the coordinates of the pointer is created. When dragging circle elements in SVG, the default subject is thus the datum of the circle being dragged. With [Canvas](https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element), the default subject is the canvas element’s datum (regardless of where on the canvas you click). In this case, a custom subject accessor would be more appropriate, such as one that picks the closest circle to the mouse within a given search *radius*:\n\n```js\nfunction subject() {\n var n = circles.length,\n i,\n dx,\n dy,\n d2,\n s2 = radius * radius,\n circle,\n subject;\n\n for (i = 0; i < n; ++i) {\n circle = circles[i];\n dx = d3.event.x - circle.x;\n dy = d3.event.y - circle.y;\n d2 = dx * dx + dy * dy;\n if (d2 < s2) subject = circle, s2 = d2;\n }\n\n return subject;\n}\n```\n\n(If necessary, the above can be accelerated using [*quadtree*.find](https://github.com/d3/d3-quadtree#quadtree_find).)\n\nThe returned subject should be an object that exposes `x` and `y` properties, so that the relative position of the subject and the pointer can be preserved during the drag gesture. If the subject is null or undefined, no drag gesture is started for this pointer; however, other starting touches may yet start drag gestures. See also [*drag*.filter](#drag_filter).\n\nThe subject of a drag gesture may not be changed after the gesture starts. The subject accessor is invoked with the same context and arguments as [*selection*.on](https://github.com/d3/d3-selection#selection_on) listeners: the current datum `d` and index `i`, with the `this` context as the current DOM element. During the evaluation of the subject accessor, [d3.event](https://github.com/d3/d3-selection#event) is a beforestart [drag event](#drag-events). Use *event*.sourceEvent to access the initiating input event and *event*.identifier to access the touch identifier. The *event*.x and *event*.y are relative to the [container](#drag_container), and are computed using [d3.mouse](https://github.com/d3/d3-selection#mouse) or [d3.touch](https://github.com/d3/d3-selection#touch) as appropriate.\n\n# drag.clickDistance([distance]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L162 \"Source\")\n\nIf *distance* is specified, sets the maximum distance that the mouse can move between mousedown and mouseup that will trigger a subsequent click event. If at any point between mousedown and mouseup the mouse is greater than or equal to *distance* from its position on mousedown, the click event following mouseup will be suppressed. If *distance* is not specified, returns the current distance threshold, which defaults to zero. The distance threshold is measured in client coordinates ([*event*.clientX](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientX) and [*event*.clientY](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientY)).\n\n# drag.on(typenames, [listener]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L157 \"Source\")\n\nIf *listener* is specified, sets the event *listener* for the specified *typenames* and returns the drag behavior. If an event listener was already registered for the same type and name, the existing listener is removed before the new listener is added. If *listener* is null, removes the current event listeners for the specified *typenames*, if any. If *listener* is not specified, returns the first currently-assigned listener matching the specified *typenames*, if any. When a specified event is dispatched, each *listener* will be invoked with the same context and arguments as [*selection*.on](https://github.com/d3/d3-selection#selection_on) listeners: the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\nThe *typenames* is a string containing one or more *typename* separated by whitespace. Each *typename* is a *type*, optionally followed by a period (`.`) and a *name*, such as `drag.foo` and `drag.bar`; the name allows multiple listeners to be registered for the same *type*. The *type* must be one of the following:\n\n* `start` - after a new pointer becomes active (on mousedown or touchstart).\n* `drag` - after an active pointer moves (on mousemove or touchmove).\n* `end` - after an active pointer becomes inactive (on mouseup, touchend or touchcancel).\n\nSee [*dispatch*.on](https://github.com/d3/d3-dispatch#dispatch_on) for more.\n\nChanges to registered listeners via *drag*.on during a drag gesture *do not affect* the current drag gesture. Instead, you must use [*event*.on](#event_on), which also allows you to register temporary event listeners for the current drag gesture. **Separate events are dispatched for each active pointer** during a drag gesture. For example, if simultaneously dragging multiple subjects with multiple fingers, a start event is dispatched for each finger, even if both fingers start touching simultaneously. See [Drag Events](#drag-events) for more.\n\n# d3.dragDisable(window) [<>](https://github.com/d3/d3-drag/blob/master/src/nodrag.js#L4 \"Source\")\n\nPrevents native drag-and-drop and text selection on the specified *window*. As an alternative to preventing the default action of mousedown events (see [#9](https://github.com/d3/d3-drag/issues/9)), this method prevents undesirable default actions following mousedown. In supported browsers, this means capturing dragstart and selectstart events, preventing the associated default actions, and immediately stopping their propagation. In browsers that do not support selection events, the user-select CSS property is set to none on the document element. This method is intended to be called on mousedown, followed by [d3.dragEnable](#dragEnable) on mouseup.\n\n# d3.dragEnable(window[, noclick]) [<>](https://github.com/d3/d3-drag/blob/master/src/nodrag.js#L15 \"Source\")\n\nAllows native drag-and-drop and text selection on the specified *window*; undoes the effect of [d3.dragDisable](#dragDisable). This method is intended to be called on mouseup, preceded by [d3.dragDisable](#dragDisable) on mousedown. If *noclick* is true, this method also temporarily suppresses click events. The suppression of click events expires after a zero-millisecond timeout, such that it only suppress the click event that would immediately follow the current mouseup event, if any.\n\n### Drag Events\n\nWhen a [drag event listener](#drag_on) is invoked, [d3.event](https://github.com/d3/d3-selection#event) is set to the current drag event. The *event* object exposes several fields:\n\n* `target` - the associated [drag behavior](#drag).\n* `type` - the string “start”, “drag” or “end”; see [*drag*.on](#drag_on).\n* `subject` - the drag subject, defined by [*drag*.subject](#drag_subject).\n* `x` - the new *x*-coordinate of the subject; see [*drag*.container](#drag_container).\n* `y` - the new *y*-coordinate of the subject; see [*drag*.container](#drag_container).\n* `dx` - the change in *x*-coordinate since the previous drag event.\n* `dy` - the change in *y*-coordinate since the previous drag event.\n* `identifier` - the string “mouse”, or a numeric [touch identifier](https://www.w3.org/TR/touch-events/#widl-Touch-identifier).\n* `active` - the number of currently active drag gestures (on start and end, not including this one).\n* `sourceEvent` - the underlying input event, such as mousemove or touchmove.\n\nThe *event*.active field is useful for detecting the first start event and the last end event in a sequence of concurrent drag gestures: it is zero when the first drag gesture starts, and zero when the last drag gesture ends.\n\nThe *event* object also exposes the [*event*.on](#event_on) method.\n\n# event.on(typenames, [listener]) [<>](https://github.com/d3/d3-drag/blob/master/src/event.js \"Source\")\n\nEquivalent to [*drag*.on](#drag_on), but only applies to the current drag gesture. Before the drag gesture starts, a [copy](https://github.com/d3/d3-dispatch#dispatch_copy) of the current drag [event listeners](#drag_on) is made. This copy is bound to the current drag gesture and modified by *event*.on. This is useful for temporary listeners that only receive events for the current drag gesture. For example, this start event listener registers temporary drag and end event listeners as closures:\n\n```js\nfunction started() {\n var circle = d3.select(this).classed(\"dragging\", true);\n\n d3.event.on(\"drag\", dragged).on(\"end\", ended);\n\n function dragged(d) {\n circle.raise().attr(\"cx\", d.x = d3.event.x).attr(\"cy\", d.y = d3.event.y);\n }\n\n function ended() {\n circle.classed(\"dragging\", false);\n }\n}\n```\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-dispatch": "1", "d3-selection": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-drag", "error": "[Circular]", "extraneous": false, "_deduped": "d3-drag" }, "d3-interpolate": { "_from": "d3-interpolate@1", "_id": "d3-interpolate@1.4.0", "_inBundle": false, "_integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "_location": "/d3-interpolate", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-interpolate@1", "name": "d3-interpolate", "escapedName": "d3-interpolate", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-brush", "/d3-scale", "/d3-scale-chromatic", "/d3-transition", "/d3-zoom" ], "_resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", "_shasum": "526e79e2d80daa383f9e0c1c1c7dcc0f0583e987", "_spec": "d3-interpolate@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-interpolate/issues" }, "dependencies": {}, "deprecated": false, "description": "Interpolate numbers, colors, strings, arrays, objects, whatever!", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-interpolate/", "jsdelivr": "dist/d3-interpolate.min.js", "keywords": [ "d3", "d3-module", "interpolate", "interpolation", "color" ], "license": "BSD-3-Clause", "main": "dist/d3-interpolate.js", "module": "src/index.js", "name": "d3-interpolate", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-interpolate.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-interpolate.min.js", "version": "1.4.0", "readme": "# d3-interpolate\n\nThis module provides a variety of interpolation methods for blending between two values. Values may be numbers, colors, strings, arrays, or even deeply-nested objects. For example:\n\n```js\nvar i = d3.interpolateNumber(10, 20);\ni(0.0); // 10\ni(0.2); // 12\ni(0.5); // 15\ni(1.0); // 20\n```\n\nThe returned function `i` is called an *interpolator*. Given a starting value *a* and an ending value *b*, it takes a parameter *t* in the domain [0, 1] and returns the corresponding interpolated value between *a* and *b*. An interpolator typically returns a value equivalent to *a* at *t* = 0 and a value equivalent to *b* at *t* = 1.\n\nYou can interpolate more than just numbers. To find the perceptual midpoint between steelblue and brown:\n\n```js\nd3.interpolateLab(\"steelblue\", \"brown\")(0.5); // \"rgb(142, 92, 109)\"\n```\n\nHere’s a more elaborate example demonstrating type inference used by [interpolate](#interpolate):\n\n```js\nvar i = d3.interpolate({colors: [\"red\", \"blue\"]}, {colors: [\"white\", \"black\"]});\ni(0.0); // {colors: [\"rgb(255, 0, 0)\", \"rgb(0, 0, 255)\"]}\ni(0.5); // {colors: [\"rgb(255, 128, 128)\", \"rgb(0, 0, 128)\"]}\ni(1.0); // {colors: [\"rgb(255, 255, 255)\", \"rgb(0, 0, 0)\"]}\n```\n\nNote that the generic value interpolator detects not only nested objects and arrays, but also color strings and numbers embedded in strings!\n\n## Installing\n\nIf you use NPM, `npm install d3-interpolate`. Otherwise, download the [latest release](https://github.com/d3/d3-interpolate/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-interpolate.v1.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\n\n\n```\n\n## API Reference\n\n# d3.interpolate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/value.js), [Examples](https://observablehq.com/@d3/d3-interpolate)\n\nReturns an interpolator between the two arbitrary values *a* and *b*. The interpolator implementation is based on the type of the end value *b*, using the following algorithm:\n\n1. If *b* is null, undefined or a boolean, use the constant *b*.\n2. If *b* is a number, use [interpolateNumber](#interpolateNumber).\n3. If *b* is a [color](https://github.com/d3/d3-color/blob/master/README.md#color) or a string coercible to a color, use [interpolateRgb](#interpolateRgb).\n4. If *b* is a [date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), use [interpolateDate](#interpolateDate).\n5. If *b* is a string, use [interpolateString](#interpolateString).\n6. If *b* is a [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) of numbers, use [interpolateNumberArray](#interpolateNumberArray).\n7. If *b* is a generic [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray), use [interpolateArray](#interpolateArray).\n8. If *b* is coercible to a number, use [interpolateNumber](#interpolateNumber).\n9. Use [interpolateObject](#interpolateObject).\n\nBased on the chosen interpolator, *a* is coerced to the suitable corresponding type.\n\n# d3.interpolateNumber(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/number.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*. The returned interpolator is equivalent to:\n\n```js\nfunction interpolator(t) {\n return a * (1 - t) + b * t;\n}\n```\n\nCaution: avoid interpolating to or from the number zero when the interpolator is used to generate a string. When very small values are stringified, they may be converted to scientific notation, which is an invalid attribute or style property value in older browsers. For example, the number `0.0000001` is converted to the string `\"1e-7\"`. This is particularly noticeable with interpolating opacity. To avoid scientific notation, start or end the transition at 1e-6: the smallest value that is not stringified in scientific notation.\n\n# d3.interpolateRound(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/round.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*; the interpolator is similar to [interpolateNumber](#interpolateNumber), except it will round the resulting value to the nearest integer.\n\n# d3.interpolateString(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/string.js), [Examples](https://observablehq.com/@d3/d3-interpolatestring)\n\nReturns an interpolator between the two strings *a* and *b*. The string interpolator finds numbers embedded in *a* and *b*, where each number is of the form understood by JavaScript. A few examples of numbers that will be detected within a string: `-1`, `42`, `3.14159`, and `6.0221413e+23`.\n\nFor each number embedded in *b*, the interpolator will attempt to find a corresponding number in *a*. If a corresponding number is found, a numeric interpolator is created using [interpolateNumber](#interpolateNumber). The remaining parts of the string *b* are used as a template: the static parts of the string *b* remain constant for the interpolation, with the interpolated numeric values embedded in the template.\n\nFor example, if *a* is `\"300 12px sans-serif\"`, and *b* is `\"500 36px Comic-Sans\"`, two embedded numbers are found. The remaining static parts (of string *b*) are a space between the two numbers (`\" \"`), and the suffix (`\"px Comic-Sans\"`). The result of the interpolator at *t* = 0.5 is `\"400 24px Comic-Sans\"`.\n\n# d3.interpolateDate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/date.js), [Examples](https://observablehq.com/@d3/d3-interpolatedate)\n\nReturns an interpolator between the two [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) *a* and *b*.\n\nNote: **no defensive copy** of the returned date is created; the same Date instance is returned for every evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/array.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two arrays *a* and *b*. If *b* is a typed array (e.g., Float64Array), [interpolateNumberArray](#interpolateNumberArray) is called instead.\n\nInternally, an array template is created that is the same length as *b*. For each element in *b*, if there exists a corresponding element in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such element, the static value from *b* is used in the template. Then, for the given parameter *t*, the template’s embedded interpolators are evaluated. The updated array template is then returned.\n\nFor example, if *a* is the array `[0, 1]` and *b* is the array `[1, 10, 100]`, then the result of the interpolator for *t* = 0.5 is the array `[0.5, 5.5, 100]`.\n\nNote: **no defensive copy** of the template array is created; modifications of the returned array may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateNumberArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/numberArray.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumberarray)\n\nReturns an interpolator between the two arrays of numbers *a* and *b*. Internally, an array template is created that is the same type and length as *b*. For each element in *b*, if there exists a corresponding element in *a*, the values are directly interpolated in the array template. If there is no such element, the static value from *b* is copied. The updated array template is then returned.\n\nNote: For performance reasons, **no defensive copy** is made of the template array and the arguments *a* and *b*; modifications of these arrays may affect subsequent evaluation of the interpolator.\n\n# d3.interpolateObject(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/object.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two objects *a* and *b*. Internally, an object template is created that has the same properties as *b*. For each property in *b*, if there exists a corresponding property in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such property, the static value from *b* is used in the template. Then, for the given parameter *t*, the template's embedded interpolators are evaluated and the updated object template is then returned.\n\nFor example, if *a* is the object `{x: 0, y: 1}` and *b* is the object `{x: 1, y: 10, z: 100}`, the result of the interpolator for *t* = 0.5 is the object `{x: 0.5, y: 5.5, z: 100}`.\n\nObject interpolation is particularly useful for *dataspace interpolation*, where data is interpolated rather than attribute values. For example, you can interpolate an object which describes an arc in a pie chart, and then use [d3.arc](https://github.com/d3/d3-shape/blob/master/README.md#arc) to compute the new SVG path data.\n\nNote: **no defensive copy** of the template object is created; modifications of the returned object may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateTransformCss(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L62), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D CSS transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateTransformSvg(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L63), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D SVG transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateZoom(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/zoom.js), [Examples](https://observablehq.com/@d3/d3-interpolatezoom)\n\nReturns an interpolator between the two views *a* and *b* of a two-dimensional plane, based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf) by Jarke J. van Wijk and Wim A.A. Nuij. Each view is defined as an array of three numbers: *cx*, *cy* and *width*. The first two coordinates *cx*, *cy* represent the center of the viewport; the last coordinate *width* represents the size of the viewport.\n\nThe returned interpolator exposes a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *x,y* space. If you want a slower or faster transition, multiply this by an arbitrary scale factor (V as described in the original paper).\n\n# d3.interpolateDiscrete(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/discrete.js), [Examples](https://observablehq.com/@d3/d3-interpolatediscrete)\n\nReturns a discrete interpolator for the given array of *values*. The returned interpolator maps *t* in [0, 1 / *n*) to *values*[0], *t* in [1 / *n*, 2 / *n*) to *values*[1], and so on, where *n* = *values*.length. In effect, this is a lightweight [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) with a fixed domain of [0, 1].\n\n### Sampling\n\n# d3.quantize(interpolator, n) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/d3-quantize)\n\nReturns *n* uniformly-spaced samples from the specified *interpolator*, where *n* is an integer greater than one. The first sample is always at *t* = 0, and the last sample is always at *t* = 1. This can be useful in generating a fixed number of samples from a given interpolator, such as to derive the range of a [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) from a [continuous interpolator](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateWarm).\n\nCaution: this method will not work with interpolators that do not return defensive copies of their output, such as [d3.interpolateArray](#interpolateArray), [d3.interpolateDate](#interpolateDate) and [d3.interpolateObject](#interpolateObject). For those interpolators, you must wrap the interpolator and create a copy for each returned value.\n\n### Color Spaces\n\n# d3.interpolateRgb(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"rgb\"\n\nOr, with a corrected [gamma](#interpolate_gamma) of 2.2:\n\n\"rgbGamma\"\n\nReturns an RGB color space interpolator between the two colors *a* and *b* with a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in RGB; they will be converted to RGB using [d3.rgb](https://github.com/d3/d3-color/blob/master/README.md#rgb). The return value of the interpolator is an RGB string.\n\n# d3.interpolateRgbBasis(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L54), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). Implicit control points are generated such that the interpolator returns *colors*[0] at *t* = 0 and *colors*[*colors*.length - 1] at *t* = 1. Opacity interpolation is not currently supported. See also [d3.interpolateBasis](#interpolateBasis), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateRgbBasisClosed(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L55), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). The control points are implicitly repeated such that the resulting spline has cyclical C² continuity when repeated around *t* in [0,1]; this is useful, for example, to create cyclical color scales. Opacity interpolation is not currently supported. See also [d3.interpolateBasisClosed](#interpolateBasisClosed), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateHsl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hsl\"\n\nReturns an HSL color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in HSL; they will be converted to HSL using [d3.hsl](https://github.com/d3/d3-color/blob/master/README.md#hsl). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHslLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hslLong\"\n\nLike [interpolateHsl](#interpolateHsl), but does not use the shortest path between hues.\n\n# d3.interpolateLab(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/lab.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"lab\"\n\nReturns a [CIELAB color space](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELAB; they will be converted to CIELAB using [d3.lab](https://github.com/d3/d3-color/blob/master/README.md#lab). The return value of the interpolator is an RGB string.\n\n# d3.interpolateHcl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hcl\"\n\nReturns a [CIELChab color space](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELChab; they will be converted to CIELChab using [d3.hcl](https://github.com/d3/d3-color/blob/master/README.md#hcl). If either color’s hue or chroma is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHclLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hclLong\"\n\nLike [interpolateHcl](#interpolateHcl), but does not use the shortest path between hues.\n\n# d3.interpolateCubehelix(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelix\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGamma\"\n\nReturns a Cubehelix color space interpolator between the two colors *a* and *b* using a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in Cubehelix; they will be converted to Cubehelix using [d3.cubehelix](https://github.com/d3/d3-color/blob/master/README.md#cubehelix). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateCubehelixLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js#L29), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelixLong\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGammaLong\"\n\nLike [interpolateCubehelix](#interpolateCubehelix), but does not use the shortest path between hues.\n\n# interpolate.gamma(gamma)\n\nGiven that *interpolate* is one of [interpolateRgb](#interpolateRgb), [interpolateCubehelix](#interpolateCubehelix) or [interpolateCubehelixLong](#interpolateCubehelixLong), returns a new interpolator factory of the same type using the specified *gamma*. For example, to interpolate from purple to orange with a gamma of 2.2 in RGB space:\n\n```js\nvar interpolator = d3.interpolateRgb.gamma(2.2)(\"purple\", \"orange\");\n```\n\nSee Eric Brasseur’s article, [Gamma error in picture scaling](https://web.archive.org/web/20160112115812/http://www.4p8.com/eric.brasseur/gamma.html), for more on gamma correction.\n\n# d3.interpolateHue(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hue.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns an interpolator between the two hue angles *a* and *b*. If either hue is NaN, the opposing value is used. The shortest path between hues is used. The return value of the interpolator is a number in [0, 360).\n\n### Splines\n\nWhereas standard interpolators blend from a starting value *a* at *t* = 0 to an ending value *b* at *t* = 1, spline interpolators smoothly blend multiple input values for *t* in [0,1] using piecewise polynomial functions. Only cubic uniform nonrational [B-splines](https://en.wikipedia.org/wiki/B-spline) are currently supported, also known as basis splines.\n\n# d3.interpolateBasis(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basis.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. Implicit control points are generated such that the interpolator returns *values*[0] at *t* = 0 and *values*[*values*.length - 1] at *t* = 1. See also [d3.curveBasis](https://github.com/d3/d3-shape/blob/master/README.md#curveBasis).\n\n# d3.interpolateBasisClosed(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basisClosed.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. The control points are implicitly repeated such that the resulting one-dimensional spline has cyclical C² continuity when repeated around *t* in [0,1]. See also [d3.curveBasisClosed](https://github.com/d3/d3-shape/blob/master/README.md#curveBasisClosed).\n\n### Piecewise\n\n# d3.piecewise(interpolate, values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/piecewise.js), [Examples](https://observablehq.com/@d3/d3-piecewise)\n\nReturns a piecewise interpolator, composing interpolators for each adjacent pair of *values*. The returned interpolator maps *t* in [0, 1 / (*n* - 1)] to *interpolate*(*values*[0], *values*[1]), *t* in [1 / (*n* - 1), 2 / (*n* - 1)] to *interpolate*(*values*[1], *values*[2]), and so on, where *n* = *values*.length. In effect, this is a lightweight [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales). For example, to blend through red, green and blue:\n\n```js\nvar interpolate = d3.piecewise(d3.interpolateRgb.gamma(2.2), [\"red\", \"green\", \"blue\"]);\n```\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-color": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-interpolate", "error": "[Circular]", "extraneous": false, "_deduped": "d3-interpolate" }, "d3-selection": { "_from": "d3-selection@1", "_id": "d3-selection@1.4.2", "_inBundle": false, "_integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", "_location": "/d3-selection", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-selection@1", "name": "d3-selection", "escapedName": "d3-selection", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-brush", "/d3-drag", "/d3-transition", "/d3-zoom" ], "_resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", "_shasum": "dcaa49522c0dbf32d6c1858afc26b6094555bc5c", "_spec": "d3-selection@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "https://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-selection/issues" }, "deprecated": false, "description": "Data-driven DOM manipulation: select elements and join them to data.", "devDependencies": { "eslint": "6", "jsdom": "15", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-selection/", "jsdelivr": "dist/d3-selection.min.js", "keywords": [ "d3", "d3-module", "dom", "selection", "data-join" ], "license": "BSD-3-Clause", "main": "dist/d3-selection.js", "module": "src/index.js", "name": "d3-selection", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-selection.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-selection.min.js", "version": "1.4.2", "readme": "# d3-selection\n\nSelections allow powerful data-driven transformation of the document object model (DOM): set [attributes](#selection_attr), [styles](#selection_style), [properties](#selection_property), [HTML](#selection_html) or [text](#selection_text) content, and more. Using the [data join](#joining-data)’s [enter](#selection_enter) and [exit](#selection_enter) selections, you can also [add](#selection_append) or [remove](#selection_remove) elements to correspond to data.\n\nSelection methods typically return the current selection, or a new selection, allowing the concise application of multiple operations on a given selection via method chaining. For example, to set the class and color style of all paragraph elements in the current document:\n\n```js\nd3.selectAll(\"p\")\n .attr(\"class\", \"graf\")\n .style(\"color\", \"red\");\n```\n\nThis is equivalent to:\n\n```js\nconst p = d3.selectAll(\"p\");\np.attr(\"class\", \"graf\");\np.style(\"color\", \"red\");\n```\n\nBy convention, selection methods that return the current selection use *four* spaces of indent, while methods that return a new selection use only *two*. This helps reveal changes of context by making them stick out of the chain:\n\n```js\nd3.select(\"body\")\n .append(\"svg\")\n .attr(\"width\", 960)\n .attr(\"height\", 500)\n .append(\"g\")\n .attr(\"transform\", \"translate(20,20)\")\n .append(\"rect\")\n .attr(\"width\", 920)\n .attr(\"height\", 460);\n```\n\nSelections are immutable. All selection methods that affect which elements are selected (or their order) return a new selection rather than modifying the current selection. However, note that elements are necessarily mutable, as selections drive transformations of the document!\n\n## Installing\n\nIf you use NPM, `npm install d3-selection`. Otherwise, download the [latest release](https://github.com/d3/d3-selection/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-selection.v1.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\n\n```\n\n[Try d3-selection in your browser.](https://observablehq.com/collection/@d3/d3-selection)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Joining Data](#joining-data)\n* [Handling Events](#handling-events)\n* [Control Flow](#control-flow)\n* [Local Variables](#local-variables)\n* [Namespaces](#namespaces)\n\n### Selecting Elements\n\nSelection methods accept [W3C selector strings](http://www.w3.org/TR/selectors-api/) such as `.fancy` to select elements with the class *fancy*, or `div` to select DIV elements. Selection methods come in two forms: select and selectAll: the former selects only the first matching element, while the latter selects all matching elements in document order. The top-level selection methods, [d3.select](#select) and [d3.selectAll](#selectAll), query the entire document; the subselection methods, [*selection*.select](#selection_select) and [*selection*.selectAll](#selection_selectAll), restrict selection to descendants of the selected elements.\n\n# d3.selection() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/index.js#L38 \"Source\")\n\n[Selects](#select) the root element, `document.documentElement`. This function can also be used to test for selections (`instanceof d3.selection`) or to extend the selection prototype. For example, to add a method to check checkboxes:\n\n```js\nd3.selection.prototype.checked = function(value) {\n return arguments.length < 1\n ? this.property(\"checked\")\n : this.property(\"checked\", !!value);\n};\n```\n\nAnd then to use:\n\n```js\nd3.selectAll(\"input[type=checkbox]\").checked(true);\n```\n\n# d3.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/select.js#L3 \"Source\")\n\nSelects the first element that matches the specified *selector* string. If no elements match the *selector*, returns an empty selection. If multiple elements match the *selector*, only the first matching element (in document order) will be selected. For example, to select the first anchor element:\n\n```js\nconst anchor = d3.select(\"a\");\n```\n\nIf the *selector* is not a string, instead selects the specified node; this is useful if you already have a reference to a node, such as `this` within an event listener or a global such as `document.body`. For example, to make a clicked paragraph red:\n\n```js\nd3.selectAll(\"p\").on(\"click\", function() {\n d3.select(this).style(\"color\", \"red\");\n});\n```\n\n# d3.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js#L3 \"Source\")\n\nSelects all elements that match the specified *selector* string. The elements will be selected in document order (top-to-bottom). If no elements in the document match the *selector*, or if the *selector* is null or undefined, returns an empty selection. For example, to select all paragraphs:\n\n```js\nconst paragraph = d3.selectAll(\"p\");\n```\n\nIf the *selector* is not a string, instead selects the specified array of nodes; this is useful if you already have a reference to nodes, such as `this.childNodes` within an event listener or a global such as `document.links`. The nodes may instead be a pseudo-array such as a `NodeList` or `arguments`. For example, to color all links red:\n\n```js\nd3.selectAll(document.links).style(\"color\", \"red\");\n```\n\n# selection.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/select.js \"Source\")\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string. If no element matches the specified selector for the current element, the element at the current index will be null in the returned selection. (If the *selector* is null, every element in the returned selection will be null, resulting in an empty selection.) If the current element has associated data, this data is propagated to the corresponding selected element. If multiple elements match the selector, only the first matching element in document order is selected. For example, to select the first bold element in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").select(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an element, or null if there is no matching element. For example, to select the previous sibling of each paragraph:\n\n```js\nconst previous = d3.selectAll(\"p\").select(function() {\n return this.previousElementSibling;\n});\n```\n\nUnlike [*selection*.selectAll](#selection_selectAll), *selection*.select does not affect grouping: it preserves the existing group structure and indexes, and propagates data (if any) to selected children. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/selectAll.js \"Source\")\n\nFor each selected element, selects the descendant elements that match the specified *selector* string. The elements in the returned selection are grouped by their corresponding parent node in this selection. If no element matches the specified selector for the current element, or if the *selector* is null, the group at the current index will be empty. The selected elements do not inherit data from this selection; use [*selection*.data](#selection_data) to propagate data to children. For example, to select the bold elements in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").selectAll(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an array of elements (or a pseudo-array, such as a NodeList), or the empty array if there are no matching elements. For example, to select the previous and next siblings of each paragraph:\n\n```js\nconst sibling = d3.selectAll(\"p\").selectAll(function() {\n return [\n this.previousElementSibling,\n this.nextElementSibling\n ];\n});\n```\n\nUnlike [*selection*.select](#selection_select), *selection*.selectAll does affect grouping: each selected descendant is grouped by the parent element in the originating selection. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.filter(filter) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/filter.js \"Source\")\n\nFilters the selection, returning a new selection that contains only the elements for which the specified *filter* is true. The *filter* may be specified either as a selector string or a function. If the *filter* is 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 (*nodes*[*i*]).\n\nFor example, to filter a selection of table rows to contain only even rows:\n\n```js\nconst even = d3.selectAll(\"tr\").filter(\":nth-child(even)\");\n```\n\nThis is approximately equivalent to using [d3.selectAll](#selectAll) directly, although the indexes may be different:\n\n```js\nconst even = d3.selectAll(\"tr:nth-child(even)\");\n```\n\nSimilarly, using a function:\n\n```js\nconst even = d3.selectAll(\"tr\").filter((d, i) => i & 1);\n```\n\nOr using [*selection*.select](#selection_select) (and avoiding an arrow function, since *this* is needed to refer to the current element):\n\n```js\nconst even = d3.selectAll(\"tr\").select(function(d, i) { return i & 1 ? this : null; });\n```\n\nNote that the `:nth-child` pseudo-class is a one-based index rather than a zero-based index. Also, the above filter functions do not have precisely the same meaning as `:nth-child`; they rely on the selection index rather than the number of preceding sibling elements in the DOM.\n\nThe returned filtered selection preserves the parents of this selection, but like [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), it does not preserve indexes as some elements may be removed; use [*selection*.select](#selection_select) to preserve the index, if needed.\n\n# selection.merge(other) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/merge.js \"Source\")\n\nReturns a new selection merging this selection with the specified *other* selection. The returned selection has the same number of groups and the same parents as this selection. Any missing (null) elements in this selection are filled with the corresponding element, if present (not null), from the specified *selection*. (If the *other* selection has additional groups or parents, they are ignored.)\n\nThis method is used internally by [*selection*.join](#selection_join) to merge the [enter](#selection_enter) and [update](#selection_data) selections after [binding data](#joining-data). You can also merge explicitly, although note that since merging is based on element index, you should use operations that preserve index, such as [*selection*.select](#selection_select) instead of [*selection*.filter](#selection_filter). For example:\n\n```js\nconst odd = selection.select(function(d, i) { return i & 1 ? this : null; ));\nconst even = selection.select(function(d, i) { return i & 1 ? null : this; ));\nconst merged = odd.merge(even);\n```\n\nSee [*selection*.data](#selection_data) for more.\n\nThis method is not intended for concatenating arbitrary selections, however: if both this selection and the specified *other* selection have (non-null) elements at the same index, this selection’s element is returned in the merge and the *other* selection’s element is ignored.\n\n# d3.matcher(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/matcher.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns true if `this` element [matches](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) the specified selector. This method is used internally by [*selection*.filter](#selection_filter). For example, this:\n\n```js\nconst div = selection.filter(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.filter(d3.matcher(\"div\"));\n```\n\n(Although D3 is not a compatibility layer, this implementation does support vendor-prefixed implementations due to the recent standardization of *element*.matches.)\n\n# d3.selector(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selector.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns the first descendant of `this` element that matches the specified selector. This method is used internally by [*selection*.select](#selection_select). For example, this:\n\n```js\nconst div = selection.select(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.select(d3.selector(\"div\"));\n```\n\n# d3.selectorAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns all descendants of `this` element that match the specified selector. This method is used internally by [*selection*.selectAll](#selection_selectAll). For example, this:\n\n```js\nconst div = selection.selectAll(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.selectAll(d3.selectorAll(\"div\"));\n```\n\n# d3.window(node) [<>](https://github.com/d3/d3-selection/blob/master/src/window.js \"Source\")\n\nReturns the owner window for the specified *node*. If *node* is a node, returns the owner document’s default view; if *node* is a document, returns its default view; otherwise returns the *node*.\n\n# d3.style(node, name) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js#L32 \"Source\")\n\nReturns the value of the style property with the specified *name* for the specified *node*. If the *node* has an inline style with the specified *name*, its value is returned; otherwise, the [computed property value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value) is returned. See also [*selection*.style](#selection_style).\n\n### Modifying Elements\n\nAfter selecting elements, use the selection’s transformation methods to affect document content. For example, to set the name attribute and color style of an anchor element:\n\n```js\nd3.select(\"a\")\n .attr(\"name\", \"fred\")\n .style(\"color\", \"red\");\n```\n\nTo experiment with selections, visit [d3js.org](https://d3js.org) and open your browser’s developer console! (In Chrome, open the console with ⌥⌘J.) Select elements and then inspect the returned selection to see which elements are selected and how they are grouped. Call selection methods and see how the page content changes.\n\n# selection.attr(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/attr.js \"Source\")\n\nIf a *value* is specified, sets the attribute with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, all elements are given the same attribute value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s attribute. A null value will remove the specified attribute.\n\nIf a *value* is not specified, returns the current value of the specified attribute for the first (non-null) element in the selection. This is generally useful only if you know that the selection contains exactly one element.\n\nThe specified *name* may have a namespace prefix, such as `xlink:href` to specify the `href` attribute in the XLink namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map.\n\n# selection.classed(names[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/classed.js \"Source\")\n\nIf a *value* is specified, assigns or unassigns the specified CSS class *names* on the selected elements by setting the `class` attribute or modifying the `classList` property and returns this selection. The specified *names* is a string of space-separated class names. For example, to assign the classes `foo` and `bar` to the selected elements:\n\n```js\nselection.classed(\"foo bar\", true);\n```\n\nIf the *value* is truthy, then all elements are assigned the specified classes; otherwise, the classes are unassigned. If the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to assign or unassign classes on each element. For example, to randomly associate the class *foo* with on average half the selected elements:\n\n```js\nselection.classed(\"foo\", () => Math.random() > 0.5);\n```\n\nIf a *value* is not specified, returns true if and only if the first (non-null) selected element has the specified *classes*. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.style(name[, value[, priority]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js \"Source\")\n\nIf a *value* is specified, sets the style property with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, then all elements are given the same style property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s style property. A null value will remove the style property. An optional *priority* may also be specified, either as null or the string `important` (without the exclamation point).\n\nIf a *value* is not specified, returns the current value of the specified style property for the first (non-null) element in the selection. The current value is defined as the element’s inline value, if present, and otherwise its [computed value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value). Accessing the current style value is generally useful only if you know the selection contains exactly one element.\n\nCaution: unlike many SVG attributes, CSS styles typically have associated units. For example, `3px` is a valid stroke-width property value, while `3` is not. Some browsers implicitly assign the `px` (pixel) unit to numeric values, but not all browsers do: IE, for example, throws an “invalid arguments” error!\n\n# selection.property(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/property.js \"Source\")\n\nSome HTML elements have special properties that are not addressable using attributes or styles, such as a form field’s text `value` and a checkbox’s `checked` boolean. Use this method to get or set these properties.\n\nIf a *value* is specified, sets the property with the specified *name* to the specified value on selected elements. If the *value* is a constant, then all elements are given the same property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s property. A null value will delete the specified property.\n\nIf a *value* is not specified, returns the value of the specified property for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.text([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/text.js \"Source\")\n\nIf a *value* is specified, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same text content; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nIf a *value* is not specified, returns the text content for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.html([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/html.js \"Source\")\n\nIf a *value* is specified, sets the [inner HTML](http://dev.w3.org/html5/spec-LC/apis-in-html-documents.html#innerhtml) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same inner HTML; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s inner HTML. A null value will clear the content.\n\nIf a *value* is not specified, returns the inner HTML for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nUse [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) instead to create data-driven content; this method is intended for when you want a little bit of HTML, say for rich formatting. Also, *selection*.html is only supported on HTML elements. SVG elements and other non-HTML elements do not support the innerHTML property, and thus are incompatible with *selection*.html. Consider using [XMLSerializer](https://developer.mozilla.org/en-US/docs/XMLSerializer) to convert a DOM subtree to text. See also the [innersvg polyfill](https://code.google.com/p/innersvg/), which provides a shim to support the innerHTML property on SVG elements.\n\n# selection.append(type) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/append.js \"Source\")\n\nIf the specified *type* is a string, appends a new element of this type (tag name) as the last child of each selected element, or before the next following sibling in the update selection if this is an [enter selection](#selection_enter). The latter behavior for enter selections allows you to insert elements into the DOM in an order consistent with the new bound data; however, note that [*selection*.order](#selection_order) may still be required if updating elements change order (*i.e.*, if the order of new data is inconsistent with old data).\n\nIf the specified *type* is 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 (*nodes*[*i*]). This function should return an element to be appended. (The function typically creates a new element, but it may instead return an existing element.) For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").append(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").append(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.appendChild(document.createElement(\"p\"));\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.insert(type[, before]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/insert.js \"Source\")\n\nIf the specified *type* is a string, inserts a new element of this type (tag name) before the first element matching the specified *before* selector for each selected element. For example, a *before* selector `:first-child` will prepend nodes before the first child. If *before* is not specified, it defaults to null. (To append elements in an order consistent with [bound data](#joining-data), use [*selection*.append](#selection_append).)\n\nBoth *type* and *before* may instead be specified as functions which are 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 (*nodes*[*i*]). The *type* function should return an element to be inserted; the *before* function should return the child element before which the element should be inserted. For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").insert(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").insert(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.insertBefore(document.createElement(\"p\"), null);\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.remove() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/remove.js \"Source\")\n\nRemoves the selected elements from the document. Returns this selection (the removed elements) which are now detached from the DOM. There is not currently a dedicated API to add removed elements back to the document; however, you can pass a function to [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) to re-add elements.\n\n# selection.clone([deep]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/clone.js \"Source\")\n\nInserts clones of the selected elements immediately following the selected elements and returns a selection of the newly added clones. If *deep* is truthy, the descendant nodes of the selected elements will be cloned as well. Otherwise, only the elements themselves will be cloned. Equivalent to:\n\n```js\nselection.select(function() {\n return this.parentNode.insertBefore(this.cloneNode(deep), this.nextSibling);\n});\n```\n\n# selection.sort(compare) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/sort.js \"Source\")\n\nReturns a new selection that contains a copy of each group in this selection sorted according to the *compare* function. After sorting, re-inserts elements to match the resulting order (per [*selection*.order](#selection_order)).\n\nThe compare function, which defaults to [ascending](https://github.com/d3/d3-array#ascending), is passed two elements’ data *a* and *b* to compare. It should return either a negative, positive, or zero value. If negative, then *a* should be before *b*; if positive, then *a* should be after *b*; otherwise, *a* and *b* are considered equal and the order is arbitrary.\n\nNote that sorting is not guaranteed to be stable; however, it is guaranteed to have the same behavior as your browser’s built-in [sort](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort) method on arrays.\n\n# selection.order() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/order.js \"Source\")\n\nRe-inserts elements into the document such that the document order of each group matches the selection order. This is equivalent to calling [*selection*.sort](#selection_sort) if the data is already sorted, but much faster.\n\n# selection.raise() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/raise.js \"Source\")\n\nRe-inserts each selected element, in order, as the last child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.appendChild(this);\n});\n```\n\n# selection.lower() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/lower.js \"Source\")\n\nRe-inserts each selected element, in order, as the first child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.insertBefore(this, this.parentNode.firstChild);\n});\n```\n\n# d3.create(name) [<>](https://github.com/d3/d3-selection/blob/master/src/create.js \"Source\")\n\nGiven the specified element *name*, returns a single-element selection containing a detached element of the given name in the current document. This method assumes the HTML namespace, so you must specify a namespace explicitly when creating SVG or other non-HTML elements; see [namespace](#namespace) for details on supported namespace prefixes.\n\n```js\nd3.create(\"svg\") // equivalent to svg:svg\nd3.create(\"svg:svg\") // more explicitly\nd3.create(\"svg:g\") // an SVG G element\nd3.create(\"g\") // an HTML G (unknown) element\n```\n\n# d3.creator(name) [<>](https://github.com/d3/d3-selection/blob/master/src/creator.js \"Source\")\n\nGiven the specified element *name*, returns a function which creates an element of the given name, assuming that `this` is the parent element. This method is used internally by [*selection*.append](#selection_append) and [*selection*.insert](#selection_insert) to create new elements. For example, this:\n\n```js\nselection.append(\"div\");\n```\n\nIs equivalent to:\n\n```js\nselection.append(d3.creator(\"div\"));\n```\n\nSee [namespace](#namespace) for details on supported namespace prefixes, such as for SVG elements.\n\n### Joining Data\n\nFor an introduction to D3’s data joins, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join). Also see [Thinking With Joins](http://bost.ocks.org/mike/join/).\n\n# selection.data([data[, key]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/data.js \"Source\")\n\nBinds the specified array of *data* with the selected elements, returning a new selection that represents the *update* selection: the elements successfully bound to data. Also defines the [enter](#selection_enter) and [exit](#selection_exit) selections on the returned selection, which can be used to add or remove elements to correspond to the new data. The specified *data* is an array of arbitrary values (*e.g.*, numbers or objects), or a function that returns an array of values for each group. When data is assigned to an element, it is stored in the property `__data__`, thus making the data “sticky” and available on re-selection.\n\nThe *data* is specified **for each group** in the selection. If the selection has multiple groups (such as [d3.selectAll](#selectAll) followed by [*selection*.selectAll](#selection_selectAll)), then *data* should typically be specified as a function. This function will be evaluated for each group in order, being passed the group’s parent datum (*d*, which may be undefined), the group index (*i*), and the selection’s parent nodes (*nodes*), with *this* as the group’s parent element.\n\nIn conjunction with [*selection*.join](#selection_join) (or more explicitly with [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append) and [*selection*.remove](#selection_remove)), *selection*.data can be used to enter, update and exit elements to match data. For example, to create an HTML table from a matrix of numbers:\n\n```js\nconst matrix = [\n [11975, 5871, 8916, 2868],\n [ 1951, 10048, 2060, 6171],\n [ 8010, 16145, 8090, 8045],\n [ 1013, 990, 940, 6907]\n];\n\nd3.select(\"body\")\n .append(\"table\")\n .selectAll(\"tr\")\n .data(matrix)\n .join(\"tr\")\n .selectAll(\"td\")\n .data(d => d)\n .join(\"td\")\n .text(d => d);\n```\n\nIn this example the *data* function is the identity function: for each table row, it returns the corresponding row from the data matrix.\n\nIf a *key* function is not specified, then the first datum in *data* is assigned to the first selected element, the second datum to the second selected element, and so on. A *key* function may be specified to control which datum is assigned to which element, replacing the default join-by-index, by computing a string identifier for each datum and element. This key 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 (*nodes*[*i*]); the returned string is the element’s key. The key function is then also evaluated for each new datum in *data*, being passed the current datum (*d*), the current index (*i*), and the group’s new *data*, with *this* as the group’s parent DOM element; the returned string is the datum’s key. The datum for a given key is assigned to the element with the matching key. If multiple elements have the same key, the duplicate elements are put into the exit selection; if multiple data have the same key, the duplicate data are put into the enter selection.\n\nFor example, given this document:\n\n```html\n
\n
\n
\n
\n
\n
\n```\n\nYou could join data by key as follows:\n\n\n```js\nconst data = [\n {name: \"Locke\", number: 4},\n {name: \"Reyes\", number: 8},\n {name: \"Ford\", number: 15},\n {name: \"Jarrah\", number: 16},\n {name: \"Shephard\", number: 23},\n {name: \"Kwon\", number: 42}\n];\n\nd3.selectAll(\"div\")\n .data(data, function(d) { return d ? d.name : this.id; })\n .text(d => d.number);\n```\n\nThis example key function uses the datum *d* if present, and otherwise falls back to the element’s id property. Since these elements were not previously bound to data, the datum *d* is null when the key function is evaluated on selected elements, and non-null when the key function is evaluated on the new data.\n\nThe *update* and *enter* selections are returned in data order, while the *exit* selection preserves the selection order prior to the join. If a key function is specified, the order of elements in the selection may not match their order in the document; use [*selection*.order](#selection_order) or [*selection*.sort](#selection_sort) as needed. For more on how the key function affects the join, see [A Bar Chart, Part 2](http://bost.ocks.org/mike/bar/2/) and [Object Constancy](http://bost.ocks.org/mike/constancy/).\n\nIf *data* is not specified, this method returns the array of data for the selected elements.\n\nThis method cannot be used to clear bound data; use [*selection*.datum](#selection_datum) instead.\n\n# selection.join(enter[, update][, exit]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/join.js \"Source\")\n\nAppends, removes and reorders elements as necessary to match the data that was previously bound by [*selection*.data](#selection_data), returning the [merged](#selection_merge) enter and update selection. This method is a convenient alternative to the explicit [general update pattern](https://bl.ocks.org/mbostock/3808218), replacing [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append), [*selection*.remove](#selection_remove), and [*selection*.order](#selection_order). For example:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\"circle\")\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n```\n\nThe *enter* function may be specified as a string shorthand, as above, which is equivalent to [*selection*.append](#selection_append) with the given element name. Likewise, optional *update* and *exit* functions may be specified, which default to the identity function and calling [*selection*.remove](#selection_remove), respectively. The shorthand above is thus equivalent to:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\"),\n update => update,\n exit => exit.remove()\n )\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n````\n\nBy passing separate functions on enter, update and exit, you have greater control over what happens. And by specifying a key function to [*selection*.data](#selection_data), you can minimize changes to the DOM to optimize performance. For example, to set different fill colors for enter and update:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\").attr(\"fill\", \"green\"),\n update => update.attr(\"fill\", \"blue\")\n )\n .attr(\"stroke\", \"black\");\n```\n\nThe selections returned by the *enter* and *update* functions are merged and then returned by *selection*.join.\n\nYou also animate enter, update and exit by creating transitions inside the *enter*, *update* and *exit* functions. To avoid breaking the method chain, use *selection*.call to create transitions, or return an undefined enter or update selection to prevent merging: the return value of the *enter* and *update* functions specifies the two selections to merge and return by *selection*.join.\n\nFor more, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join).\n\n# selection.enter() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/enter.js \"Source\")\n\nReturns the enter selection: placeholder nodes for each datum that had no corresponding DOM element in the selection. (The enter selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe enter selection is typically used to create “missing” elements corresponding to new data. For example, to create DIV elements from an array of numbers:\n\n```js\nconst div = d3.select(\"body\")\n .selectAll(\"div\")\n .data([4, 8, 15, 16, 23, 42])\n .enter().append(\"div\")\n .text(d => d);\n```\n\nIf the body is initially empty, the above code will create six new DIV elements, append them to the body in-order, and assign their text content as the associated (string-coerced) number:\n\n```html\n
4
\n
8
\n
15
\n
16
\n
23
\n
42
\n```\n\nConceptually, the enter selection’s placeholders are pointers to the parent element (in this example, the document body). The enter selection is typically only used transiently to append elements, and is often [merged](#selection_merge) with the update selection after appending, such that modifications can be applied to both entering and updating elements.\n\n# selection.exit() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/exit.js \"Source\")\n\nReturns the exit selection: existing DOM elements in the selection for which no new datum was found. (The exit selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe exit selection is typically used to remove “superfluous” elements corresponding to old data. For example, to update the DIV elements created previously with a new array of numbers:\n\n```js\ndiv = div.data([1, 2, 4, 8, 16, 32], d => d);\n```\n\nSince a key function was specified (as the identity function), and the new data contains the numbers [4, 8, 16] which match existing elements in the document, the update selection contains three DIV elements. Leaving those elements as-is, we can append new elements for [1, 2, 32] using the enter selection:\n\n```js\ndiv.enter().append(\"div\").text(d => d);\n```\n\nLikewise, to remove the exiting elements [15, 23, 42]:\n\n```js\ndiv.exit().remove();\n```\n\nNow the document body looks like this:\n\n```html\n
1
\n
2
\n
4
\n
8
\n
16
\n
32
\n```\n\nThe order of the DOM elements matches the order of the data because the old data’s order and the new data’s order were consistent. If the new data’s order is different, use [*selection*.order](#selection_order) to reorder the elements in the DOM. See the [General Update Pattern](http://bl.ocks.org/mbostock/3808218) example thread for more on data joins.\n\n# selection.datum([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/datum.js \"Source\")\n\nGets or sets the bound data for each selected element. Unlike [*selection*.data](#selection_data), this method does not compute a join and does not affect indexes or the enter and exit selections.\n\nIf a *value* is specified, sets the element’s bound data to the specified value on all selected elements. If the *value* is a constant, all elements are given the same datum; otherwise, if the *value* is 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 (*nodes*[*i*]). The function is then used to set each element’s new data. A null value will delete the bound data.\n\nIf a *value* is not specified, returns the bound datum for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nThis method is useful for accessing HTML5 [custom data attributes](http://www.w3.org/TR/html5/dom.html#custom-data-attribute). For example, given the following elements:\n\n```html\n\n```\n\nYou can expose the custom data attributes by setting each element’s data as the built-in [dataset](http://www.w3.org/TR/html5/dom.html#dom-dataset) property:\n\n```js\nselection.datum(function() { return this.dataset; })\n```\n\n### Handling Events\n\nFor interaction, selections allow listening for and dispatching of events.\n\n# selection.on(typenames[, listener[, options]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js \"Source\")\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is a string event type, such as `click`, `mouseover`, or `submit`; any [DOM event type](https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events) supported by your browser may be used. The 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 `click.foo` and `click.bar`. To specify multiple typenames, separate typenames with spaces, such as `input change` or `click.foo click.bar`.\n\nWhen a specified event is dispatched on a selected element, the specified *listener* will be evaluated for the element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element (*nodes*[*i*]). 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. To access the current event within a listener, use [d3.event](#event).\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\nAn optional *options* object may specify characteristics about the event listener, such as whether it is capturing or passive; see [*element*.addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener).\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# selection.dispatch(type[, parameters]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/dispatch.js \"Source\")\n\nDispatches a [custom event](http://www.w3.org/TR/dom/#interface-customevent) of the specified *type* to each selected element, in order. An optional *parameters* map may be specified to set additional properties of the event. It may contain the following fields:\n\n* [`bubbles`](https://www.w3.org/TR/dom/#dom-event-bubbles) - if true, the event is dispatched to ancestors in reverse tree order.\n* [`cancelable`](https://www.w3.org/TR/dom/#dom-event-cancelable) - if true, *event*.preventDefault is allowed.\n* [`detail`](https://www.w3.org/TR/dom/#dom-customevent-detail) - any custom data associated with the event.\n\nIf *parameters* is 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 (*nodes*[*i*]). It must return the parameters map for the current element.\n\n# d3.event\n\nThe current [event](https://developer.mozilla.org/en-US/docs/DOM/event), if any. This is set during the invocation of an event listener, and is reset after the listener terminates. Use this to access standard event fields such as [*event*.timeStamp](https://www.w3.org/TR/dom/#dom-event-timestamp) and methods such as [*event*.preventDefault](https://www.w3.org/TR/dom/#dom-event-preventdefault). While you can use the native [*event*.pageX](https://developer.mozilla.org/en/DOM/event.pageX) and [*event*.pageY](https://developer.mozilla.org/en/DOM/event.pageY), it is often more convenient to transform the event position to the local coordinate system of the container that received the event using [d3.mouse](#mouse), [d3.touch](#touch) or [d3.touches](#touches).\n\nIf you use Babel, Webpack, or another ES6-to-ES5 bundler, be aware that the value of d3.event changes during an event! An import of d3.event must be a [live binding](http://www.2ality.com/2015/07/es6-module-exports.html), so you may need to configure the bundler to import from D3’s ES6 modules rather than from the generated UMD bundle; not all bundlers observe [jsnext:main](https://github.com/rollup/rollup/wiki/jsnext:main). Also beware of conflicts with the [*window*.event](https://developer.mozilla.org/en-US/docs/Web/API/Window/event) global.\n\n# d3.customEvent(event, listener[, that[, arguments]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js#L98 \"Source\")\n\nInvokes the specified *listener*, using the specified *that* `this` context and passing the specified *arguments*, if any. During the invocation, [d3.event](#event) is set to the specified *event*; after the listener returns (or throws an error), d3.event is restored to its previous value. In addition, sets *event*.sourceEvent to the prior value of d3.event, allowing custom events to retain a reference to the originating native event. Returns the value returned by the *listener*.\n\n# d3.mouse(container) [<>](https://github.com/d3/d3-selection/blob/master/src/mouse.js \"Source\")\n\nReturns the *x* and *y* coordinates of the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n# d3.touch(container[, touches], identifier) [<>](https://github.com/d3/d3-selection/blob/master/src/touch.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touch with the specified *identifier* associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*]. If there is no touch with the specified identifier in *touches*, returns null; this can be useful for ignoring touchmove events where the only some touches have moved. If *touches* is not specified, it defaults to the current event’s [changedTouches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/changedTouches) property.\n\n# d3.touches(container[, touches]) [<>](https://github.com/d3/d3-selection/blob/master/src/touches.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touches associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as an array of two-element arrays of numbers \\[\\[*x1*, *y1*], [*x2*, *y2*], …\\]. If *touches* is not specified, it defaults to the current event’s [touches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/touches) property.\n\n# d3.clientPoint(container, event) [<>](https://github.com/d3/d3-selection/blob/master/src/point.js \"Source\")\n\nReturns the *x* and *y* coordinates of the specified *event* relative to the specified *container*. (The *event* may also be a [touch](https://www.w3.org/TR/touch-events/#touch-interface).) The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n### Control Flow\n\nFor advanced usage, selections provide methods for custom control flow.\n\n# selection.each(function) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/each.js \"Source\")\n\nInvokes the specified *function* 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 (*nodes*[*i*]). 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, such as:\n\n```js\nparent.each(function(p, j) {\n d3.select(this)\n .selectAll(\".child\")\n .text(d => `child ${d.name} of ${p.name}`);\n});\n```\n\nSee [Sized Donut Multiples](http://bl.ocks.org/mbostock/4c5fad723c87d2fd8273) for an example.\n\n# selection.call(function[, arguments…]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/call.js \"Source\")\n\nInvokes the specified *function* exactly once, passing in this selection along with any optional *arguments*. Returns this selection. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several styles in a reusable function:\n\n```js\nfunction name(selection, first, last) {\n selection\n .attr(\"first-name\", first)\n .attr(\"last-name\", last);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").call(name, \"John\", \"Snow\");\n```\n\nThis is roughly equivalent to:\n\n```js\nname(d3.selectAll(\"div\"), \"John\", \"Snow\");\n```\n\nThe only difference is that *selection*.call always returns the *selection* and not the return value of the called *function*, `name`.\n\n# selection.empty() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js \"Source\")\n\nReturns true if this selection contains no (non-null) elements.\n\n# selection.nodes() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js \"Source\")\n\nReturns an array of all (non-null) elements in this selection.\n\n# selection.node() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/node.js \"Source\")\n\nReturns the first (non-null) element in this selection. If the selection is empty, returns null.\n\n# selection.size() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/size.js \"Source\")\n\nReturns the total number of elements in this selection.\n\n### Local Variables\n\nD3 locals allow you to define local state independent of data. For instance, when rendering [small multiples](http://bl.ocks.org/mbostock/e1192fe405703d8321a5187350910e08) of time-series data, you might want the same *x*-scale for all charts but distinct *y*-scales to compare the relative performance of each metric. D3 locals are scoped by DOM elements: on set, the value is stored on the given element; on get, the value is retrieved from given element or the nearest ancestor that defines it.\n\n# d3.local() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js \"Source\")\n\nDeclares a new local variable. For example:\n\n```js\nconst foo = d3.local();\n```\n\nLike `var`, each local is a distinct symbolic reference; unlike `var`, the value of each local is also scoped by the DOM.\n\n# local.set(node, value) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L18 \"Source\")\n\nSets the value of this local on the specified *node* to the *value*, and returns the specified *value*. This is often performed using [*selection*.each](#selection_each):\n\n```js\nselection.each(function(d) { foo.set(this, d.value); });\n```\n\nIf you are just setting a single variable, consider using [*selection*.property](#selection_property):\n\n```js\nselection.property(foo, d => d.value);\n```\n\n# local.get(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L13 \"Source\")\n\nReturns the value of this local on the specified *node*. If the *node* does not define this local, returns the value from the nearest ancestor that defines it. Returns undefined if no ancestor defines this local.\n\n# local.remove(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L21 \"Source\")\n\nDeletes this local’s value from the specified *node*. Returns true if the *node* defined this local prior to removal, and false otherwise. If ancestors also define this local, those definitions are unaffected, and thus [*local*.get](#local_get) will still return the inherited value.\n\n# local.toString() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L24 \"Source\")\n\nReturns the automatically-generated identifier for this local. This is the name of the property that is used to store the local’s value on elements, and thus you can also set or get the local’s value using *element*[*local*] or by using [*selection*.property](#selection_property).\n\n### Namespaces\n\nXML namespaces are fun! Right? Fortunately you can mostly ignore them.\n\n# d3.namespace(name) [<>](https://github.com/d3/d3-selection/blob/master/src/namespace.js \"Source\")\n\nQualifies the specified *name*, which may or may not have a namespace prefix. If the name contains a colon (`:`), the substring before the colon is interpreted as the namespace prefix, which must be registered in [d3.namespaces](#namespaces). Returns an object `space` and `local` attributes describing the full namespace URL and the local name. For example:\n\n```js\nd3.namespace(\"svg:text\"); // {space: \"http://www.w3.org/2000/svg\", local: \"text\"}\n```\n\nIf the name does not contain a colon, this function merely returns the input name.\n\n# d3.namespaces [<>](https://github.com/d3/d3-selection/blob/master/src/namespaces.js \"Source\")\n\nThe map of registered namespace prefixes. The initial value is:\n\n```js\n{\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: \"http://www.w3.org/1999/xhtml\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n}\n```\n\nAdditional prefixes may be assigned as needed to create elements or attributes in other namespaces.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-selection", "error": "[Circular]", "extraneous": false, "_deduped": "d3-selection" }, "d3-transition": { "_from": "d3-transition@1", "_id": "d3-transition@1.3.2", "_inBundle": false, "_integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", "_location": "/d3-transition", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-transition@1", "name": "d3-transition", "escapedName": "d3-transition", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-brush", "/d3-zoom" ], "_resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", "_shasum": "a98ef2151be8d8600543434c1ca80140ae23b398", "_spec": "d3-transition@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "https://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-transition/issues" }, "dependencies": {}, "deprecated": false, "description": "Animated transitions for D3 selections.", "devDependencies": { "eslint": "6", "jsdom": "15", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-transition/", "jsdelivr": "dist/d3-transition.min.js", "keywords": [ "d3", "d3-module", "dom", "transition", "animation" ], "license": "BSD-3-Clause", "main": "dist/d3-transition.js", "module": "src/index.js", "name": "d3-transition", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-transition.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "sideEffects": true, "unpkg": "dist/d3-transition.min.js", "version": "1.3.2", "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.v1.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\n\n\n\n\n\n\n\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# selection.transition([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js \"Source\")\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# selection.interrupt([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js \"Source\")\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# d3.interrupt(node[, name]) [<>](https://github.com/d3/d3-transition/blob/master/src/interrupt.js \"Source\")\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# d3.transition([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29 \"Source\")\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# transition.select(selector) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/select.js \"Source\")\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` and index `i`, with the `this` context 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# transition.selectAll(selector) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js \"Source\")\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` and index `i`, with the `this` context 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# transition.filter(filter) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js \"Source\")\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` and index `i`, with the `this` context 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# transition.merge(other) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js \"Source\")\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# transition.transition() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js \"Source\")\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# transition.selection() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js \"Source\")\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n# d3.active(node[, name]) [<>](https://github.com/d3/d3-transition/blob/master/src/active.js \"Source\")\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](http://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# transition.attr(name, value) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js \"Source\")\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` and index `i`, with the `this` context 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# transition.attrTween(name[, factory]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js \"Source\")\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` 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 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](http://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# transition.style(name, value[, priority]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/style.js \"Source\")\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` and index `i`, with the `this` context 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# transition.styleTween(name[, factory[, priority]])) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js \"Source\")\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` 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 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# transition.text(value) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/text.js \"Source\")\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` and index `i`, with the `this` context 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) ([for example](http://bl.ocks.org/mbostock/7004f92cac972edef365)) or append a replacement element and cross-fade opacity ([for example](http://bl.ocks.org/mbostock/f7dcecb19c4af317e464)). Text is not interpolated by default because it is usually undesirable.\n\n# transition.textTween(factory) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js \"Source\")\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# transition.remove() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js \"Source\")\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# transition.tween(name[, value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js \"Source\")\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` and index `i`, with the `this` context 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](http://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](http://bl.ocks.org/mbostock/3885705) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n# transition.delay([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js \"Source\")\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` and index `i`, with the `this` context 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# transition.duration([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js \"Source\")\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` and index `i`, with the `this` context 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# transition.ease([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js \"Source\")\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### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n# transition.end() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/end.js \"Source\")\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# transition.on(typenames[, listener]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/on.js \"Source\")\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` and index `i`, with the `this` context 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# transition.each(function) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/each.js \"Source\")\n\nInvokes the specified *function* for each selected element, passing in the current datum `d` and index `i`, with the `this` context of 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# transition.call(function[, arguments…]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/call.js \"Source\")\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# transition.empty() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js \"Source\")\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# transition.nodes() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js \"Source\")\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# transition.node() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/node.js \"Source\")\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# transition.size() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/size.js \"Source\")\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", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-color": "1", "d3-dispatch": "1", "d3-ease": "1", "d3-interpolate": "1", "d3-selection": "^1.1.0", "d3-timer": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-transition", "error": "[Circular]", "extraneous": false, "_deduped": "d3-transition" } }, "deprecated": false, "description": "Select a one- or two-dimensional region using the mouse or touch.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-brush/", "jsdelivr": "dist/d3-brush.min.js", "keywords": [ "d3", "d3-module", "brush", "interaction" ], "license": "BSD-3-Clause", "main": "dist/d3-brush.js", "module": "src/index.js", "name": "d3-brush", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-brush.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "unpkg": "dist/d3-brush.min.js", "version": "1.1.6", "readme": "# d3-brush\n\nBrushing is the interactive specification a one- or two-dimensional selected region using a pointing gesture, such as by clicking and dragging the mouse. Brushing is often used to select discrete elements, such as dots in a scatterplot or files on a desktop. It can also be used to zoom-in to a region of interest, or to select continuous regions for [cross-filtering data](http://square.github.io/crossfilter/) or live histograms:\n\n[\"Mona](http://bl.ocks.org/mbostock/0d20834e3d5a46138752f86b9b79727e)\n\nThe d3-brush module implements brushing for mouse and touch events using [SVG](https://www.w3.org/TR/SVG/). Click and drag on the brush selection to translate the selection. Click and drag on one of the selection handles to move the corresponding edge (or edges) of the selection. Click and drag on the invisible overlay to define a new brush selection, or click anywhere within the brushable region while holding down the META (⌘) key. Holding down the ALT (⌥) key while moving the brush causes it to reposition around its center, while holding down SPACE locks the current brush size, allowing only translation.\n\nBrushes also support programmatic control. For example, you can listen to [*end* events](#brush-events), and then initiate a transition with [*brush*.move](#brush_move) to snap the brush selection to semantic boundaries:\n\n[\"Brush](http://bl.ocks.org/mbostock/6232537)\n\nOr you can have the brush recenter when you click outside the current selection:\n\n[\"Click-to-Recenter\"](https://bl.ocks.org/mbostock/6498000)\n\n## Installing\n\nIf you use NPM, `npm install d3-brush`. Otherwise, download the [latest release](https://github.com/d3/d3-brush/releases/latest). You can load as a [standalone library](https://d3js.org/d3-brush.v1.min.js) or as part of [D3](https://github.com/d3/d3). ES modules, AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n\n\n\n\n\n\n\n\n```\n\n## API Reference\n\n# d3.brush() [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nCreates a new two-dimensional brush.\n\n# d3.brushX() [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nCreates a new one-dimensional brush along the *x*-dimension.\n\n# d3.brushY() [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nCreates a new one-dimensional brush along the *y*-dimension.\n\n# brush(group) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nApplies the brush to the specified *group*, which must be a [selection](https://github.com/d3/d3-selection) of SVG [G elements](https://www.w3.org/TR/SVG/struct.html#Groups). This function is typically not invoked directly, and is instead invoked via [*selection*.call](https://github.com/d3/d3-selection#selection_call). For example, to render a brush:\n\n```js\nsvg.append(\"g\")\n .attr(\"class\", \"brush\")\n .call(d3.brush().on(\"brush\", brushed));\n```\n\nInternally, the brush uses [*selection*.on](https://github.com/d3/d3-selection#selection_on) to bind the necessary event listeners for dragging. The listeners use the name `.brush`, so you can subsequently unbind the brush event listeners as follows:\n\n```js\ngroup.on(\".brush\", null);\n```\n\nThe brush also creates the SVG elements necessary to display the brush selection and to receive input events for interaction. You can add, remove or modify these elements as desired to change the brush appearance; you can also apply stylesheets to modify the brush appearance. The structure of a two-dimensional brush is as follows:\n\n```html\n\n \n \n \n \n \n \n \n \n \n \n\n```\n\nThe overlay rect covers the brushable area defined by [*brush*.extent](#brush_extent). The selection rect covers the area defined by the current [brush selection](#brushSelection). The handle rects cover the edges and corners of the brush selection, allowing the corresponding value in the brush selection to be modified interactively. To modify the brush selection programmatically, use [*brush*.move](#brush_move).\n\n# brush.move(group, selection) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nSets the active *selection* of the brush on the specified *group*, which must be a [selection](https://github.com/d3/d3-selection) or a [transition](https://github.com/d3/d3-transition) of SVG [G elements](https://www.w3.org/TR/SVG/struct.html#Groups). The *selection* must be defined as an array of numbers, or null to clear the brush selection. For a [two-dimensional brush](#brush), it must be defined as [[*x0*, *y0*], [*x1*, *y1*]], where *x0* is the minimum *x*-value, *y0* is the minimum *y*-value, *x1* is the maximum *x*-value, and *y1* is the maximum *y*-value. For an [*x*-brush](#brushX), it must be defined as [*x0*, *x1*]; for a [*y*-brush](#brushY), it must be defined as [*y0*, *y1*]. The selection may also be specified as a function which returns such an array; if a function, it is invoked for each selected element, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. The returned array defines the brush selection for that element.\n\n# brush.clear(group) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nAn alias for [*brush*.move](#brush_move) with the null selection.\n\n# brush.extent([extent]) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nIf *extent* is specified, sets the brushable extent to the specified array of points [[*x0*, *y0*], [*x1*, *y1*]], where [*x0*, *y0*] is the top-left corner and [*x1*, *y1*] is the bottom-right corner, and returns this brush. The *extent* may also be specified as a function which returns such an array; if a function, it is invoked for each selected element, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element. If *extent* is not specified, returns the current extent accessor, which defaults to:\n\n```js\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n```\n\nThis default implementation requires that the owner SVG element have a defined [viewBox](https://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute), or [width](https://www.w3.org/TR/SVG/struct.html#SVGElementWidthAttribute) and [height](https://www.w3.org/TR/SVG/struct.html#SVGElementHeightAttribute) attributes. Alternatively, consider using [*element*.getBoundingClientRect](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect). (In Firefox, [*element*.clientWidth](https://developer.mozilla.org/en-US/docs/Web/API/Element/clientWidth) and [*element*.clientHeight](https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight) is zero for SVG elements!)\n\nThe brush extent determines the size of the invisible overlay and also constrains the brush selection; the brush selection cannot go outside the brush extent.\n\n# brush.filter([filter]) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nIf *filter* is specified, sets the filter to the specified function and returns the brush. If *filter* is not specified, returns the current filter, which defaults to:\n\n```js\nfunction filter() {\n return !d3.event.ctrlKey && !d3.event.button;\n}\n```\n\nIf the filter returns falsey, the initiating event is ignored and no brush gesture is started. Thus, the filter determines which input events are ignored. The default filter ignores mousedown events on secondary buttons, since those buttons are typically intended for other purposes, such as the context menu.\n\n# brush.touchable([touchable]) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nIf *touchable* is specified, sets the touch support detector to the specified function and returns the brush. If *touchable* is not specified, returns the current touch support detector, which defaults to:\n\n```js\nfunction touchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n```\n\nTouch event listeners are only registered if the detector returns truthy for the corresponding element when the brush is [applied](#_brush). The default detector works well for most browsers that are capable of touch input, but not all; Chrome’s mobile device emulator, for example, fails detection.\n\n# brush.keyModifiers([modifiers]) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nIf *modifiers* is specified, sets whether the brush listens to key events during brushing and returns the brush. If *modifiers* is not specified, returns the current behavior, which defaults to true.\n\n# brush.handleSize([size]) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nIf *size* is specified, sets the size of the brush handles to the specified number and returns the brush. If *size* is not specified, returns the current handle size, which defaults to six. This method must be called before [applying the brush](#_brush) to a selection; changing the handle size does not affect brushes that were previously rendered.\n\n# brush.on(typenames[, listener]) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nIf *listener* is specified, sets the event *listener* for the specified *typenames* and returns the brush. If an event listener was already registered for the same type and name, the existing listener is removed before the new listener is added. If *listener* is null, removes the current event listeners for the specified *typenames*, if any. If *listener* is not specified, returns the first currently-assigned listener matching the specified *typenames*, if any. When a specified event is dispatched, each *listener* will be invoked with the same context and arguments as [*selection*.on](https://github.com/d3/d3-selection#selection_on) listeners: the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\nThe *typenames* is a string containing one or more *typename* separated by whitespace. Each *typename* is a *type*, optionally followed by a period (`.`) and a *name*, such as `brush.foo` and `brush.bar`; the name allows multiple listeners to be registered for the same *type*. The *type* must be one of the following:\n\n* `start` - at the start of a brush gesture, such as on mousedown.\n* `brush` - when the brush moves, such as on mousemove.\n* `end` - at the end of a brush gesture, such as on mouseup.\n\nSee [*dispatch*.on](https://github.com/d3/d3-dispatch#dispatch_on) and [Brush Events](#brush-events) for more.\n\n# d3.brushSelection(node) [<>](https://github.com/d3/d3-brush/blob/master/src/brush.js \"Source\")\n\nReturns the current brush selection for the specified *node*. Internally, an element’s brush state is stored as *element*.\\_\\_brush; however, you should use this method rather than accessing it directly. If the given *node* has no selection, returns null. Otherwise, the *selection* is defined as an array of numbers. For a [two-dimensional brush](#brush), it is [[*x0*, *y0*], [*x1*, *y1*]], where *x0* is the minimum *x*-value, *y0* is the minimum *y*-value, *x1* is the maximum *x*-value, and *y1* is the maximum *y*-value. For an [*x*-brush](#brushX), it is [*x0*, *x1*]; for a [*y*-brush](#brushY), it is [*y0*, *y1*].\n\n### Brush Events\n\nWhen a [brush event listener](#brush_on) is invoked, [d3.event](https://github.com/d3/d3-selection#event) is set to the current brush event. The *event* object exposes several fields:\n\n* `target` - the associated [brush behavior](#brush).\n* `type` - the string “start”, “brush” or “end”; see [*brush*.on](#brush_on).\n* `selection` - the current [brush selection](#brushSelection).\n* `sourceEvent` - the underlying input event, such as mousemove or touchmove.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-dispatch": "1", "d3-drag": "1", "d3-interpolate": "1", "d3-selection": "1", "d3-transition": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-brush", "error": "[Circular]", "extraneous": false }, "d3-chord": { "_from": "d3-chord@1", "_id": "d3-chord@1.0.6", "_inBundle": false, "_integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", "_location": "/d3-chord", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-chord@1", "name": "d3-chord", "escapedName": "d3-chord", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", "_shasum": "309157e3f2db2c752f0280fedd35f2067ccbb15f", "_spec": "d3-chord@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-chord/issues" }, "dependencies": { "d3-array": { "_from": "d3-array@1", "_id": "d3-array@1.2.4", "_inBundle": false, "_integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", "_location": "/d3-array", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "_shasum": "635ce4d5eea759f6f605863dbcfc30edc737f71f", "_spec": "d3-array@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Array manipulation, ordering, searching, summarizing, etc.", "devDependencies": "[Circular]", "homepage": "https://d3js.org/d3-array/", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-array.js", "module": "src/index.js", "name": "d3-array", "repository": "[Circular]", "scripts": "[Circular]", "unpkg": "dist/d3-array.min.js", "version": "1.2.4", "readme": "# d3-array\n\nData in JavaScript is often represented by an array, and so one tends to manipulate arrays when visualizing or analyzing data. Some common forms of manipulation include taking a contiguous slice (subset) of an array, filtering an array using a predicate function, and mapping an array to a parallel set of values using a transform function. Before looking at the set of utilities that this module provides, familiarize yourself with the powerful [array methods built-in to JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype).\n\nJavaScript includes **mutation methods** that modify the array:\n\n* [*array*.pop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop) - Remove the last element from the array.\n* [*array*.push](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) - Add one or more elements to the end of the array.\n* [*array*.reverse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse) - Reverse the order of the elements of the array.\n* [*array*.shift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift) - Remove the first element from the array.\n* [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) - Sort the elements of the array.\n* [*array*.splice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) - Add or remove elements from the array.\n* [*array*.unshift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift) - Add one or more elements to the front of the array.\n\nThere are also **access methods** that return some representation of the array:\n\n* [*array*.concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) - Join the array with other array(s) or value(s).\n* [*array*.join](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join) - Join all elements of the array into a string.\n* [*array*.slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) - Extract a section of the array.\n* [*array*.indexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) - Find the first occurrence of a value within the array.\n* [*array*.lastIndexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - Find the last occurrence of a value within the array.\n\nAnd finally **iteration methods** that apply functions to elements in the array:\n\n* [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) - Create a new array with only the elements for which a predicate is true.\n* [*array*.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) - Call a function for each element in the array.\n* [*array*.every](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every) - See if every element in the array satisfies a predicate.\n* [*array*.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) - Create a new array with the result of calling a function on every element in the array.\n* [*array*.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some) - See if at least one element in the array satisfies a predicate.\n* [*array*.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) - Apply a function to reduce the array to a single value (from left-to-right).\n* [*array*.reduceRight](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight) - Apply a function to reduce the array to a single value (from right-to-left).\n\n## Installing\n\nIf you use NPM, `npm install d3-array`. Otherwise, download the [latest release](https://github.com/d3/d3-array/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-array.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-array in your browser.](https://tonicdev.com/npm/d3-array)\n\n## API Reference\n\n* [Statistics](#statistics)\n* [Search](#search)\n* [Transformations](#transformations)\n* [Histograms](#histograms)\n* [Histogram Thresholds](#histogram-thresholds)\n\n### Statistics\n\nMethods for computing basic summary statistics.\n\n# d3.min(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/min.js \"Source\")\n\nReturns the minimum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the minimum value.\n\nUnlike the built-in [Math.min](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/min), this method ignores undefined, null and NaN values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the minimum of the strings [“20”, “3”] is “20”, while the minimum of the numbers [20, 3] is 3.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.max(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/max.js \"Source\")\n\nReturns the maximum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the maximum value.\n\nUnlike the built-in [Math.max](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/max), this method ignores undefined values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the maximum of the strings [“20”, “3”] is “3”, while the maximum of the numbers [20, 3] is 20.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.extent(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/extent.js \"Source\")\n\nReturns the [minimum](#min) and [maximum](#max) value in the given *array* using natural order. If the array is empty, returns [undefined, undefined]. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the extent.\n\n# d3.sum(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/sum.js \"Source\")\n\nReturns the sum of the given *array* of numbers. If the array is empty, returns 0. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the sum. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.mean(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/mean.js \"Source\")\n\nReturns the mean of the given *array* of numbers. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the mean. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.median(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/median.js \"Source\")\n\nReturns the median of the given *array* of numbers using the [R-7 method](https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample). If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the median. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.quantile(array, p[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/quantile.js \"Source\")\n\nReturns the *p*-quantile of the given **sorted** *array* of numbers, where *p* is a number in the range [0, 1]. For example, the median can be computed using *p* = 0.5, the first quartile at *p* = 0.25, and the third quartile at *p* = 0.75. This particular implementation uses the [R-7 method](http://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population), which is the default for the R programming language and Excel. For example:\n\n```js\nvar a = [0, 10, 30];\nd3.quantile(a, 0); // 0\nd3.quantile(a, 0.5); // 10\nd3.quantile(a, 1); // 30\nd3.quantile(a, 0.25); // 5\nd3.quantile(a, 0.75); // 20\nd3.quantile(a, 0.1); // 2\n```\n\nAn optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the quantile.\n\n# d3.variance(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/variance.js \"Source\")\n\nReturns an [unbiased estimator of the population variance](http://mathworld.wolfram.com/SampleVariance.html) of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the variance. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.deviation(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/deviation.js \"Source\")\n\nReturns the standard deviation, defined as the square root of the [bias-corrected variance](#variance), of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the standard deviation. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n### Search\n\nMethods for searching arrays for a specific element.\n\n# d3.scan(array[, comparator]) [<>](https://github.com/d3/d3-array/blob/master/src/scan.js \"Source\")\n\nPerforms a linear scan of the specified *array*, returning the index of the least element according to the specified *comparator*. If the given *array* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns undefined. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:\n\n```js\nvar array = [{foo: 42}, {foo: 91}];\nd3.scan(array, function(a, b) { return a.foo - b.foo; }); // 0\nd3.scan(array, function(a, b) { return b.foo - a.foo; }); // 1\n```\n\nThis function is similar to [min](#min), except it allows the use of a comparator rather than an accessor and it returns the index instead of the accessed value. See also [bisect](#bisect).\n\n# d3.bisectLeft(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nReturns the insertion point for *x* in *array* to maintain sorted order. The arguments *lo* and *hi* may be used to specify a subset of the array which should be considered; by default the entire array is used. If *x* is already present in *array*, the insertion point will be before (to the left of) any existing entries. The return value is suitable for use as the first argument to [splice](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice) assuming that *array* is already sorted. The returned insertion point *i* partitions the *array* into two halves so that all *v* < *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* >= *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisect(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js \"Source\")
\n# d3.bisectRight(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nSimilar to [bisectLeft](#bisectLeft), but returns an insertion point which comes after (to the right of) any existing entries of *x* in *array*. The returned insertion point *i* partitions the *array* into two halves so that all *v* <= *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* > *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisector(accessor) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n
# d3.bisector(comparator) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n\nReturns a new bisector using the specified *accessor* or *comparator* function. This method can be used to bisect arrays of objects instead of being limited to simple arrays of primitives. For example, given the following array of objects:\n\n```js\nvar data = [\n {date: new Date(2011, 1, 1), value: 0.5},\n {date: new Date(2011, 2, 1), value: 0.6},\n {date: new Date(2011, 3, 1), value: 0.7},\n {date: new Date(2011, 4, 1), value: 0.8}\n];\n```\n\nA suitable bisect function could be constructed as:\n\n```js\nvar bisectDate = d3.bisector(function(d) { return d.date; }).right;\n```\n\nThis is equivalent to specifying a comparator:\n\n```js\nvar bisectDate = d3.bisector(function(d, x) { return d.date - x; }).right;\n```\n\nAnd then applied as *bisectDate*(*array*, *date*), returning an index. Note that the comparator is always passed the search value *x* as the second argument. Use a comparator rather than an accessor if you want values to be sorted in an order different than natural order, such as in descending rather than ascending order.\n\n# bisector.left(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L6 \"Source\")\n\nEquivalent to [bisectLeft](#bisectLeft), but uses this bisector’s associated comparator.\n\n# bisector.right(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L16 \"Source\")\n\nEquivalent to [bisectRight](#bisectRight), but uses this bisector’s associated comparator.\n\n# d3.ascending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/ascending.js \"Source\")\n\nReturns -1 if *a* is less than *b*, or 1 if *a* is greater than *b*, or 0. This is the comparator function for natural order, and can be used in conjunction with the built-in [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) method to arrange elements in ascending order. It is implemented as:\n\n```js\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n# d3.descending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/descending.js \"Source\")\n\nReturns -1 if *a* is greater than *b*, or 1 if *a* is less than *b*, or 0. This is the comparator function for reverse natural order, and can be used in conjunction with the built-in array sort method to arrange elements in descending order. It is implemented as:\n\n```js\nfunction descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n### Transformations\n\nMethods for transforming arrays and for generating new arrays.\n\n# d3.cross(a, b[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/cross.js \"Source\")\n\nReturns the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) of the two arrays *a* and *b*. For each element *i* in the specified array *a* and each element *j* in the specified array *b*, in order, invokes the specified *reducer* function passing the element *i* and element *j*. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.cross([1, 2], [\"x\", \"y\"]); // returns [[1, \"x\"], [1, \"y\"], [2, \"x\"], [2, \"y\"]]\nd3.cross([1, 2], [\"x\", \"y\"], (a, b) => a + b); // returns [\"1x\", \"1y\", \"2x\", \"2y\"]\n```\n\n# d3.merge(arrays) [<>](https://github.com/d3/d3-array/blob/master/src/merge.js \"Source\")\n\nMerges the specified *arrays* into a single array. This method is similar to the built-in array concat method; the only difference is that it is more convenient when you have an array of arrays.\n\n```js\nd3.merge([[1], [2, 3]]); // returns [1, 2, 3]\n```\n\n# d3.pairs(array[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/pairs.js \"Source\")\n\nFor each adjacent pair of elements in the specified *array*, in order, invokes the specified *reducer* function passing the element *i* and element *i* - 1. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.pairs([1, 2, 3, 4]); // returns [[1, 2], [2, 3], [3, 4]]\nd3.pairs([1, 2, 3, 4], (a, b) => b - a); // returns [1, 1, 1];\n```\n\nIf the specified array has fewer than two elements, returns the empty array.\n\n# d3.permute(array, indexes) [<>](https://github.com/d3/d3-array/blob/master/src/permute.js \"Source\")\n\nReturns a permutation of the specified *array* using the specified array of *indexes*. The returned array contains the corresponding element in array for each index in indexes, in order. For example, permute([\"a\", \"b\", \"c\"], [1, 2, 0])\nreturns [\"b\", \"c\", \"a\"]. It is acceptable for the array of indexes to be a different length from the array of elements, and for indexes to be duplicated or omitted.\n\nThis method can also be used to extract the values from an object into an array with a stable order. Extracting keyed values in order can be useful for generating data arrays in nested selections. For example:\n\n```js\nvar object = {yield: 27, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n fields = [\"site\", \"variety\", \"yield\"];\n\nd3.permute(object, fields); // returns [\"University Farm\", \"Manchuria\", 27]\n```\n\n# d3.shuffle(array[, start[, stop]]) [<>](https://github.com/d3/d3-array/blob/master/src/shuffle.js \"Source\")\n\nRandomizes the order of the specified *array* in-place using the [Fisher–Yates shuffle](https://bost.ocks.org/mike/shuffle/) and returns the *array*. If *start* is specified, it is the starting index (inclusive) of the *array* to shuffle; if *start* is not specified, it defaults to zero. If *stop* is specified, it is the ending index (exclusive) of the *array* to shuffle; if *stop* is not specified, it defaults to *array*.length. For example, to shuffle the first ten elements of the *array*: shuffle(*array*, 0, 10).\n\n# d3.ticks(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js \"Source\")\n\nReturns an array of approximately *count* + 1 uniformly-spaced, nicely-rounded values between *start* and *stop* (inclusive). Each value is a power of ten multiplied by 1, 2 or 5. See also [d3.tickIncrement](#tickIncrement), [d3.tickStep](#tickStep) and [*linear*.ticks](https://github.com/d3/d3-scale/blob/master/README.md#linear_ticks).\n\nTicks are inclusive in the sense that they may include the specified *start* and *stop* values if (and only if) they are exact, nicely-rounded values consistent with the inferred [step](#tickStep). More formally, each returned tick *t* satisfies *start* ≤ *t* and *t* ≤ *stop*.\n\n# d3.tickIncrement(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nLike [d3.tickStep](#tickStep), except requires that *start* is always less than or equal to *step*, and if the tick step for the given *start*, *stop* and *count* would be less than one, returns the negative inverse tick step instead. This method is always guaranteed to return an integer, and is used by [d3.ticks](#ticks) to avoid guarantee that the returned tick values are represented as precisely as possible in IEEE 754 floating point.\n\n# d3.tickStep(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nReturns the difference between adjacent tick values if the same arguments were passed to [d3.ticks](#ticks): a nicely-rounded value that is a power of ten multiplied by 1, 2 or 5. Note that due to the limited precision of IEEE 754 floating point, the returned value may not be exact decimals; use [d3-format](https://github.com/d3/d3-format) to format numbers for human consumption.\n\n# d3.range([start, ]stop[, step]) [<>](https://github.com/d3/d3-array/blob/master/src/range.js \"Source\")\n\nReturns an array containing an arithmetic progression, similar to the Python built-in [range](http://docs.python.org/library/functions.html#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.ticks](#ticks) for nicely-rounded values.)\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\nd3.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; see also [linear.tickFormat](https://github.com/d3/d3-scale/blob/master/README.md#linear_tickFormat) in [d3-scale](https://github.com/d3/d3-scale).\n\nLikewise, if the returned array should have a specific length, consider using [array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) on an integer range. For example:\n\n```js\nd3.range(0, 1, 1 / 49); // BAD: returns 50 elements!\nd3.range(49).map(function(d) { return d / 49; }); // GOOD: returns 49 elements.\n```\n\n# d3.transpose(matrix) [<>](https://github.com/d3/d3-array/blob/master/src/transpose.js \"Source\")\n\nUses the [zip](#zip) operator as a two-dimensional [matrix transpose](http://en.wikipedia.org/wiki/Transpose).\n\n# d3.zip(arrays…) [<>](https://github.com/d3/d3-array/blob/master/src/zip.js \"Source\")\n\nReturns an array of arrays, where the *i*th array contains the *i*th element from each of the argument *arrays*. The returned array is truncated in length to the shortest array in *arrays*. If *arrays* contains only a single array, the returned array contains one-element arrays. With no arguments, the returned array is empty.\n\n```js\nd3.zip([1, 2], [3, 4]); // returns [[1, 3], [2, 4]]\n```\n\n### Histograms\n\n[\"Histogram\"](http://bl.ocks.org/mbostock/3048450)\n\nHistograms bin many discrete samples into a smaller number of consecutive, non-overlapping intervals. They are often used to visualize the distribution of numerical data.\n\n# d3.histogram() [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js \"Source\")\n\nConstructs a new histogram generator with the default settings.\n\n# histogram(data) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L14 \"Source\")\n\nComputes the histogram for the given array of *data* samples. Returns an array of bins, where each bin is an array containing the associated elements from the input *data*. Thus, the `length` of the bin is the number of elements in that bin. Each bin has two additional attributes:\n\n* `x0` - the lower bound of the bin (inclusive).\n* `x1` - the upper bound of the bin (exclusive, except for the last bin).\n\n# histogram.value([value]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L58 \"Source\")\n\nIf *value* is specified, sets the value accessor to the specified function or constant and returns this histogram generator. If *value* is not specified, returns the current value accessor, which defaults to the identity function.\n\nWhen a histogram is [generated](#_histogram), the value accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default value accessor assumes that the input data are orderable (comparable), such as numbers or dates. If your data are not, then you should specify an accessor that returns the corresponding orderable value for a given datum.\n\nThis is similar to mapping your data to values before invoking the histogram generator, but has the benefit that the input data remains associated with the returned bins, thereby making it easier to access other fields of the data.\n\n# histogram.domain([domain]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L62 \"Source\")\n\nIf *domain* is specified, sets the domain accessor to the specified function or array and returns this histogram generator. If *domain* is not specified, returns the current domain accessor, which defaults to [extent](#extent). The histogram domain is defined as an array [*min*, *max*], where *min* is the minimum observable value and *max* is the maximum observable value; both values are inclusive. Any value outside of this domain will be ignored when the histogram is [generated](#_histogram).\n\nFor example, if you are using the the histogram in conjunction with a [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales) `x`, you might say:\n\n```js\nvar histogram = d3.histogram()\n .domain(x.domain())\n .thresholds(x.ticks(20));\n```\n\nYou can then compute the bins from an array of numbers like so:\n\n```js\nvar bins = histogram(numbers);\n```\n\nNote that the domain accessor is invoked on the materialized array of [values](#histogram_value), not on the input data array.\n\n# histogram.thresholds([count]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n
# histogram.thresholds([thresholds]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n\nIf *thresholds* is specified, sets the [threshold generator](#histogram-thresholds) to the specified function or array and returns this histogram generator. If *thresholds* is not specified, returns the current threshold generator, which by default implements [Sturges’ formula](#thresholdSturges). (Thus by default, the histogram values must be numbers!) Thresholds are defined as an array of values [*x0*, *x1*, …]. Any value less than *x0* will be placed in the first bin; any value greater than or equal to *x0* but less than *x1* will be placed in the second bin; and so on. Thus, the [generated histogram](#_histogram) will have *thresholds*.length + 1 bins. See [histogram thresholds](#histogram-thresholds) for more information.\n\nAny threshold values outside the [domain](#histogram_domain) are ignored. The first *bin*.x0 is always equal to the minimum domain value, and the last *bin*.x1 is always equal to the maximum domain value.\n\nIf a *count* is specified instead of an array of *thresholds*, then the [domain](#histogram_domain) will be uniformly divided into approximately *count* bins; see [ticks](#ticks).\n\n### Histogram Thresholds\n\nThese functions are typically not used directly; instead, pass them to [*histogram*.thresholds](#histogram_thresholds). You may also implement your own threshold generator taking three arguments: the array of input [*values*](#histogram_value) derived from the data, and the [observable domain](#histogram_domain) represented as *min* and *max*. The generator may then return either the array of numeric thresholds or the *count* of bins; in the latter case the domain is divided uniformly into approximately *count* bins; see [ticks](#ticks).\n\n# d3.thresholdFreedmanDiaconis(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/freedmanDiaconis.js \"Source\")\n\nReturns the number of bins according to the [Freedman–Diaconis rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdScott(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/scott.js \"Source\")\n\nReturns the number of bins according to [Scott’s normal reference rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdSturges(values) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/sturges.js \"Source\")\n\nReturns the number of bins according to [Sturges’ formula](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-array", "error": "[Circular]", "extraneous": false, "_deduped": "d3-array" }, "d3-path": { "_from": "d3-path@1", "_id": "d3-path@1.0.9", "_inBundle": false, "_integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", "_location": "/d3-path", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-path@1", "name": "d3-path", "escapedName": "d3-path", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-chord", "/d3-shape" ], "_resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", "_shasum": "48c050bb1fe8c262493a8caf5524e3e9591701cf", "_spec": "d3-path@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-path/issues" }, "deprecated": false, "description": "Serialize Canvas path commands to SVG.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-path/", "jsdelivr": "dist/d3-path.min.js", "keywords": [ "d3", "d3-module", "canvas", "path", "svg", "graphics", "CanvasRenderingContext2D", "CanvasPathMethods", "Path2D" ], "license": "BSD-3-Clause", "main": "dist/d3-path.js", "module": "src/index.js", "name": "d3-path", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-path.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": false, "unpkg": "dist/d3-path.min.js", "version": "1.0.9", "readme": "# d3-path\n\nSay you have some code that draws to a 2D canvas:\n\n```js\nfunction drawCircle(context, radius) {\n context.moveTo(radius, 0);\n context.arc(0, 0, radius, 0, 2 * Math.PI);\n}\n```\n\nThe d3-path module lets you take this exact code and additionally render to [SVG](http://www.w3.org/TR/SVG/paths.html). It works by [serializing](#path_toString) [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls to [SVG path data](http://www.w3.org/TR/SVG/paths.html#PathData). For example:\n\n```js\nvar context = d3.path();\ndrawCircle(context, 40);\npathElement.setAttribute(\"d\", context.toString());\n```\n\nNow code you write once can be used with both Canvas (for performance) and SVG (for convenience). For a practical example, see [d3-shape](https://github.com/d3/d3-shape).\n\n## Installing\n\nIf you use NPM, `npm install d3-path`. Otherwise, download the [latest release](https://github.com/d3/d3-path/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-path.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n## API Reference\n\n# d3.path() · [Source](https://github.com/d3/d3-path/blob/master/src/path.js), [Examples](https://observablehq.com/@d3/d3-path)\n\nConstructs a new path serializer that implements [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods).\n\n# path.moveTo(x, y)\n\nMove to the specified point ⟨*x*, *y*⟩. Equivalent to [*context*.moveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-moveto) and SVG’s [“moveto” command](http://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands).\n\n# path.closePath()\n\nEnds the current subpath and causes an automatic straight line to be drawn from the current point to the initial point of the current subpath. Equivalent to [*context*.closePath](http://www.w3.org/TR/2dcontext/#dom-context-2d-closepath) and SVG’s [“closepath” command](http://www.w3.org/TR/SVG/paths.html#PathDataClosePathCommand).\n\n# path.lineTo(x, y)\n\nDraws a straight line from the current point to the specified point ⟨*x*, *y*⟩. Equivalent to [*context*.lineTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-lineto) and SVG’s [“lineto” command](http://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands).\n\n# path.quadraticCurveTo(cpx, cpy, x, y)\n\nDraws a quadratic Bézier segment from the current point to the specified point ⟨*x*, *y*⟩, with the specified control point ⟨*cpx*, *cpy*⟩. Equivalent to [*context*.quadraticCurveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-quadraticcurveto) and SVG’s [quadratic Bézier curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataQuadraticBezierCommands).\n\n# path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x, y)\n\nDraws a cubic Bézier segment from the current point to the specified point ⟨*x*, *y*⟩, with the specified control points ⟨*cpx1*, *cpy1*⟩ and ⟨*cpx2*, *cpy2*⟩. Equivalent to [*context*.bezierCurveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-beziercurveto) and SVG’s [cubic Bézier curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataCubicBezierCommands).\n\n# path.arcTo(x1, y1, x2, y2, radius)\n\nDraws a circular arc segment with the specified *radius* that starts tangent to the line between the current point and the specified point ⟨*x1*, *y1*⟩ and ends tangent to the line between the specified points ⟨*x1*, *y1*⟩ and ⟨*x2*, *y2*⟩. If the first tangent point is not equal to the current point, a straight line is drawn between the current point and the first tangent point. Equivalent to [*context*.arcTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-arcto) and uses SVG’s [elliptical arc curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands).\n\n# path.arc(x, y, radius, startAngle, endAngle[, anticlockwise])\n\nDraws a circular arc segment with the specified center ⟨*x*, *y*⟩, *radius*, *startAngle* and *endAngle*. If *anticlockwise* is true, the arc is drawn in the anticlockwise direction; otherwise, it is drawn in the clockwise direction. If the current point is not equal to the starting point of the arc, a straight line is drawn from the current point to the start of the arc. Equivalent to [*context*.arc](http://www.w3.org/TR/2dcontext/#dom-context-2d-arc) and uses SVG’s [elliptical arc curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands).\n\n# path.rect(x, y, w, h)\n\nCreates a new subpath containing just the four points ⟨*x*, *y*⟩, ⟨*x* + *w*, *y*⟩, ⟨*x* + *w*, *y* + *h*⟩, ⟨*x*, *y* + *h*⟩, with those four points connected by straight lines, and then marks the subpath as closed. Equivalent to [*context*.rect](http://www.w3.org/TR/2dcontext/#dom-context-2d-rect) and uses SVG’s [“lineto” commands](http://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands).\n\n# path.toString()\n\nReturns the string representation of this *path* according to SVG’s [path data specification](http://www.w3.org/TR/SVG/paths.html#PathData).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-path", "error": "[Circular]", "extraneous": false, "_deduped": "d3-path" } }, "deprecated": false, "description": "Visualize relationships or network flow with an aesthetically-pleasing circular layout.", "devDependencies": { "eslint": "5", "rollup": "0.64", "rollup-plugin-terser": "1", "tape": "4" }, "homepage": "https://d3js.org/d3-chord/", "jsdelivr": "dist/d3-chord.min.js", "keywords": [ "d3", "d3-module", "chord", "radial", "network", "flow" ], "license": "BSD-3-Clause", "main": "dist/d3-chord.js", "module": "src/index.js", "name": "d3-chord", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-chord.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "unpkg": "dist/d3-chord.min.js", "version": "1.0.6", "readme": "# d3-chord\n\nVisualize relationships or network flow with an aesthetically-pleasing circular layout.\n\n[\"Chord](http://bl.ocks.org/mbostock/4062006)\n\n## Installing\n\nIf you use NPM, `npm install d3-chord`. Otherwise, download the [latest release](https://github.com/d3/d3-chord/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-chord.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n\n\n```\n\n[Try d3-chord in your browser.](https://tonicdev.com/npm/d3-chord)\n\n## API Reference\n\n# d3.chord() [<>](https://github.com/d3/d3-chord/blob/master/src/chord.js \"Source\")\n\nConstructs a new chord layout with the default settings.\n\n# chord(matrix) [<>](https://github.com/d3/d3-chord/blob/master/src/chord.js#L19 \"Source\")\n\nComputes the chord layout for the specified square *matrix* of size *n*×*n*, where the *matrix* represents the directed flow amongst a network (a complete digraph) of *n* nodes. The given *matrix* must be an array of length *n*, where each element *matrix*[*i*] is an array of *n* numbers, where each *matrix*[*i*][*j*] represents the flow from the *i*th node in the network to the *j*th node. Each number *matrix*[*i*][*j*] must be nonnegative, though it can be zero if there is no flow from node *i* to node *j*. From the [Circos tableviewer example](http://mkweb.bcgsc.ca/circos/guide/tables/):\n\n```js\nvar matrix = [\n [11975, 5871, 8916, 2868],\n [ 1951, 10048, 2060, 6171],\n [ 8010, 16145, 8090, 8045],\n [ 1013, 990, 940, 6907]\n];\n```\n\nThe return value of *chord*(*matrix*) is an array of *chords*, where each chord represents the combined bidirectional flow between two nodes *i* and *j* (where *i* may be equal to *j*) and is an object with the following properties:\n\n* `source` - the source subgroup\n* `target` - the target subgroup\n\nEach source and target subgroup is also an object with the following properties:\n\n* `startAngle` - the start angle in radians\n* `endAngle` - the end angle in radians\n* `value` - the flow value *matrix*[*i*][*j*]\n* `index` - the node index *i*\n* `subindex` - the node index *j*\n\nThe chords are typically passed to [d3.ribbon](#ribbon) to display the network relationships. The returned array includes only chord objects for which the value *matrix*[*i*][*j*] or *matrix*[*j*][*i*] is non-zero. Furthermore, the returned array only contains unique chords: a given chord *ij* represents the bidirectional flow from *i* to *j* *and* from *j* to *i*, and does not contain a duplicate chord *ji*; *i* and *j* are chosen such that the chord’s source always represents the larger of *matrix*[*i*][*j*] and *matrix*[*j*][*i*]. In other words, *chord*.source.index equals *chord*.target.subindex, *chord*.source.subindex equals *chord*.target.index, *chord*.source.value is greater than or equal to *chord*.target.value, and *chord*.source.value is always greater than zero.\n\nThe *chords* array also defines a secondary array of length *n*, *chords*.groups, where each group represents the combined outflow for node *i*, corresponding to the elements *matrix*[*i*][0 … *n* - 1], and is an object with the following properties:\n\n* `startAngle` - the start angle in radians\n* `endAngle` - the end angle in radians\n* `value` - the total outgoing flow value for node *i*\n* `index` - the node index *i*\n\nThe groups are typically passed to [d3.arc](https://github.com/d3/d3-shape#arc) to produce a donut chart around the circumference of the chord layout.\n\n# chord.padAngle([angle]) [<>](https://github.com/d3/d3-chord/blob/master/src/chord.js#L104 \"Source\")\n\nIf *angle* is specified, sets the pad angle between adjacent groups to the specified number in radians and returns this chord layout. If *angle* is not specified, returns the current pad angle, which defaults to zero.\n\n# chord.sortGroups([compare]) [<>](https://github.com/d3/d3-chord/blob/master/src/chord.js#L108 \"Source\")\n\nIf *compare* is specified, sets the group comparator to the specified function or null and returns this chord layout. If *compare* is not specified, returns the current group comparator, which defaults to null. If the group comparator is non-null, it is used to sort the groups by their total outflow. See also [d3.ascending](https://github.com/d3/d3-array#ascending) and [d3.descending](https://github.com/d3/d3-array#descending).\n\n# chord.sortSubgroups([compare]) [<>](https://github.com/d3/d3-chord/blob/master/src/chord.js#L112 \"Source\")\n\nIf *compare* is specified, sets the subgroup comparator to the specified function or null and returns this chord layout. If *compare* is not specified, returns the current subgroup comparator, which defaults to null. If the subgroup comparator is non-null, it is used to sort the subgroups corresponding to *matrix*[*i*][0 … *n* - 1] for a given group *i* by their total outflow. See also [d3.ascending](https://github.com/d3/d3-array#ascending) and [d3.descending](https://github.com/d3/d3-array#descending).\n\n# chord.sortChords([compare]) [<>](https://github.com/d3/d3-chord/blob/master/src/chord.js#L116 \"Source\")\n\nIf *compare* is specified, sets the chord comparator to the specified function or null and returns this chord layout. If *compare* is not specified, returns the current chord comparator, which defaults to null. If the chord comparator is non-null, it is used to sort the [chords](#_chord) by their combined flow; this only affects the *z*-order of the chords. See also [d3.ascending](https://github.com/d3/d3-array#ascending) and [d3.descending](https://github.com/d3/d3-array#descending).\n\n# d3.ribbon() [<>](https://github.com/d3/d3-chord/blob/master/src/ribbon.js \"Source\")\n\nCreates a new ribbon generator with the default settings.\n\n# ribbon(arguments…) [<>](https://github.com/d3/d3-chord/blob/master/src/ribbon.js#L34 \"Source\")\n\nGenerates a ribbon for the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the ribbon generator’s accessor functions along with the `this` object. For example, with the default settings, a [chord object](#_chord) expected:\n\n```js\nvar ribbon = d3.ribbon();\n\nribbon({\n source: {startAngle: 0.7524114, endAngle: 1.1212972, radius: 240},\n target: {startAngle: 1.8617078, endAngle: 1.9842927, radius: 240}\n}); // \"M164.0162810494058,-175.21032946354026A240,240,0,0,1,216.1595644740915,-104.28347273835429Q0,0,229.9158815306728,68.8381247563705A240,240,0,0,1,219.77316791012538,96.43523560788266Q0,0,164.0162810494058,-175.21032946354026Z\"\n```\n\nOr equivalently if the radius is instead defined as a constant:\n\n```js\nvar ribbon = d3.ribbon()\n .radius(240);\n\nribbon({\n source: {startAngle: 0.7524114, endAngle: 1.1212972},\n target: {startAngle: 1.8617078, endAngle: 1.9842927}\n}); // \"M164.0162810494058,-175.21032946354026A240,240,0,0,1,216.1595644740915,-104.28347273835429Q0,0,229.9158815306728,68.8381247563705A240,240,0,0,1,219.77316791012538,96.43523560788266Q0,0,164.0162810494058,-175.21032946354026Z\"\n```\n\nIf the ribbon generator has a context, then the ribbon is rendered to this context as a sequence of path method calls and this function returns void. Otherwise, a path data string is returned.\n\n# ribbon.source([source]) [<>](https://github.com/d3/d3-chord/blob/master/src/ribbon.js#L74 \"Source\")\n\nIf *source* is specified, sets the source accessor to the specified function and returns this ribbon generator. If *source* is not specified, returns the current source accessor, which defaults to:\n\n```js\nfunction source(d) {\n return d.source;\n}\n```\n\n# ribbon.target([target]) [<>](https://github.com/d3/d3-chord/blob/master/src/ribbon.js#L78 \"Source\")\n\nIf *target* is specified, sets the target accessor to the specified function and returns this ribbon generator. If *target* is not specified, returns the current target accessor, which defaults to:\n\n```js\nfunction target(d) {\n return d.target;\n}\n```\n\n# ribbon.radius([radius]) [<>](https://github.com/d3/d3-chord/blob/master/src/ribbon.js#L62 \"Source\")\n\nIf *radius* is specified, sets the radius accessor to the specified function and returns this ribbon generator. If *radius* is not specified, returns the current radius accessor, which defaults to:\n\n```js\nfunction radius(d) {\n return d.radius;\n}\n```\n\n# ribbon.startAngle([angle]) [<>](https://github.com/d3/d3-chord/blob/master/src/ribbon.js#L66 \"Source\")\n\nIf *angle* is specified, sets the start angle accessor to the specified function and returns this ribbon generator. If *angle* is not specified, returns the current start angle accessor, which defaults to:\n\n```js\nfunction startAngle(d) {\n return d.startAngle;\n}\n```\n\nThe *angle* is specified in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise.\n\n# ribbon.endAngle([angle]) [<>](https://github.com/d3/d3-chord/blob/master/src/ribbon.js#L70 \"Source\")\n\nIf *angle* is specified, sets the end angle accessor to the specified function and returns this ribbon generator. If *angle* is not specified, returns the current end angle accessor, which defaults to:\n\n```js\nfunction endAngle(d) {\n return d.endAngle;\n}\n```\n\nThe *angle* is specified in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise.\n\n# ribbon.context([context]) [<>](https://github.com/d3/d3-chord/blob/master/src/ribbon.js#L82 \"Source\")\n\nIf *context* is specified, sets the context and returns this ribbon generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated ribbon](#_ribbon) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated ribbon is returned. See also [d3-path](https://github.com/d3/d3-path).\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-array": "1", "d3-path": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-chord", "error": "[Circular]", "extraneous": false }, "d3-collection": { "_from": "d3-collection@1", "_id": "d3-collection@1.0.7", "_inBundle": false, "_integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", "_location": "/d3-collection", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-collection@1", "name": "d3-collection", "escapedName": "d3-collection", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-force", "/d3-scale" ], "_resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", "_shasum": "349bd2aa9977db071091c13144d5e4f16b5b310e", "_spec": "d3-collection@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-collection/issues" }, "deprecated": false, "description": "Handy data structures for elements keyed by string.", "devDependencies": { "d3-array": "1", "eslint": "5", "rollup": "0.64", "rollup-plugin-terser": "1", "tape": "4" }, "homepage": "https://d3js.org/d3-collection/", "jsdelivr": "dist/d3-collection.min.js", "keywords": [ "d3", "d3-module", "nest", "data", "map", "set", "object", "collection" ], "license": "BSD-3-Clause", "main": "dist/d3-collection.js", "module": "src/index.js", "name": "d3-collection", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-collection.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "unpkg": "dist/d3-collection.min.js", "version": "1.0.7", "readme": "# d3-collection\n\nHandy data structures for elements keyed by string.\n\n## Installing\n\nIf you use NPM, `npm install d3-collection`. Otherwise, download the [latest release](https://github.com/d3/d3-collection/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-collection.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-collection in your browser.](https://tonicdev.com/npm/d3-collection)\n\n## API Reference\n\n* [Objects](#objects)\n* [Maps](#maps)\n* [Sets](#sets)\n* [Nests](#nests)\n\n### Objects\n\nA common data type in JavaScript is the *associative array*, or more simply the *object*, which has a set of named properties. The standard mechanism for iterating over the keys (or property names) in an associative array is the [for…in loop](https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in). However, note that the iteration order is undefined. D3 provides several methods for converting associative arrays to standard arrays with numeric indexes.\n\nA word of caution: it is tempting to use plain objects as maps, but this causes [unexpected behavior](http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/) when built-in property names are used as keys, such as `object[\"__proto__\"] = 42` and `\"hasOwnProperty\" in object`. If you cannot guarantee that map keys and set values will be safe, use [maps](#maps) and [sets](#sets) (or their ES6 equivalents) instead of plain objects.\n\n# d3.keys(object) [<>](https://github.com/d3/d3-collection/blob/master/src/keys.js \"Source\")\n\nReturns an array containing the property names of the specified object (an associative array). The order of the returned array is undefined.\n\n# d3.values(object) [<>](https://github.com/d3/d3-collection/blob/master/src/values.js \"Source\")\n\nReturns an array containing the property values of the specified object (an associative array). The order of the returned array is undefined.\n\n# d3.entries(object) [<>](https://github.com/d3/d3-collection/blob/master/src/entries.js \"Source\")\n\nReturns an array containing the property keys and values of the specified object (an associative array). Each entry is an object with a key and value attribute, such as `{key: \"foo\", value: 42}`. The order of the returned array is undefined.\n\n```js\nd3.entries({foo: 42, bar: true}); // [{key: \"foo\", value: 42}, {key: \"bar\", value: true}]\n```\n\n### Maps\n\nLike [ES6 Maps](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), but with a few differences:\n\n* Keys are coerced to strings.\n* [map.each](#map_each), not [map.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach). (Also, no *thisArg*.)\n* [map.remove](#map_remove), not [map.delete](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete).\n* [map.entries](#map_entries) returns an array of {key, value} objects, not an iterator of [key, value].\n* [map.size](#map_size) is a method, not a [property](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size); also, there’s [map.empty](#map_empty).\n\n# d3.map([object[, key]]) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js \"Source\")\n\nConstructs a new map. If *object* is specified, copies all enumerable properties from the specified object into this map. The specified object may also be an array or another map. An optional *key* function may be specified to compute the key for each value in the array. For example:\n\n```js\nvar map = d3.map([{name: \"foo\"}, {name: \"bar\"}], function(d) { return d.name; });\nmap.get(\"foo\"); // {\"name\": \"foo\"}\nmap.get(\"bar\"); // {\"name\": \"bar\"}\nmap.get(\"baz\"); // undefined\n```\n\nSee also [nests](#nests).\n\n# map.has(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L7 \"Source\")\n\nReturns true if and only if this map has an entry for the specified *key* string. Note: the value may be `null` or `undefined`.\n\n# map.get(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L10 \"Source\")\n\nReturns the value for the specified *key* string. If the map does not have an entry for the specified *key*, returns `undefined`.\n\n# map.set(key, value) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L13 \"Source\")\n\nSets the *value* for the specified *key* string. If the map previously had an entry for the same *key* string, the old entry is replaced with the new value. Returns the map, allowing chaining. For example:\n\n```js\nvar map = d3.map()\n .set(\"foo\", 1)\n .set(\"bar\", 2)\n .set(\"baz\", 3);\n\nmap.get(\"foo\"); // 1\n```\n\n# map.remove(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L17 \"Source\")\n\nIf the map has an entry for the specified *key* string, removes the entry and returns true. Otherwise, this method does nothing and returns false.\n\n# map.clear() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L21 \"Source\")\n\nRemoves all entries from this map.\n\n# map.keys() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L24 \"Source\")\n\nReturns an array of string keys for every entry in this map. The order of the returned keys is arbitrary.\n\n# map.values() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L29 \"Source\")\n\nReturns an array of values for every entry in this map. The order of the returned values is arbitrary.\n\n# map.entries() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L34 \"Source\")\n\nReturns an array of key-value objects for each entry in this map. The order of the returned entries is arbitrary. Each entry’s key is a string, but the value has arbitrary type.\n\n# map.each(function) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L48 \"Source\")\n\nCalls the specified *function* for each entry in this map, passing the entry’s value and key as arguments, followed by the map itself. Returns undefined. The iteration order is arbitrary.\n\n# map.empty() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L44 \"Source\")\n\nReturns true if and only if this map has zero entries.\n\n# map.size() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L39 \"Source\")\n\nReturns the number of entries in this map.\n\n### Sets\n\nLike [ES6 Sets](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set), but with a few differences:\n\n* Values are coerced to strings.\n* [set.each](#set_each), not [set.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/forEach). (Also, no *thisArg*.)\n* [set.remove](#set_remove), not [set.delete](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete).\n* [set.size](#set_size) is a method, not a [property](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/size); also, there’s [set.empty](#set_empty).\n\n# d3.set([array[, accessor]]) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js \"Source\")\n\nConstructs a new set. If *array* is specified, adds the given *array* of string values to the returned set. The specified array may also be another set. An optional *accessor* function may be specified, which is equivalent to calling *array.map(accessor)* before constructing the set.\n\n# set.has(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L9 \"Source\")\n\nReturns true if and only if this set has an entry for the specified *value* string.\n\n# set.add(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L10 \"Source\")\n\nAdds the specified *value* string to this set. Returns the set, allowing chaining. For example:\n\n```js\nvar set = d3.set()\n .add(\"foo\")\n .add(\"bar\")\n .add(\"baz\");\n\nset.has(\"foo\"); // true\n```\n\n# set.remove(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L15 \"Source\")\n\nIf the set contains the specified *value* string, removes it and returns true. Otherwise, this method does nothing and returns false.\n\n# set.clear() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L16 \"Source\")\n\nRemoves all values from this set.\n\n# set.values() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L17 \"Source\")\n\nReturns an array of the string values in this set. The order of the returned values is arbitrary. Can be used as a convenient way of computing the unique values for a set of strings. For example:\n\n```js\nd3.set([\"foo\", \"bar\", \"foo\", \"baz\"]).values(); // \"foo\", \"bar\", \"baz\"\n```\n\n# set.each(function) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L20 \"Source\")\n\nCalls the specified *function* for each value in this set, passing the value as the first two arguments (for symmetry with [*map*.each](#map_each)), followed by the set itself. Returns undefined. The iteration order is arbitrary.\n\n# set.empty() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L19 \"Source\")\n\nReturns true if and only if this set has zero values.\n\n# set.size() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L18 \"Source\")\n\nReturns the number of values in this set.\n\n### Nests\n\nNesting allows elements in an array to be grouped into a hierarchical tree structure; think of it like the GROUP BY operator in SQL, except you can have multiple levels of grouping, and the resulting output is a tree rather than a flat table. The levels in the tree are specified by key functions. The leaf nodes of the tree can be sorted by value, while the internal nodes can be sorted by key. An optional rollup function will collapse the elements in each leaf node using a summary function. The nest operator (the object returned by [nest](#nest)) is reusable, and does not retain any references to the data that is nested.\n\nFor example, consider the following tabular data structure of Barley yields, from various sites in Minnesota during 1931-2:\n\n```js\nvar yields = [\n {yield: 27.00, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n {yield: 48.87, variety: \"Manchuria\", year: 1931, site: \"Waseca\"},\n {yield: 27.43, variety: \"Manchuria\", year: 1931, site: \"Morris\"},\n ...\n];\n```\n\nTo facilitate visualization, it may be useful to nest the elements first by year, and then by variety, as follows:\n\n```js\nvar entries = d3.nest()\n .key(function(d) { return d.year; })\n .key(function(d) { return d.variety; })\n .entries(yields);\n```\n\nThis returns a nested array. Each element of the outer array is a key-values pair, listing the values for each distinct key:\n\n```js\n[{key: \"1931\", values: [\n {key: \"Manchuria\", values: [\n {yield: 27.00, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n {yield: 48.87, variety: \"Manchuria\", year: 1931, site: \"Waseca\"},\n {yield: 27.43, variety: \"Manchuria\", year: 1931, site: \"Morris\"}, ...]},\n {key: \"Glabron\", values: [\n {yield: 43.07, variety: \"Glabron\", year: 1931, site: \"University Farm\"},\n {yield: 55.20, variety: \"Glabron\", year: 1931, site: \"Waseca\"}, ...]}, ...]},\n {key: \"1932\", values: ...}]\n```\n\nThe nested form allows easy iteration and generation of hierarchical structures in SVG or HTML.\n\nFor a longer introduction to nesting, see:\n\n* Phoebe Bright’s [D3 Nest Tutorial and examples](http://bl.ocks.org/phoebebright/raw/3176159/)\n* Shan Carter’s [Mister Nester](http://bl.ocks.org/shancarter/raw/4748131/)\n\n# d3.nest() [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js \"Source\")\n\nCreates a new nest operator. The set of keys is initially empty.\n\n# nest.key(key) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L4 \"Source\")\n\nRegisters a new *key* function. The *key* function will be invoked for each element in the input array and must return a string identifier to assign the element to its group. Most often, the function is a simple accessor, such as the year and variety accessors above. (Keys functions are *not* passed the input array index.) Each time a key is registered, it is pushed onto the end of the internal array of keys, and the nest operator applies an additional level of nesting.\n\n# nest.sortKeys(comparator) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L5 \"Source\")\n\nSorts key values for the [current key](#nest_key) using the specified *comparator* function, such as [d3.ascending](https://github.com/d3/d3-array#ascending) or [d3.descending](https://github.com/d3/d3-array#descending). If no comparator is specified for the current key, the order in which keys will be returned is undefined. For example, to sort years in ascending order and varieties in descending order:\n\n```js\nvar entries = d3.nest()\n .key(function(d) { return d.year; }).sortKeys(d3.ascending)\n .key(function(d) { return d.variety; }).sortKeys(d3.descending)\n .entries(yields);\n```\n\nNote that this only affects the result of [*nest*.entries](#nest_entries); the order of keys returned by [*nest*.map](#nest_map) and [*nest*.object](#nest_object) is always undefined, regardless of comparator.\n\n# nest.sortValues(comparator) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L6 \"Source\")\n\nSorts leaf elements using the specified *comparator* function, such as [d3.ascending](https://github.com/d3/d3-array#ascending) or [d3.descending](https://github.com/d3/d3-array#descending). This is roughly equivalent to sorting the input array before applying the nest operator; however it is typically more efficient as the size of each group is smaller. If no value comparator is specified, elements will be returned in the order they appeared in the input array. This applies to [*nest*.map](#nest_map), [*nest*.entries](#nest_entries) and [*nest*.object](#nest_object).\n\n# nest.rollup(function) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L7 \"Source\")\n\nSpecifies a rollup *function* to be applied on each group of leaf elements. The return value of the rollup function will replace the array of leaf values in either the associative array returned by [*nest*.map](#nest_map) or [*nest*.object](#nest_object); for [*nest*.entries](#nest_entries), it replaces the leaf *entry*.values with *entry*.value. If a [leaf comparator](#nest_sortValues) is specified, the leaf elements are sorted prior to invoking the rollup function.\n\n# nest.map(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L50 \"Source\")\n\nApplies the nest operator to the specified *array*, returning a nested [map](#map). Each entry in the returned map corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another map; otherwise, the value is the array of elements filtered from the input *array* that have the given key value. If no keys are defined, returns the input *array*.\n\n# nest.object(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L49 \"Source\")\n\nApplies the nest operator to the specified *array*, returning a nested object. Each entry in the returned associative array corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another associative array; otherwise, the value is the array of elements filtered from the input *array* that have the given key value.\n\nNote: this method is unsafe if any of the keys conflict with built-in JavaScript properties, such as `__proto__`. If you cannot guarantee that the keys will be safe, you should use [nest.map](#nest_map) instead.\n\n# nest.entries(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L51 \"Source\")\n\nApplies the nest operator to the specified *array*, returning an array of key-values entries. Conceptually, this is similar to applying [*map*.entries](#map_entries) to the associative array returned by [*nest*.map](#nest_map), but it applies to every level of the hierarchy rather than just the first (outermost) level. Each entry in the returned array corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another nested array of entries; otherwise, the value is the array of elements filtered from the input *array* that have the given key value.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-collection", "error": "[Circular]", "extraneous": false }, "d3-color": { "_from": "d3-color@1", "_id": "d3-color@1.4.1", "_inBundle": false, "_integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", "_location": "/d3-color", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-color@1", "name": "d3-color", "escapedName": "d3-color", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-interpolate", "/d3-scale-chromatic", "/d3-transition" ], "_resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", "_shasum": "c52002bf8846ada4424d55d97982fef26eb3bc8a", "_spec": "d3-color@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-color/issues" }, "deprecated": false, "description": "Color spaces! RGB, HSL, Cubehelix, Lab and HCL (Lch).", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-color/", "jsdelivr": "dist/d3-color.min.js", "keywords": [ "d3", "d3-module", "color", "rgb", "hsl", "lab", "hcl", "lch", "cubehelix" ], "license": "BSD-3-Clause", "main": "dist/d3-color.js", "module": "src/index.js", "name": "d3-color", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-color.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": false, "unpkg": "dist/d3-color.min.js", "version": "1.4.1", "readme": "# d3-color\n\nEven though your browser understands a lot about colors, it doesn’t offer much help in manipulating colors through JavaScript. The d3-color module therefore provides representations for various color spaces, allowing specification, conversion and manipulation. (Also see [d3-interpolate](https://github.com/d3/d3-interpolate) for color interpolation.)\n\nFor example, take the color named “steelblue”:\n\n```js\nvar c = d3.color(\"steelblue\"); // {r: 70, g: 130, b: 180, opacity: 1}\n```\n\nLet’s try converting it to HSL:\n\n```js\nvar c = d3.hsl(\"steelblue\"); // {h: 207.27…, s: 0.44, l: 0.4902…, opacity: 1}\n```\n\nNow rotate the hue by 90°, bump up the saturation, and format as a string for CSS:\n\n```js\nc.h += 90;\nc.s += 0.2;\nc + \"\"; // rgb(198, 45, 205)\n```\n\nTo fade the color slightly:\n\n```js\nc.opacity = 0.8;\nc + \"\"; // rgba(198, 45, 205, 0.8)\n```\n\nIn addition to the ubiquitous and machine-friendly [RGB](#rgb) and [HSL](#hsl) color space, d3-color supports color spaces that are designed for humans:\n\n* [CIELAB](#lab) (*a.k.a.* “Lab”)\n* [CIELChab](#lch) (*a.k.a.* “LCh” or “HCL”)\n* Dave Green’s [Cubehelix](#cubehelix)\n\nCubehelix features monotonic lightness, while CIELAB and its polar form CIELChab are perceptually uniform.\n\nFor additional color spaces, see:\n\n* [d3-cam16](https://github.com/d3/d3-cam16)\n* [d3-cam02](https://github.com/connorgr/d3-cam02)\n* [d3-hsv](https://github.com/d3/d3-hsv)\n* [d3-hcg](https://github.com/d3/d3-hcg)\n* [d3-hsluv](https://github.com/petulla/d3-hsluv)\n\n## Installing\n\nIf you use NPM, `npm install d3-color`. Otherwise, download the [latest release](https://github.com/d3/d3-color/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-color.v1.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\n\n```\n\n[Try d3-color in your browser.](https://observablehq.com/collection/@d3/d3-color)\n\n## API Reference\n\n# d3.color(specifier) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nParses the specified [CSS Color Module Level 3](http://www.w3.org/TR/css3-color/#colorunits) *specifier* string, returning an [RGB](#rgb) or [HSL](#hsl) color, along with [CSS Color Module Level 4 hex](https://www.w3.org/TR/css-color-4/#hex-notation) *specifier* strings. If the specifier was not valid, null is returned. Some examples:\n\n* `rgb(255, 255, 255)`\n* `rgb(10%, 20%, 30%)`\n* `rgba(255, 255, 255, 0.4)`\n* `rgba(10%, 20%, 30%, 0.4)`\n* `hsl(120, 50%, 20%)`\n* `hsla(120, 50%, 20%, 0.4)`\n* `#ffeeaa`\n* `#fea`\n* `#ffeeaa22`\n* `#fea2`\n* `steelblue`\n\nThe list of supported [named colors](http://www.w3.org/TR/SVG/types.html#ColorKeywords) is specified by CSS.\n\nNote: this function may also be used with `instanceof` to test if an object is a color instance. The same is true of color subclasses, allowing you to test whether a color is in a particular color space.\n\n# *color*.opacity\n\nThis color’s opacity, typically in the range [0, 1].\n\n# *color*.rgb() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns the [RGB equivalent](#rgb) of this color. For RGB colors, that’s `this`.\n\n# color.copy([values]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a copy of this color. If *values* is specified, any enumerable own properties of *values* are assigned to the new returned color. For example, to derive a copy of a *color* with opacity 0.5, say\n\n```js\ncolor.copy({opacity: 0.5})\n```\n\n# *color*.brighter([k]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a brighter copy of this color. If *k* is specified, it controls how much brighter the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.\n\n# *color*.darker([k]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a darker copy of this color. If *k* is specified, it controls how much darker the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.\n\n# *color*.displayable() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns true if and only if the color is displayable on standard hardware. For example, this returns false for an RGB color if any channel value is less than zero or greater than 255 when rounded, or if the opacity is not in the range [0, 1].\n\n# *color*.formatHex() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a hexadecimal string representing this color in RGB space, such as `#f7eaba`. If this color is not displayable, a suitable displayable color is returned instead. For example, RGB channel values greater than 255 are clamped to 255.\n\n# *color*.formatHsl() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a string representing this color according to the [CSS Color Module Level 3 specification](https://www.w3.org/TR/css-color-3/#hsl-color), such as `hsl(257, 50%, 80%)` or `hsla(257, 50%, 80%, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping S and L channel values to the interval [0, 100].\n\n# *color*.formatRgb() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a string representing this color according to the [CSS Object Model specification](https://drafts.csswg.org/cssom/#serialize-a-css-component-value), such as `rgb(247, 234, 186)` or `rgba(247, 234, 186, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping RGB channel values to the interval [0, 255].\n\n# *color*.toString() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nAn alias for [*color*.formatRgb](#color_formatRgb).\n\n# d3.rgb(r, g, b[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")
\n# d3.rgb(specifier)
\n# d3.rgb(color)
\n\nConstructs a new [RGB](https://en.wikipedia.org/wiki/RGB_color_model) color. The channel values are exposed as `r`, `g` and `b` properties on the returned instance. Use the [RGB color picker](http://bl.ocks.org/mbostock/78d64ca7ef013b4dcf8f) to explore this color space.\n\nIf *r*, *g* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the RGB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb). Note that unlike [*color*.rgb](#color_rgb) this method *always* returns a new instance, even if *color* is already an RGB color.\n\n# d3.hsl(h, s, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")
\n# d3.hsl(specifier)
\n# d3.hsl(color)
\n\nConstructs a new [HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [HSL color picker](http://bl.ocks.org/mbostock/debaad4fcce9bcee14cf) to explore this color space.\n\nIf *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the HSL color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to HSL. (Colors already in the HSL color space skip the conversion to RGB.)\n\n# d3.lab(l, a, b[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.lab(specifier)
\n# d3.lab(color)
\n\nConstructs a new [CIELAB](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) color. The channel values are exposed as `l`, `a` and `b` properties on the returned instance. Use the [CIELAB color picker](http://bl.ocks.org/mbostock/9f37cc207c0cb166921b) to explore this color space. The value of *l* is typically in the range [0, 100], while *a* and *b* are typically in [-160, +160].\n\nIf *l*, *a* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the CIELAB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELAB. (Colors already in the CIELAB color space skip the conversion to RGB, and colors in the HCL color space are converted directly to CIELAB.)\n\n# d3.gray(l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n\nConstructs a new [CIELAB](#lab) color with the specified *l* value and *a* = *b* = 0.\n\n# d3.hcl(h, c, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.hcl(specifier)
\n# d3.hcl(color)
\n\nEquivalent to [d3.lch](#lch), but with reversed argument order.\n\n# d3.lch(l, c, h[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.lch(specifier)
\n# d3.lch(color)
\n\nConstructs a new [CIELChab](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) color. The channel values are exposed as `l`, `c` and `h` properties on the returned instance. Use the [CIELChab color picker](http://bl.ocks.org/mbostock/3e115519a1b495e0bd95) to explore this color space. The value of *l* is typically in the range [0, 100], *c* is typically in [0, 230], and *h* is typically in [0, 360).\n\nIf *l*, *c*, and *h* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to CIELChab color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELChab. (Colors already in CIELChab color space skip the conversion to RGB, and colors in CIELAB color space are converted directly to CIELChab.)\n\n# d3.cubehelix(h, s, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/cubehelix.js \"Source\")
\n# d3.cubehelix(specifier)
\n# d3.cubehelix(color)
\n\nConstructs a new [Cubehelix](http://www.mrao.cam.ac.uk/~dag/CUBEHELIX/) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [Cubehelix color picker](http://bl.ocks.org/mbostock/ba8d75e45794c27168b5) to explore this color space.\n\nIf *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the Cubehelix color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to Cubehelix. (Colors already in the Cubehelix color space skip the conversion to RGB.)\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-color", "error": "[Circular]", "extraneous": false }, "d3-contour": { "_from": "d3-contour@1", "_id": "d3-contour@1.3.2", "_inBundle": false, "_integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", "_location": "/d3-contour", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-contour@1", "name": "d3-contour", "escapedName": "d3-contour", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", "_shasum": "652aacd500d2264cb3423cee10db69f6f59bead3", "_spec": "d3-contour@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-contour/issues" }, "dependencies": { "d3-array": { "_from": "d3-array@1", "_id": "d3-array@1.2.4", "_inBundle": false, "_integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", "_location": "/d3-array", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "_shasum": "635ce4d5eea759f6f605863dbcfc30edc737f71f", "_spec": "d3-array@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Array manipulation, ordering, searching, summarizing, etc.", "devDependencies": "[Circular]", "homepage": "https://d3js.org/d3-array/", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-array.js", "module": "src/index.js", "name": "d3-array", "repository": "[Circular]", "scripts": "[Circular]", "unpkg": "dist/d3-array.min.js", "version": "1.2.4", "readme": "# d3-array\n\nData in JavaScript is often represented by an array, and so one tends to manipulate arrays when visualizing or analyzing data. Some common forms of manipulation include taking a contiguous slice (subset) of an array, filtering an array using a predicate function, and mapping an array to a parallel set of values using a transform function. Before looking at the set of utilities that this module provides, familiarize yourself with the powerful [array methods built-in to JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype).\n\nJavaScript includes **mutation methods** that modify the array:\n\n* [*array*.pop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop) - Remove the last element from the array.\n* [*array*.push](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) - Add one or more elements to the end of the array.\n* [*array*.reverse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse) - Reverse the order of the elements of the array.\n* [*array*.shift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift) - Remove the first element from the array.\n* [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) - Sort the elements of the array.\n* [*array*.splice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) - Add or remove elements from the array.\n* [*array*.unshift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift) - Add one or more elements to the front of the array.\n\nThere are also **access methods** that return some representation of the array:\n\n* [*array*.concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) - Join the array with other array(s) or value(s).\n* [*array*.join](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join) - Join all elements of the array into a string.\n* [*array*.slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) - Extract a section of the array.\n* [*array*.indexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) - Find the first occurrence of a value within the array.\n* [*array*.lastIndexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - Find the last occurrence of a value within the array.\n\nAnd finally **iteration methods** that apply functions to elements in the array:\n\n* [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) - Create a new array with only the elements for which a predicate is true.\n* [*array*.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) - Call a function for each element in the array.\n* [*array*.every](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every) - See if every element in the array satisfies a predicate.\n* [*array*.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) - Create a new array with the result of calling a function on every element in the array.\n* [*array*.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some) - See if at least one element in the array satisfies a predicate.\n* [*array*.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) - Apply a function to reduce the array to a single value (from left-to-right).\n* [*array*.reduceRight](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight) - Apply a function to reduce the array to a single value (from right-to-left).\n\n## Installing\n\nIf you use NPM, `npm install d3-array`. Otherwise, download the [latest release](https://github.com/d3/d3-array/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-array.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-array in your browser.](https://tonicdev.com/npm/d3-array)\n\n## API Reference\n\n* [Statistics](#statistics)\n* [Search](#search)\n* [Transformations](#transformations)\n* [Histograms](#histograms)\n* [Histogram Thresholds](#histogram-thresholds)\n\n### Statistics\n\nMethods for computing basic summary statistics.\n\n# d3.min(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/min.js \"Source\")\n\nReturns the minimum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the minimum value.\n\nUnlike the built-in [Math.min](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/min), this method ignores undefined, null and NaN values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the minimum of the strings [“20”, “3”] is “20”, while the minimum of the numbers [20, 3] is 3.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.max(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/max.js \"Source\")\n\nReturns the maximum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the maximum value.\n\nUnlike the built-in [Math.max](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/max), this method ignores undefined values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the maximum of the strings [“20”, “3”] is “3”, while the maximum of the numbers [20, 3] is 20.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.extent(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/extent.js \"Source\")\n\nReturns the [minimum](#min) and [maximum](#max) value in the given *array* using natural order. If the array is empty, returns [undefined, undefined]. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the extent.\n\n# d3.sum(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/sum.js \"Source\")\n\nReturns the sum of the given *array* of numbers. If the array is empty, returns 0. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the sum. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.mean(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/mean.js \"Source\")\n\nReturns the mean of the given *array* of numbers. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the mean. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.median(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/median.js \"Source\")\n\nReturns the median of the given *array* of numbers using the [R-7 method](https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample). If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the median. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.quantile(array, p[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/quantile.js \"Source\")\n\nReturns the *p*-quantile of the given **sorted** *array* of numbers, where *p* is a number in the range [0, 1]. For example, the median can be computed using *p* = 0.5, the first quartile at *p* = 0.25, and the third quartile at *p* = 0.75. This particular implementation uses the [R-7 method](http://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population), which is the default for the R programming language and Excel. For example:\n\n```js\nvar a = [0, 10, 30];\nd3.quantile(a, 0); // 0\nd3.quantile(a, 0.5); // 10\nd3.quantile(a, 1); // 30\nd3.quantile(a, 0.25); // 5\nd3.quantile(a, 0.75); // 20\nd3.quantile(a, 0.1); // 2\n```\n\nAn optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the quantile.\n\n# d3.variance(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/variance.js \"Source\")\n\nReturns an [unbiased estimator of the population variance](http://mathworld.wolfram.com/SampleVariance.html) of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the variance. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.deviation(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/deviation.js \"Source\")\n\nReturns the standard deviation, defined as the square root of the [bias-corrected variance](#variance), of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the standard deviation. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n### Search\n\nMethods for searching arrays for a specific element.\n\n# d3.scan(array[, comparator]) [<>](https://github.com/d3/d3-array/blob/master/src/scan.js \"Source\")\n\nPerforms a linear scan of the specified *array*, returning the index of the least element according to the specified *comparator*. If the given *array* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns undefined. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:\n\n```js\nvar array = [{foo: 42}, {foo: 91}];\nd3.scan(array, function(a, b) { return a.foo - b.foo; }); // 0\nd3.scan(array, function(a, b) { return b.foo - a.foo; }); // 1\n```\n\nThis function is similar to [min](#min), except it allows the use of a comparator rather than an accessor and it returns the index instead of the accessed value. See also [bisect](#bisect).\n\n# d3.bisectLeft(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nReturns the insertion point for *x* in *array* to maintain sorted order. The arguments *lo* and *hi* may be used to specify a subset of the array which should be considered; by default the entire array is used. If *x* is already present in *array*, the insertion point will be before (to the left of) any existing entries. The return value is suitable for use as the first argument to [splice](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice) assuming that *array* is already sorted. The returned insertion point *i* partitions the *array* into two halves so that all *v* < *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* >= *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisect(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js \"Source\")
\n# d3.bisectRight(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nSimilar to [bisectLeft](#bisectLeft), but returns an insertion point which comes after (to the right of) any existing entries of *x* in *array*. The returned insertion point *i* partitions the *array* into two halves so that all *v* <= *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* > *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisector(accessor) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n
# d3.bisector(comparator) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n\nReturns a new bisector using the specified *accessor* or *comparator* function. This method can be used to bisect arrays of objects instead of being limited to simple arrays of primitives. For example, given the following array of objects:\n\n```js\nvar data = [\n {date: new Date(2011, 1, 1), value: 0.5},\n {date: new Date(2011, 2, 1), value: 0.6},\n {date: new Date(2011, 3, 1), value: 0.7},\n {date: new Date(2011, 4, 1), value: 0.8}\n];\n```\n\nA suitable bisect function could be constructed as:\n\n```js\nvar bisectDate = d3.bisector(function(d) { return d.date; }).right;\n```\n\nThis is equivalent to specifying a comparator:\n\n```js\nvar bisectDate = d3.bisector(function(d, x) { return d.date - x; }).right;\n```\n\nAnd then applied as *bisectDate*(*array*, *date*), returning an index. Note that the comparator is always passed the search value *x* as the second argument. Use a comparator rather than an accessor if you want values to be sorted in an order different than natural order, such as in descending rather than ascending order.\n\n# bisector.left(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L6 \"Source\")\n\nEquivalent to [bisectLeft](#bisectLeft), but uses this bisector’s associated comparator.\n\n# bisector.right(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L16 \"Source\")\n\nEquivalent to [bisectRight](#bisectRight), but uses this bisector’s associated comparator.\n\n# d3.ascending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/ascending.js \"Source\")\n\nReturns -1 if *a* is less than *b*, or 1 if *a* is greater than *b*, or 0. This is the comparator function for natural order, and can be used in conjunction with the built-in [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) method to arrange elements in ascending order. It is implemented as:\n\n```js\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n# d3.descending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/descending.js \"Source\")\n\nReturns -1 if *a* is greater than *b*, or 1 if *a* is less than *b*, or 0. This is the comparator function for reverse natural order, and can be used in conjunction with the built-in array sort method to arrange elements in descending order. It is implemented as:\n\n```js\nfunction descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n### Transformations\n\nMethods for transforming arrays and for generating new arrays.\n\n# d3.cross(a, b[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/cross.js \"Source\")\n\nReturns the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) of the two arrays *a* and *b*. For each element *i* in the specified array *a* and each element *j* in the specified array *b*, in order, invokes the specified *reducer* function passing the element *i* and element *j*. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.cross([1, 2], [\"x\", \"y\"]); // returns [[1, \"x\"], [1, \"y\"], [2, \"x\"], [2, \"y\"]]\nd3.cross([1, 2], [\"x\", \"y\"], (a, b) => a + b); // returns [\"1x\", \"1y\", \"2x\", \"2y\"]\n```\n\n# d3.merge(arrays) [<>](https://github.com/d3/d3-array/blob/master/src/merge.js \"Source\")\n\nMerges the specified *arrays* into a single array. This method is similar to the built-in array concat method; the only difference is that it is more convenient when you have an array of arrays.\n\n```js\nd3.merge([[1], [2, 3]]); // returns [1, 2, 3]\n```\n\n# d3.pairs(array[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/pairs.js \"Source\")\n\nFor each adjacent pair of elements in the specified *array*, in order, invokes the specified *reducer* function passing the element *i* and element *i* - 1. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.pairs([1, 2, 3, 4]); // returns [[1, 2], [2, 3], [3, 4]]\nd3.pairs([1, 2, 3, 4], (a, b) => b - a); // returns [1, 1, 1];\n```\n\nIf the specified array has fewer than two elements, returns the empty array.\n\n# d3.permute(array, indexes) [<>](https://github.com/d3/d3-array/blob/master/src/permute.js \"Source\")\n\nReturns a permutation of the specified *array* using the specified array of *indexes*. The returned array contains the corresponding element in array for each index in indexes, in order. For example, permute([\"a\", \"b\", \"c\"], [1, 2, 0])\nreturns [\"b\", \"c\", \"a\"]. It is acceptable for the array of indexes to be a different length from the array of elements, and for indexes to be duplicated or omitted.\n\nThis method can also be used to extract the values from an object into an array with a stable order. Extracting keyed values in order can be useful for generating data arrays in nested selections. For example:\n\n```js\nvar object = {yield: 27, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n fields = [\"site\", \"variety\", \"yield\"];\n\nd3.permute(object, fields); // returns [\"University Farm\", \"Manchuria\", 27]\n```\n\n# d3.shuffle(array[, start[, stop]]) [<>](https://github.com/d3/d3-array/blob/master/src/shuffle.js \"Source\")\n\nRandomizes the order of the specified *array* in-place using the [Fisher–Yates shuffle](https://bost.ocks.org/mike/shuffle/) and returns the *array*. If *start* is specified, it is the starting index (inclusive) of the *array* to shuffle; if *start* is not specified, it defaults to zero. If *stop* is specified, it is the ending index (exclusive) of the *array* to shuffle; if *stop* is not specified, it defaults to *array*.length. For example, to shuffle the first ten elements of the *array*: shuffle(*array*, 0, 10).\n\n# d3.ticks(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js \"Source\")\n\nReturns an array of approximately *count* + 1 uniformly-spaced, nicely-rounded values between *start* and *stop* (inclusive). Each value is a power of ten multiplied by 1, 2 or 5. See also [d3.tickIncrement](#tickIncrement), [d3.tickStep](#tickStep) and [*linear*.ticks](https://github.com/d3/d3-scale/blob/master/README.md#linear_ticks).\n\nTicks are inclusive in the sense that they may include the specified *start* and *stop* values if (and only if) they are exact, nicely-rounded values consistent with the inferred [step](#tickStep). More formally, each returned tick *t* satisfies *start* ≤ *t* and *t* ≤ *stop*.\n\n# d3.tickIncrement(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nLike [d3.tickStep](#tickStep), except requires that *start* is always less than or equal to *step*, and if the tick step for the given *start*, *stop* and *count* would be less than one, returns the negative inverse tick step instead. This method is always guaranteed to return an integer, and is used by [d3.ticks](#ticks) to avoid guarantee that the returned tick values are represented as precisely as possible in IEEE 754 floating point.\n\n# d3.tickStep(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nReturns the difference between adjacent tick values if the same arguments were passed to [d3.ticks](#ticks): a nicely-rounded value that is a power of ten multiplied by 1, 2 or 5. Note that due to the limited precision of IEEE 754 floating point, the returned value may not be exact decimals; use [d3-format](https://github.com/d3/d3-format) to format numbers for human consumption.\n\n# d3.range([start, ]stop[, step]) [<>](https://github.com/d3/d3-array/blob/master/src/range.js \"Source\")\n\nReturns an array containing an arithmetic progression, similar to the Python built-in [range](http://docs.python.org/library/functions.html#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.ticks](#ticks) for nicely-rounded values.)\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\nd3.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; see also [linear.tickFormat](https://github.com/d3/d3-scale/blob/master/README.md#linear_tickFormat) in [d3-scale](https://github.com/d3/d3-scale).\n\nLikewise, if the returned array should have a specific length, consider using [array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) on an integer range. For example:\n\n```js\nd3.range(0, 1, 1 / 49); // BAD: returns 50 elements!\nd3.range(49).map(function(d) { return d / 49; }); // GOOD: returns 49 elements.\n```\n\n# d3.transpose(matrix) [<>](https://github.com/d3/d3-array/blob/master/src/transpose.js \"Source\")\n\nUses the [zip](#zip) operator as a two-dimensional [matrix transpose](http://en.wikipedia.org/wiki/Transpose).\n\n# d3.zip(arrays…) [<>](https://github.com/d3/d3-array/blob/master/src/zip.js \"Source\")\n\nReturns an array of arrays, where the *i*th array contains the *i*th element from each of the argument *arrays*. The returned array is truncated in length to the shortest array in *arrays*. If *arrays* contains only a single array, the returned array contains one-element arrays. With no arguments, the returned array is empty.\n\n```js\nd3.zip([1, 2], [3, 4]); // returns [[1, 3], [2, 4]]\n```\n\n### Histograms\n\n[\"Histogram\"](http://bl.ocks.org/mbostock/3048450)\n\nHistograms bin many discrete samples into a smaller number of consecutive, non-overlapping intervals. They are often used to visualize the distribution of numerical data.\n\n# d3.histogram() [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js \"Source\")\n\nConstructs a new histogram generator with the default settings.\n\n# histogram(data) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L14 \"Source\")\n\nComputes the histogram for the given array of *data* samples. Returns an array of bins, where each bin is an array containing the associated elements from the input *data*. Thus, the `length` of the bin is the number of elements in that bin. Each bin has two additional attributes:\n\n* `x0` - the lower bound of the bin (inclusive).\n* `x1` - the upper bound of the bin (exclusive, except for the last bin).\n\n# histogram.value([value]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L58 \"Source\")\n\nIf *value* is specified, sets the value accessor to the specified function or constant and returns this histogram generator. If *value* is not specified, returns the current value accessor, which defaults to the identity function.\n\nWhen a histogram is [generated](#_histogram), the value accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default value accessor assumes that the input data are orderable (comparable), such as numbers or dates. If your data are not, then you should specify an accessor that returns the corresponding orderable value for a given datum.\n\nThis is similar to mapping your data to values before invoking the histogram generator, but has the benefit that the input data remains associated with the returned bins, thereby making it easier to access other fields of the data.\n\n# histogram.domain([domain]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L62 \"Source\")\n\nIf *domain* is specified, sets the domain accessor to the specified function or array and returns this histogram generator. If *domain* is not specified, returns the current domain accessor, which defaults to [extent](#extent). The histogram domain is defined as an array [*min*, *max*], where *min* is the minimum observable value and *max* is the maximum observable value; both values are inclusive. Any value outside of this domain will be ignored when the histogram is [generated](#_histogram).\n\nFor example, if you are using the the histogram in conjunction with a [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales) `x`, you might say:\n\n```js\nvar histogram = d3.histogram()\n .domain(x.domain())\n .thresholds(x.ticks(20));\n```\n\nYou can then compute the bins from an array of numbers like so:\n\n```js\nvar bins = histogram(numbers);\n```\n\nNote that the domain accessor is invoked on the materialized array of [values](#histogram_value), not on the input data array.\n\n# histogram.thresholds([count]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n
# histogram.thresholds([thresholds]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n\nIf *thresholds* is specified, sets the [threshold generator](#histogram-thresholds) to the specified function or array and returns this histogram generator. If *thresholds* is not specified, returns the current threshold generator, which by default implements [Sturges’ formula](#thresholdSturges). (Thus by default, the histogram values must be numbers!) Thresholds are defined as an array of values [*x0*, *x1*, …]. Any value less than *x0* will be placed in the first bin; any value greater than or equal to *x0* but less than *x1* will be placed in the second bin; and so on. Thus, the [generated histogram](#_histogram) will have *thresholds*.length + 1 bins. See [histogram thresholds](#histogram-thresholds) for more information.\n\nAny threshold values outside the [domain](#histogram_domain) are ignored. The first *bin*.x0 is always equal to the minimum domain value, and the last *bin*.x1 is always equal to the maximum domain value.\n\nIf a *count* is specified instead of an array of *thresholds*, then the [domain](#histogram_domain) will be uniformly divided into approximately *count* bins; see [ticks](#ticks).\n\n### Histogram Thresholds\n\nThese functions are typically not used directly; instead, pass them to [*histogram*.thresholds](#histogram_thresholds). You may also implement your own threshold generator taking three arguments: the array of input [*values*](#histogram_value) derived from the data, and the [observable domain](#histogram_domain) represented as *min* and *max*. The generator may then return either the array of numeric thresholds or the *count* of bins; in the latter case the domain is divided uniformly into approximately *count* bins; see [ticks](#ticks).\n\n# d3.thresholdFreedmanDiaconis(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/freedmanDiaconis.js \"Source\")\n\nReturns the number of bins according to the [Freedman–Diaconis rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdScott(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/scott.js \"Source\")\n\nReturns the number of bins according to [Scott’s normal reference rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdSturges(values) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/sturges.js \"Source\")\n\nReturns the number of bins according to [Sturges’ formula](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-array", "error": "[Circular]", "extraneous": false, "_deduped": "d3-array" } }, "deprecated": false, "description": "Compute contour polygons using marching squares.", "devDependencies": { "eslint": "5", "rollup": "0.64", "rollup-plugin-terser": "1", "tape": "4" }, "homepage": "https://d3js.org/d3-contour/", "jsdelivr": "dist/d3-contour.min.js", "keywords": [ "d3", "d3-module", "contour", "isoline" ], "license": "BSD-3-Clause", "main": "dist/d3-contour.js", "module": "src/index.js", "name": "d3-contour", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-contour.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "unpkg": "dist/d3-contour.min.js", "version": "1.3.2", "readme": "# d3-contour\n\nThis library computes contour polygons by applying [marching squares](https://en.wikipedia.org/wiki/Marching_squares) to a rectangular array of numeric values. For example, here is Maungawhau’s topology (the classic `volcano` dataset and `terrain.colors` from R):\n\n[\"Contour](https://bl.ocks.org/mbostock/4241134)\n\nFor each [threshold value](#contours_thresholds), the [contour generator](#_contours) constructs a GeoJSON MultiPolygon geometry object representing the area where the input values are greater than or equal to the threshold value. The geometry is in planar coordinates, where ⟨i + 0.5, j + 0.5⟩ corresponds to element i + jn in the input values array. Here is an example that loads a GeoTIFF of surface temperatures, and another that blurs a noisy monochrome PNG to produce smooth contours of cloud fraction:\n\n[\"GeoTiff](https://bl.ocks.org/mbostock/4886c227038510f1c103ce305bef6fcc)\n[\"Cloud](https://bl.ocks.org/mbostock/818053c76d79d4841790c332656bf9da)\n\nSince the contour polygons are GeoJSON, you can transform and display them using standard tools; see [d3.geoPath](https://github.com/d3/d3-geo/blob/master/README.md#geoPath), [d3.geoProject](https://github.com/d3/d3-geo-projection/blob/master/README.md#geoProject) and [d3.geoStitch](https://github.com/d3/d3-geo-projection/blob/master/README.md#geoStitch), for example. Here the above contours of surface temperature are displayed in the Natural Earth projection:\n\n[\"GeoTiff](https://bl.ocks.org/mbostock/83c0be21dba7602ee14982b020b12f51)\n\nContour plots can also visualize continuous functions by sampling. Here is the Goldstein–Price function (a test function for global optimization) and a trippy animation of *sin*(*x* + *y*)*sin*(*x* - *y*):\n\n[\"Contour](https://bl.ocks.org/mbostock/f48ff9c1af4d637c9a518727f5fdfef5)\n[\"Contour](https://bl.ocks.org/mbostock/bf2f5f02b62b5b3bb92ae1b59b53da36)\n\nContours can also show the [estimated density](#density-estimation) of point clouds, which is especially useful to avoid overplotting in large datasets. This library implements fast two-dimensional kernel density estimation; see [d3.contourDensity](#contourDensity). Here is a scatterplot showing the relationship between the idle duration and eruption duration for Old Faithful:\n\n[\"Density](https://bl.ocks.org/mbostock/e3f4376d54e02d5d43ae32a7cf0e6aa9)\n\nAnd here is a density contour plot showing the relationship between the weight and price of 53,940 diamonds:\n\n[\"Density](https://bl.ocks.org/mbostock/7f5f22524bd1d824dd53c535eda0187f)\n\n## Installing\n\nIf you use NPM, `npm install d3-contour`. Otherwise, download the [latest release](https://github.com/d3/d3-contour/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-contour.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-contour in your browser.](https://tonicdev.com/npm/d3-contour)\n\n## API Reference\n\n# d3.contours() [<>](https://github.com/d3/d3-contour/blob/master/src/contours.js \"Source\")\n\nConstructs a new contour generator with the default settings.\n\n# contours(values) [<>](https://github.com/d3/d3-contour/blob/master/src/contours.js \"Source\")\n\nComputes the contours for the given array of *values*, returning an array of [GeoJSON](http://geojson.org/geojson-spec.html) [MultiPolygon](http://geojson.org/geojson-spec.html#multipolygon) [geometry objects](http://geojson.org/geojson-spec.html#geometry-objects). Each geometry object represents the area where the input values are greater than or equal to the corresponding [threshold value](#contours_thresholds); the threshold value for each geometry object is exposed as geometry.value.\n\nThe input *values* must be an array of length n×m where [n, m] is the contour generator’s [size](#contours_size); furthermore, each values[i + jn] must represent the value at the position ⟨i, j⟩. For example, to construct a 256×256 grid for the [Goldstein–Price function](https://en.wikipedia.org/wiki/Test_functions_for_optimization) where -2 ≤ x ≤ 2 and -2 ≤ y ≤ 1:\n\n```js\nvar n = 256, m = 256, values = new Array(n * m);\nfor (var j = 0.5, k = 0; j < m; ++j) {\n for (var i = 0.5; i < n; ++i, ++k) {\n values[k] = goldsteinPrice(i / n * 4 - 2, 1 - j / m * 3);\n }\n}\n\nfunction goldsteinPrice(x, y) {\n return (1 + Math.pow(x + y + 1, 2) * (19 - 14 * x + 3 * x * x - 14 * y + 6 * x * x + 3 * y * y))\n * (30 + Math.pow(2 * x - 3 * y, 2) * (18 - 32 * x + 12 * x * x + 48 * y - 36 * x * y + 27 * y * y));\n}\n```\n\nThe returned geometry objects are typically passed to [d3.geoPath](https://github.com/d3/d3-geo/blob/master/README.md#geoPath) to display, using null or [d3.geoIdentity](https://github.com/d3/d3-geo/blob/master/README.md#geoIdentity) as the associated projection.\n\n# contours.contour(values, threshold) [<>](https://github.com/d3/d3-contour/blob/master/src/contours.js \"Source\")\n\nComputes a single contour, returning a [GeoJSON](http://geojson.org/geojson-spec.html) [MultiPolygon](http://geojson.org/geojson-spec.html#multipolygon) [geometry object](http://geojson.org/geojson-spec.html#geometry-objects) representing the area where the input values are greater than or equal to the given [*threshold* value](#contours_thresholds); the threshold value for each geometry object is exposed as geometry.value.\n\nThe input *values* must be an array of length n×m where [n, m] is the contour generator’s [size](#contours_size); furthermore, each values[i + jn] must represent the value at the position ⟨i, j⟩. See [*contours*](#_contours) for an example.\n\n# contours.size([size]) [<>](https://github.com/d3/d3-contour/blob/master/src/contours.js \"Source\")\n\nIf *size* is specified, sets the expected size of the input *values* grid to the [contour generator](#_contour) and returns the contour generator. The *size* is specified as an array \\[n, m\\] where n is the number of columns in the grid and m is the number of rows; *n* and *m* must be positive integers. If *size* is not specified, returns the current size which defaults to [1, 1].\n\n# contours.smooth([smooth]) [<>](https://github.com/d3/d3-contour/blob/master/src/contours.js \"Source\")\n\nIf *smooth* is specified, sets whether or not the generated contour polygons are smoothed using linear interpolation. If *smooth* is not specified, returns the current smoothing flag, which defaults to true.\n\n# contours.thresholds([thresholds]) [<>](https://github.com/d3/d3-contour/blob/master/src/contours.js \"Source\")\n\nIf *thresholds* is specified, sets the threshold generator to the specified function or array and returns this contour generator. If *thresholds* is not specified, returns the current threshold generator, which by default implements [Sturges’ formula](https://github.com/d3/d3-array/blob/master/README.md#thresholdSturges).\n\nThresholds are defined as an array of values [*x0*, *x1*, …]. The first [generated contour](#_contour) corresponds to the area where the input values are greater than or equal to *x0*; the second contour corresponds to the area where the input values are greater than or equal to *x1*, and so on. Thus, there is exactly one generated MultiPolygon geometry object for each specified threshold value; the threshold value is exposed as geometry.value.\n\nIf a *count* is specified instead of an array of *thresholds*, then the input values’ [extent](https://github.com/d3/d3-array/blob/master/README.md#extent) will be uniformly divided into approximately *count* bins; see [d3.ticks](https://github.com/d3/d3-array/blob/master/README.md#ticks).\n\n## Density Estimation\n\n# d3.contourDensity() [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nConstructs a new density estimator with the default settings.\n\n# density(data) [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nEstimates the density contours for the given array of *data*, returning an array of [GeoJSON](http://geojson.org/geojson-spec.html) [MultiPolygon](http://geojson.org/geojson-spec.html#multipolygon) [geometry objects](http://geojson.org/geojson-spec.html#geometry-objects). Each geometry object represents the area where the estimated number of points per square pixel is greater than or equal to the corresponding [threshold value](#density_thresholds); the threshold value for each geometry object is exposed as geometry.value. The returned geometry objects are typically passed to [d3.geoPath](https://github.com/d3/d3-geo/blob/master/README.md#geoPath) to display, using null or [d3.geoIdentity](https://github.com/d3/d3-geo/blob/master/README.md#geoIdentity) as the associated projection. See also [d3.contours](#contours).\n\nThe *x*- and *y*-coordinate for each data point are computed using [*density*.x](#density_x) and [*density*.y](#density_y). In addition, [*density*.weight](#density_weight) indicates the relative contribution of each data point (default 1). The generated contours are only accurate within the estimator’s [defined size](#density_size).\n\n# density.x([x]) [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nIf *x* is specified, sets the *x*-coordinate accessor. If *x* is not specified, returns the current *x*-coordinate accessor, which defaults to:\n\n```js\nfunction x(d) {\n return d[0];\n}\n```\n\n# density.y([y]) [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nIf *y* is specified, sets the *y*-coordinate accessor. If *y* is not specified, returns the current *y*-coordinate accessor, which defaults to:\n\n```js\nfunction y(d) {\n return d[1];\n}\n```\n\n# density.weight([weight]) [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nIf *weight* is specified, sets the accessor for point weights. If *weight* is not specified, returns the current point weight accessor, which defaults to:\n\n```js\nfunction weight() {\n return 1;\n}\n```\n\n# density.size([size]) [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nIf *size* is specified, sets the size of the density estimator to the specified bounds and returns the estimator. The *size* is specified as an array \\[width, height\\], where width is the maximum *x*-value and height is the maximum *y*-value. If *size* is not specified, returns the current size which defaults to [960, 500]. The [estimated density contours](#_density) are only accurate within the defined size.\n\n# density.cellSize([cellSize]) [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nIf *cellSize* is specified, sets the size of individual cells in the underlying bin grid to the specified positive integer and returns the estimator. If *cellSize* is not specified, returns the current cell size, which defaults to 4. The cell size is rounded down to the nearest power of two. Smaller cells produce more detailed contour polygons, but are more expensive to compute.\n\n# density.thresholds([thresholds]) [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nIf *thresholds* is specified, sets the threshold generator to the specified function or array and returns this contour generator. If *thresholds* is not specified, returns the current threshold generator, which by default generates about twenty nicely-rounded density thresholds.\n\nThresholds are defined as an array of values [*x0*, *x1*, …]. The first [generated density contour](#_density) corresponds to the area where the estimated density is greater than or equal to *x0*; the second contour corresponds to the area where the estimated density is greater than or equal to *x1*, and so on. Thus, there is exactly one generated MultiPolygon geometry object for each specified threshold value; the threshold value is exposed as geometry.value. The first value *x0* should typically be greater than zero.\n\nIf a *count* is specified instead of an array of *thresholds*, then approximately *count* uniformly-spaced nicely-rounded thresholds will be generated; see [d3.ticks](https://github.com/d3/d3-array/blob/master/README.md#ticks).\n\n# density.bandwidth([bandwidth]) [<>](https://github.com/d3/d3-contour/blob/master/src/density.js \"Source\")\n\nIf *bandwidth* is specified, sets the bandwidth (the standard deviation) of the Gaussian kernel and returns the estimate. If *bandwidth* is not specified, returns the current bandwidth, which defaults to 20.4939…. The specified *bandwidth* is currently rounded to the nearest supported value by this implementation, and must be nonnegative.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-array": "^1.1.1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-contour", "error": "[Circular]", "extraneous": false }, "d3-dispatch": { "_from": "d3-dispatch@1", "_id": "d3-dispatch@1.0.6", "_inBundle": false, "_integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", "_location": "/d3-dispatch", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", "_shasum": "00d37bcee4dd8cd97729dd893a0ac29caaba5d58", "_spec": "d3-dispatch@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Register named callbacks and call them with arguments.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-dispatch/", "jsdelivr": "dist/d3-dispatch.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-dispatch.js", "module": "src/index.js", "name": "d3-dispatch", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-dispatch.min.js", "version": "1.0.6", "readme": "# d3-dispatch\n\nDispatching is a convenient mechanism for separating concerns with loosely-coupled code: register named callbacks and then call them with arbitrary arguments. A variety of D3 components, such as [d3-request](https://github.com/d3/d3-request), use this mechanism to emit events to listeners. Think of this like Node’s [EventEmitter](https://nodejs.org/api/events.html), except every listener has a well-defined name so it’s easy to remove or replace them.\n\nFor example, to create a dispatch for *start* and *end* events:\n\n```js\nvar dispatch = d3.dispatch(\"start\", \"end\");\n```\n\nYou can then register callbacks for these events using [*dispatch*.on](#dispatch_on):\n\n```js\ndispatch.on(\"start\", callback1);\ndispatch.on(\"start.foo\", callback2);\ndispatch.on(\"end\", callback3);\n```\n\nThen, you can invoke all the *start* callbacks using [*dispatch*.call](#dispatch_call) or [*dispatch*.apply](#dispatch_apply):\n\n```js\ndispatch.call(\"start\");\n```\n\nLike *function*.call, you may also specify the `this` context and any arguments:\n\n```js\ndispatch.call(\"start\", {about: \"I am a context object\"}, \"I am an argument\");\n```\n\nWant a more involved example? See how to use [d3-dispatch for coordinated views](http://bl.ocks.org/mbostock/5872848).\n\n## Installing\n\nIf you use NPM, `npm install d3-dispatch`. Otherwise, download the [latest release](https://github.com/d3/d3-dispatch/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-dispatch.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-dispatch in your browser.](https://tonicdev.com/npm/d3-dispatch)\n\n## API Reference\n\n# d3.dispatch(types…) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js \"Source\")\n\nCreates a new dispatch for the specified event *types*. Each *type* is a string, such as `\"start\"` or `\"end\"`.\n\n# *dispatch*.on(typenames[, callback]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L26 \"Source\")\n\nAdds, removes or gets the *callback* for the specified *typenames*. If a *callback* function is specified, it is registered for the specified (fully-qualified) *typenames*. If a callback was already registered for the given *typenames*, the existing callback is removed before the new callback is added.\n\nThe specified *typenames* is a string, such as `start` or `end.foo`. The 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 `start end` or `start.foo start.bar`.\n\nTo remove all callbacks for a given name `foo`, say `dispatch.on(\".foo\", null)`.\n\nIf *callback* is not specified, returns the current callback for the specified *typenames*, if any. If multiple typenames are specified, the first matching callback is returned.\n\n# *dispatch*.copy() [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L49 \"Source\")\n\nReturns a copy of this dispatch object. Changes to this dispatch do not affect the returned copy and vice versa.\n\n# *dispatch*.call(type[, that[, arguments…]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L54 \"Source\")\n\nLike [*function*.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. See [*dispatch*.apply](#dispatch_apply) for more information.\n\n# *dispatch*.apply(type[, that[, arguments]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L59 \"Source\")\n\nLike [*function*.apply](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. For example, if you wanted to dispatch your *custom* callbacks after handling a native *click* event, while preserving the current `this` context and arguments, you could say:\n\n```js\nselection.on(\"click\", function() {\n dispatch.apply(\"custom\", this, arguments);\n});\n```\n\nYou can pass whatever arguments you want to callbacks; most commonly, you might create an object that represents an event, or pass the current datum (*d*) and index (*i*). See [function.call](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call) and [function.apply](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Apply) for further information.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-dispatch", "error": "[Circular]", "extraneous": false }, "d3-drag": { "_from": "d3-drag@1", "_id": "d3-drag@1.2.5", "_inBundle": false, "_integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", "_location": "/d3-drag", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", "_shasum": "2537f451acd39d31406677b7dc77c82f7d988f70", "_spec": "d3-drag@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": { "d3-dispatch": { "_from": "d3-dispatch@1", "_id": "d3-dispatch@1.0.6", "_inBundle": false, "_integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", "_location": "/d3-dispatch", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", "_shasum": "00d37bcee4dd8cd97729dd893a0ac29caaba5d58", "_spec": "d3-dispatch@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Register named callbacks and call them with arguments.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-dispatch/", "jsdelivr": "dist/d3-dispatch.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-dispatch.js", "module": "src/index.js", "name": "d3-dispatch", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-dispatch.min.js", "version": "1.0.6", "readme": "# d3-dispatch\n\nDispatching is a convenient mechanism for separating concerns with loosely-coupled code: register named callbacks and then call them with arbitrary arguments. A variety of D3 components, such as [d3-request](https://github.com/d3/d3-request), use this mechanism to emit events to listeners. Think of this like Node’s [EventEmitter](https://nodejs.org/api/events.html), except every listener has a well-defined name so it’s easy to remove or replace them.\n\nFor example, to create a dispatch for *start* and *end* events:\n\n```js\nvar dispatch = d3.dispatch(\"start\", \"end\");\n```\n\nYou can then register callbacks for these events using [*dispatch*.on](#dispatch_on):\n\n```js\ndispatch.on(\"start\", callback1);\ndispatch.on(\"start.foo\", callback2);\ndispatch.on(\"end\", callback3);\n```\n\nThen, you can invoke all the *start* callbacks using [*dispatch*.call](#dispatch_call) or [*dispatch*.apply](#dispatch_apply):\n\n```js\ndispatch.call(\"start\");\n```\n\nLike *function*.call, you may also specify the `this` context and any arguments:\n\n```js\ndispatch.call(\"start\", {about: \"I am a context object\"}, \"I am an argument\");\n```\n\nWant a more involved example? See how to use [d3-dispatch for coordinated views](http://bl.ocks.org/mbostock/5872848).\n\n## Installing\n\nIf you use NPM, `npm install d3-dispatch`. Otherwise, download the [latest release](https://github.com/d3/d3-dispatch/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-dispatch.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-dispatch in your browser.](https://tonicdev.com/npm/d3-dispatch)\n\n## API Reference\n\n# d3.dispatch(types…) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js \"Source\")\n\nCreates a new dispatch for the specified event *types*. Each *type* is a string, such as `\"start\"` or `\"end\"`.\n\n# *dispatch*.on(typenames[, callback]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L26 \"Source\")\n\nAdds, removes or gets the *callback* for the specified *typenames*. If a *callback* function is specified, it is registered for the specified (fully-qualified) *typenames*. If a callback was already registered for the given *typenames*, the existing callback is removed before the new callback is added.\n\nThe specified *typenames* is a string, such as `start` or `end.foo`. The 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 `start end` or `start.foo start.bar`.\n\nTo remove all callbacks for a given name `foo`, say `dispatch.on(\".foo\", null)`.\n\nIf *callback* is not specified, returns the current callback for the specified *typenames*, if any. If multiple typenames are specified, the first matching callback is returned.\n\n# *dispatch*.copy() [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L49 \"Source\")\n\nReturns a copy of this dispatch object. Changes to this dispatch do not affect the returned copy and vice versa.\n\n# *dispatch*.call(type[, that[, arguments…]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L54 \"Source\")\n\nLike [*function*.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. See [*dispatch*.apply](#dispatch_apply) for more information.\n\n# *dispatch*.apply(type[, that[, arguments]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L59 \"Source\")\n\nLike [*function*.apply](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. For example, if you wanted to dispatch your *custom* callbacks after handling a native *click* event, while preserving the current `this` context and arguments, you could say:\n\n```js\nselection.on(\"click\", function() {\n dispatch.apply(\"custom\", this, arguments);\n});\n```\n\nYou can pass whatever arguments you want to callbacks; most commonly, you might create an object that represents an event, or pass the current datum (*d*) and index (*i*). See [function.call](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call) and [function.apply](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Apply) for further information.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-dispatch", "error": "[Circular]", "extraneous": false, "_deduped": "d3-dispatch" }, "d3-selection": { "_from": "d3-selection@1", "_id": "d3-selection@1.4.2", "_inBundle": false, "_integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", "_location": "/d3-selection", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", "_shasum": "dcaa49522c0dbf32d6c1858afc26b6094555bc5c", "_spec": "d3-selection@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Data-driven DOM manipulation: select elements and join them to data.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-selection/", "jsdelivr": "dist/d3-selection.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-selection.js", "module": "src/index.js", "name": "d3-selection", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-selection.min.js", "version": "1.4.2", "readme": "# d3-selection\n\nSelections allow powerful data-driven transformation of the document object model (DOM): set [attributes](#selection_attr), [styles](#selection_style), [properties](#selection_property), [HTML](#selection_html) or [text](#selection_text) content, and more. Using the [data join](#joining-data)’s [enter](#selection_enter) and [exit](#selection_enter) selections, you can also [add](#selection_append) or [remove](#selection_remove) elements to correspond to data.\n\nSelection methods typically return the current selection, or a new selection, allowing the concise application of multiple operations on a given selection via method chaining. For example, to set the class and color style of all paragraph elements in the current document:\n\n```js\nd3.selectAll(\"p\")\n .attr(\"class\", \"graf\")\n .style(\"color\", \"red\");\n```\n\nThis is equivalent to:\n\n```js\nconst p = d3.selectAll(\"p\");\np.attr(\"class\", \"graf\");\np.style(\"color\", \"red\");\n```\n\nBy convention, selection methods that return the current selection use *four* spaces of indent, while methods that return a new selection use only *two*. This helps reveal changes of context by making them stick out of the chain:\n\n```js\nd3.select(\"body\")\n .append(\"svg\")\n .attr(\"width\", 960)\n .attr(\"height\", 500)\n .append(\"g\")\n .attr(\"transform\", \"translate(20,20)\")\n .append(\"rect\")\n .attr(\"width\", 920)\n .attr(\"height\", 460);\n```\n\nSelections are immutable. All selection methods that affect which elements are selected (or their order) return a new selection rather than modifying the current selection. However, note that elements are necessarily mutable, as selections drive transformations of the document!\n\n## Installing\n\nIf you use NPM, `npm install d3-selection`. Otherwise, download the [latest release](https://github.com/d3/d3-selection/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-selection.v1.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\n\n```\n\n[Try d3-selection in your browser.](https://observablehq.com/collection/@d3/d3-selection)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Joining Data](#joining-data)\n* [Handling Events](#handling-events)\n* [Control Flow](#control-flow)\n* [Local Variables](#local-variables)\n* [Namespaces](#namespaces)\n\n### Selecting Elements\n\nSelection methods accept [W3C selector strings](http://www.w3.org/TR/selectors-api/) such as `.fancy` to select elements with the class *fancy*, or `div` to select DIV elements. Selection methods come in two forms: select and selectAll: the former selects only the first matching element, while the latter selects all matching elements in document order. The top-level selection methods, [d3.select](#select) and [d3.selectAll](#selectAll), query the entire document; the subselection methods, [*selection*.select](#selection_select) and [*selection*.selectAll](#selection_selectAll), restrict selection to descendants of the selected elements.\n\n# d3.selection() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/index.js#L38 \"Source\")\n\n[Selects](#select) the root element, `document.documentElement`. This function can also be used to test for selections (`instanceof d3.selection`) or to extend the selection prototype. For example, to add a method to check checkboxes:\n\n```js\nd3.selection.prototype.checked = function(value) {\n return arguments.length < 1\n ? this.property(\"checked\")\n : this.property(\"checked\", !!value);\n};\n```\n\nAnd then to use:\n\n```js\nd3.selectAll(\"input[type=checkbox]\").checked(true);\n```\n\n# d3.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/select.js#L3 \"Source\")\n\nSelects the first element that matches the specified *selector* string. If no elements match the *selector*, returns an empty selection. If multiple elements match the *selector*, only the first matching element (in document order) will be selected. For example, to select the first anchor element:\n\n```js\nconst anchor = d3.select(\"a\");\n```\n\nIf the *selector* is not a string, instead selects the specified node; this is useful if you already have a reference to a node, such as `this` within an event listener or a global such as `document.body`. For example, to make a clicked paragraph red:\n\n```js\nd3.selectAll(\"p\").on(\"click\", function() {\n d3.select(this).style(\"color\", \"red\");\n});\n```\n\n# d3.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js#L3 \"Source\")\n\nSelects all elements that match the specified *selector* string. The elements will be selected in document order (top-to-bottom). If no elements in the document match the *selector*, or if the *selector* is null or undefined, returns an empty selection. For example, to select all paragraphs:\n\n```js\nconst paragraph = d3.selectAll(\"p\");\n```\n\nIf the *selector* is not a string, instead selects the specified array of nodes; this is useful if you already have a reference to nodes, such as `this.childNodes` within an event listener or a global such as `document.links`. The nodes may instead be a pseudo-array such as a `NodeList` or `arguments`. For example, to color all links red:\n\n```js\nd3.selectAll(document.links).style(\"color\", \"red\");\n```\n\n# selection.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/select.js \"Source\")\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string. If no element matches the specified selector for the current element, the element at the current index will be null in the returned selection. (If the *selector* is null, every element in the returned selection will be null, resulting in an empty selection.) If the current element has associated data, this data is propagated to the corresponding selected element. If multiple elements match the selector, only the first matching element in document order is selected. For example, to select the first bold element in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").select(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an element, or null if there is no matching element. For example, to select the previous sibling of each paragraph:\n\n```js\nconst previous = d3.selectAll(\"p\").select(function() {\n return this.previousElementSibling;\n});\n```\n\nUnlike [*selection*.selectAll](#selection_selectAll), *selection*.select does not affect grouping: it preserves the existing group structure and indexes, and propagates data (if any) to selected children. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/selectAll.js \"Source\")\n\nFor each selected element, selects the descendant elements that match the specified *selector* string. The elements in the returned selection are grouped by their corresponding parent node in this selection. If no element matches the specified selector for the current element, or if the *selector* is null, the group at the current index will be empty. The selected elements do not inherit data from this selection; use [*selection*.data](#selection_data) to propagate data to children. For example, to select the bold elements in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").selectAll(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an array of elements (or a pseudo-array, such as a NodeList), or the empty array if there are no matching elements. For example, to select the previous and next siblings of each paragraph:\n\n```js\nconst sibling = d3.selectAll(\"p\").selectAll(function() {\n return [\n this.previousElementSibling,\n this.nextElementSibling\n ];\n});\n```\n\nUnlike [*selection*.select](#selection_select), *selection*.selectAll does affect grouping: each selected descendant is grouped by the parent element in the originating selection. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.filter(filter) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/filter.js \"Source\")\n\nFilters the selection, returning a new selection that contains only the elements for which the specified *filter* is true. The *filter* may be specified either as a selector string or a function. If the *filter* is 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 (*nodes*[*i*]).\n\nFor example, to filter a selection of table rows to contain only even rows:\n\n```js\nconst even = d3.selectAll(\"tr\").filter(\":nth-child(even)\");\n```\n\nThis is approximately equivalent to using [d3.selectAll](#selectAll) directly, although the indexes may be different:\n\n```js\nconst even = d3.selectAll(\"tr:nth-child(even)\");\n```\n\nSimilarly, using a function:\n\n```js\nconst even = d3.selectAll(\"tr\").filter((d, i) => i & 1);\n```\n\nOr using [*selection*.select](#selection_select) (and avoiding an arrow function, since *this* is needed to refer to the current element):\n\n```js\nconst even = d3.selectAll(\"tr\").select(function(d, i) { return i & 1 ? this : null; });\n```\n\nNote that the `:nth-child` pseudo-class is a one-based index rather than a zero-based index. Also, the above filter functions do not have precisely the same meaning as `:nth-child`; they rely on the selection index rather than the number of preceding sibling elements in the DOM.\n\nThe returned filtered selection preserves the parents of this selection, but like [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), it does not preserve indexes as some elements may be removed; use [*selection*.select](#selection_select) to preserve the index, if needed.\n\n# selection.merge(other) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/merge.js \"Source\")\n\nReturns a new selection merging this selection with the specified *other* selection. The returned selection has the same number of groups and the same parents as this selection. Any missing (null) elements in this selection are filled with the corresponding element, if present (not null), from the specified *selection*. (If the *other* selection has additional groups or parents, they are ignored.)\n\nThis method is used internally by [*selection*.join](#selection_join) to merge the [enter](#selection_enter) and [update](#selection_data) selections after [binding data](#joining-data). You can also merge explicitly, although note that since merging is based on element index, you should use operations that preserve index, such as [*selection*.select](#selection_select) instead of [*selection*.filter](#selection_filter). For example:\n\n```js\nconst odd = selection.select(function(d, i) { return i & 1 ? this : null; ));\nconst even = selection.select(function(d, i) { return i & 1 ? null : this; ));\nconst merged = odd.merge(even);\n```\n\nSee [*selection*.data](#selection_data) for more.\n\nThis method is not intended for concatenating arbitrary selections, however: if both this selection and the specified *other* selection have (non-null) elements at the same index, this selection’s element is returned in the merge and the *other* selection’s element is ignored.\n\n# d3.matcher(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/matcher.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns true if `this` element [matches](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) the specified selector. This method is used internally by [*selection*.filter](#selection_filter). For example, this:\n\n```js\nconst div = selection.filter(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.filter(d3.matcher(\"div\"));\n```\n\n(Although D3 is not a compatibility layer, this implementation does support vendor-prefixed implementations due to the recent standardization of *element*.matches.)\n\n# d3.selector(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selector.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns the first descendant of `this` element that matches the specified selector. This method is used internally by [*selection*.select](#selection_select). For example, this:\n\n```js\nconst div = selection.select(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.select(d3.selector(\"div\"));\n```\n\n# d3.selectorAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns all descendants of `this` element that match the specified selector. This method is used internally by [*selection*.selectAll](#selection_selectAll). For example, this:\n\n```js\nconst div = selection.selectAll(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.selectAll(d3.selectorAll(\"div\"));\n```\n\n# d3.window(node) [<>](https://github.com/d3/d3-selection/blob/master/src/window.js \"Source\")\n\nReturns the owner window for the specified *node*. If *node* is a node, returns the owner document’s default view; if *node* is a document, returns its default view; otherwise returns the *node*.\n\n# d3.style(node, name) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js#L32 \"Source\")\n\nReturns the value of the style property with the specified *name* for the specified *node*. If the *node* has an inline style with the specified *name*, its value is returned; otherwise, the [computed property value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value) is returned. See also [*selection*.style](#selection_style).\n\n### Modifying Elements\n\nAfter selecting elements, use the selection’s transformation methods to affect document content. For example, to set the name attribute and color style of an anchor element:\n\n```js\nd3.select(\"a\")\n .attr(\"name\", \"fred\")\n .style(\"color\", \"red\");\n```\n\nTo experiment with selections, visit [d3js.org](https://d3js.org) and open your browser’s developer console! (In Chrome, open the console with ⌥⌘J.) Select elements and then inspect the returned selection to see which elements are selected and how they are grouped. Call selection methods and see how the page content changes.\n\n# selection.attr(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/attr.js \"Source\")\n\nIf a *value* is specified, sets the attribute with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, all elements are given the same attribute value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s attribute. A null value will remove the specified attribute.\n\nIf a *value* is not specified, returns the current value of the specified attribute for the first (non-null) element in the selection. This is generally useful only if you know that the selection contains exactly one element.\n\nThe specified *name* may have a namespace prefix, such as `xlink:href` to specify the `href` attribute in the XLink namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map.\n\n# selection.classed(names[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/classed.js \"Source\")\n\nIf a *value* is specified, assigns or unassigns the specified CSS class *names* on the selected elements by setting the `class` attribute or modifying the `classList` property and returns this selection. The specified *names* is a string of space-separated class names. For example, to assign the classes `foo` and `bar` to the selected elements:\n\n```js\nselection.classed(\"foo bar\", true);\n```\n\nIf the *value* is truthy, then all elements are assigned the specified classes; otherwise, the classes are unassigned. If the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to assign or unassign classes on each element. For example, to randomly associate the class *foo* with on average half the selected elements:\n\n```js\nselection.classed(\"foo\", () => Math.random() > 0.5);\n```\n\nIf a *value* is not specified, returns true if and only if the first (non-null) selected element has the specified *classes*. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.style(name[, value[, priority]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js \"Source\")\n\nIf a *value* is specified, sets the style property with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, then all elements are given the same style property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s style property. A null value will remove the style property. An optional *priority* may also be specified, either as null or the string `important` (without the exclamation point).\n\nIf a *value* is not specified, returns the current value of the specified style property for the first (non-null) element in the selection. The current value is defined as the element’s inline value, if present, and otherwise its [computed value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value). Accessing the current style value is generally useful only if you know the selection contains exactly one element.\n\nCaution: unlike many SVG attributes, CSS styles typically have associated units. For example, `3px` is a valid stroke-width property value, while `3` is not. Some browsers implicitly assign the `px` (pixel) unit to numeric values, but not all browsers do: IE, for example, throws an “invalid arguments” error!\n\n# selection.property(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/property.js \"Source\")\n\nSome HTML elements have special properties that are not addressable using attributes or styles, such as a form field’s text `value` and a checkbox’s `checked` boolean. Use this method to get or set these properties.\n\nIf a *value* is specified, sets the property with the specified *name* to the specified value on selected elements. If the *value* is a constant, then all elements are given the same property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s property. A null value will delete the specified property.\n\nIf a *value* is not specified, returns the value of the specified property for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.text([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/text.js \"Source\")\n\nIf a *value* is specified, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same text content; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nIf a *value* is not specified, returns the text content for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.html([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/html.js \"Source\")\n\nIf a *value* is specified, sets the [inner HTML](http://dev.w3.org/html5/spec-LC/apis-in-html-documents.html#innerhtml) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same inner HTML; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s inner HTML. A null value will clear the content.\n\nIf a *value* is not specified, returns the inner HTML for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nUse [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) instead to create data-driven content; this method is intended for when you want a little bit of HTML, say for rich formatting. Also, *selection*.html is only supported on HTML elements. SVG elements and other non-HTML elements do not support the innerHTML property, and thus are incompatible with *selection*.html. Consider using [XMLSerializer](https://developer.mozilla.org/en-US/docs/XMLSerializer) to convert a DOM subtree to text. See also the [innersvg polyfill](https://code.google.com/p/innersvg/), which provides a shim to support the innerHTML property on SVG elements.\n\n# selection.append(type) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/append.js \"Source\")\n\nIf the specified *type* is a string, appends a new element of this type (tag name) as the last child of each selected element, or before the next following sibling in the update selection if this is an [enter selection](#selection_enter). The latter behavior for enter selections allows you to insert elements into the DOM in an order consistent with the new bound data; however, note that [*selection*.order](#selection_order) may still be required if updating elements change order (*i.e.*, if the order of new data is inconsistent with old data).\n\nIf the specified *type* is 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 (*nodes*[*i*]). This function should return an element to be appended. (The function typically creates a new element, but it may instead return an existing element.) For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").append(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").append(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.appendChild(document.createElement(\"p\"));\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.insert(type[, before]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/insert.js \"Source\")\n\nIf the specified *type* is a string, inserts a new element of this type (tag name) before the first element matching the specified *before* selector for each selected element. For example, a *before* selector `:first-child` will prepend nodes before the first child. If *before* is not specified, it defaults to null. (To append elements in an order consistent with [bound data](#joining-data), use [*selection*.append](#selection_append).)\n\nBoth *type* and *before* may instead be specified as functions which are 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 (*nodes*[*i*]). The *type* function should return an element to be inserted; the *before* function should return the child element before which the element should be inserted. For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").insert(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").insert(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.insertBefore(document.createElement(\"p\"), null);\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.remove() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/remove.js \"Source\")\n\nRemoves the selected elements from the document. Returns this selection (the removed elements) which are now detached from the DOM. There is not currently a dedicated API to add removed elements back to the document; however, you can pass a function to [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) to re-add elements.\n\n# selection.clone([deep]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/clone.js \"Source\")\n\nInserts clones of the selected elements immediately following the selected elements and returns a selection of the newly added clones. If *deep* is truthy, the descendant nodes of the selected elements will be cloned as well. Otherwise, only the elements themselves will be cloned. Equivalent to:\n\n```js\nselection.select(function() {\n return this.parentNode.insertBefore(this.cloneNode(deep), this.nextSibling);\n});\n```\n\n# selection.sort(compare) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/sort.js \"Source\")\n\nReturns a new selection that contains a copy of each group in this selection sorted according to the *compare* function. After sorting, re-inserts elements to match the resulting order (per [*selection*.order](#selection_order)).\n\nThe compare function, which defaults to [ascending](https://github.com/d3/d3-array#ascending), is passed two elements’ data *a* and *b* to compare. It should return either a negative, positive, or zero value. If negative, then *a* should be before *b*; if positive, then *a* should be after *b*; otherwise, *a* and *b* are considered equal and the order is arbitrary.\n\nNote that sorting is not guaranteed to be stable; however, it is guaranteed to have the same behavior as your browser’s built-in [sort](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort) method on arrays.\n\n# selection.order() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/order.js \"Source\")\n\nRe-inserts elements into the document such that the document order of each group matches the selection order. This is equivalent to calling [*selection*.sort](#selection_sort) if the data is already sorted, but much faster.\n\n# selection.raise() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/raise.js \"Source\")\n\nRe-inserts each selected element, in order, as the last child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.appendChild(this);\n});\n```\n\n# selection.lower() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/lower.js \"Source\")\n\nRe-inserts each selected element, in order, as the first child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.insertBefore(this, this.parentNode.firstChild);\n});\n```\n\n# d3.create(name) [<>](https://github.com/d3/d3-selection/blob/master/src/create.js \"Source\")\n\nGiven the specified element *name*, returns a single-element selection containing a detached element of the given name in the current document. This method assumes the HTML namespace, so you must specify a namespace explicitly when creating SVG or other non-HTML elements; see [namespace](#namespace) for details on supported namespace prefixes.\n\n```js\nd3.create(\"svg\") // equivalent to svg:svg\nd3.create(\"svg:svg\") // more explicitly\nd3.create(\"svg:g\") // an SVG G element\nd3.create(\"g\") // an HTML G (unknown) element\n```\n\n# d3.creator(name) [<>](https://github.com/d3/d3-selection/blob/master/src/creator.js \"Source\")\n\nGiven the specified element *name*, returns a function which creates an element of the given name, assuming that `this` is the parent element. This method is used internally by [*selection*.append](#selection_append) and [*selection*.insert](#selection_insert) to create new elements. For example, this:\n\n```js\nselection.append(\"div\");\n```\n\nIs equivalent to:\n\n```js\nselection.append(d3.creator(\"div\"));\n```\n\nSee [namespace](#namespace) for details on supported namespace prefixes, such as for SVG elements.\n\n### Joining Data\n\nFor an introduction to D3’s data joins, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join). Also see [Thinking With Joins](http://bost.ocks.org/mike/join/).\n\n# selection.data([data[, key]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/data.js \"Source\")\n\nBinds the specified array of *data* with the selected elements, returning a new selection that represents the *update* selection: the elements successfully bound to data. Also defines the [enter](#selection_enter) and [exit](#selection_exit) selections on the returned selection, which can be used to add or remove elements to correspond to the new data. The specified *data* is an array of arbitrary values (*e.g.*, numbers or objects), or a function that returns an array of values for each group. When data is assigned to an element, it is stored in the property `__data__`, thus making the data “sticky” and available on re-selection.\n\nThe *data* is specified **for each group** in the selection. If the selection has multiple groups (such as [d3.selectAll](#selectAll) followed by [*selection*.selectAll](#selection_selectAll)), then *data* should typically be specified as a function. This function will be evaluated for each group in order, being passed the group’s parent datum (*d*, which may be undefined), the group index (*i*), and the selection’s parent nodes (*nodes*), with *this* as the group’s parent element.\n\nIn conjunction with [*selection*.join](#selection_join) (or more explicitly with [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append) and [*selection*.remove](#selection_remove)), *selection*.data can be used to enter, update and exit elements to match data. For example, to create an HTML table from a matrix of numbers:\n\n```js\nconst matrix = [\n [11975, 5871, 8916, 2868],\n [ 1951, 10048, 2060, 6171],\n [ 8010, 16145, 8090, 8045],\n [ 1013, 990, 940, 6907]\n];\n\nd3.select(\"body\")\n .append(\"table\")\n .selectAll(\"tr\")\n .data(matrix)\n .join(\"tr\")\n .selectAll(\"td\")\n .data(d => d)\n .join(\"td\")\n .text(d => d);\n```\n\nIn this example the *data* function is the identity function: for each table row, it returns the corresponding row from the data matrix.\n\nIf a *key* function is not specified, then the first datum in *data* is assigned to the first selected element, the second datum to the second selected element, and so on. A *key* function may be specified to control which datum is assigned to which element, replacing the default join-by-index, by computing a string identifier for each datum and element. This key 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 (*nodes*[*i*]); the returned string is the element’s key. The key function is then also evaluated for each new datum in *data*, being passed the current datum (*d*), the current index (*i*), and the group’s new *data*, with *this* as the group’s parent DOM element; the returned string is the datum’s key. The datum for a given key is assigned to the element with the matching key. If multiple elements have the same key, the duplicate elements are put into the exit selection; if multiple data have the same key, the duplicate data are put into the enter selection.\n\nFor example, given this document:\n\n```html\n
\n
\n
\n
\n
\n
\n```\n\nYou could join data by key as follows:\n\n\n```js\nconst data = [\n {name: \"Locke\", number: 4},\n {name: \"Reyes\", number: 8},\n {name: \"Ford\", number: 15},\n {name: \"Jarrah\", number: 16},\n {name: \"Shephard\", number: 23},\n {name: \"Kwon\", number: 42}\n];\n\nd3.selectAll(\"div\")\n .data(data, function(d) { return d ? d.name : this.id; })\n .text(d => d.number);\n```\n\nThis example key function uses the datum *d* if present, and otherwise falls back to the element’s id property. Since these elements were not previously bound to data, the datum *d* is null when the key function is evaluated on selected elements, and non-null when the key function is evaluated on the new data.\n\nThe *update* and *enter* selections are returned in data order, while the *exit* selection preserves the selection order prior to the join. If a key function is specified, the order of elements in the selection may not match their order in the document; use [*selection*.order](#selection_order) or [*selection*.sort](#selection_sort) as needed. For more on how the key function affects the join, see [A Bar Chart, Part 2](http://bost.ocks.org/mike/bar/2/) and [Object Constancy](http://bost.ocks.org/mike/constancy/).\n\nIf *data* is not specified, this method returns the array of data for the selected elements.\n\nThis method cannot be used to clear bound data; use [*selection*.datum](#selection_datum) instead.\n\n# selection.join(enter[, update][, exit]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/join.js \"Source\")\n\nAppends, removes and reorders elements as necessary to match the data that was previously bound by [*selection*.data](#selection_data), returning the [merged](#selection_merge) enter and update selection. This method is a convenient alternative to the explicit [general update pattern](https://bl.ocks.org/mbostock/3808218), replacing [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append), [*selection*.remove](#selection_remove), and [*selection*.order](#selection_order). For example:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\"circle\")\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n```\n\nThe *enter* function may be specified as a string shorthand, as above, which is equivalent to [*selection*.append](#selection_append) with the given element name. Likewise, optional *update* and *exit* functions may be specified, which default to the identity function and calling [*selection*.remove](#selection_remove), respectively. The shorthand above is thus equivalent to:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\"),\n update => update,\n exit => exit.remove()\n )\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n````\n\nBy passing separate functions on enter, update and exit, you have greater control over what happens. And by specifying a key function to [*selection*.data](#selection_data), you can minimize changes to the DOM to optimize performance. For example, to set different fill colors for enter and update:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\").attr(\"fill\", \"green\"),\n update => update.attr(\"fill\", \"blue\")\n )\n .attr(\"stroke\", \"black\");\n```\n\nThe selections returned by the *enter* and *update* functions are merged and then returned by *selection*.join.\n\nYou also animate enter, update and exit by creating transitions inside the *enter*, *update* and *exit* functions. To avoid breaking the method chain, use *selection*.call to create transitions, or return an undefined enter or update selection to prevent merging: the return value of the *enter* and *update* functions specifies the two selections to merge and return by *selection*.join.\n\nFor more, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join).\n\n# selection.enter() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/enter.js \"Source\")\n\nReturns the enter selection: placeholder nodes for each datum that had no corresponding DOM element in the selection. (The enter selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe enter selection is typically used to create “missing” elements corresponding to new data. For example, to create DIV elements from an array of numbers:\n\n```js\nconst div = d3.select(\"body\")\n .selectAll(\"div\")\n .data([4, 8, 15, 16, 23, 42])\n .enter().append(\"div\")\n .text(d => d);\n```\n\nIf the body is initially empty, the above code will create six new DIV elements, append them to the body in-order, and assign their text content as the associated (string-coerced) number:\n\n```html\n
4
\n
8
\n
15
\n
16
\n
23
\n
42
\n```\n\nConceptually, the enter selection’s placeholders are pointers to the parent element (in this example, the document body). The enter selection is typically only used transiently to append elements, and is often [merged](#selection_merge) with the update selection after appending, such that modifications can be applied to both entering and updating elements.\n\n# selection.exit() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/exit.js \"Source\")\n\nReturns the exit selection: existing DOM elements in the selection for which no new datum was found. (The exit selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe exit selection is typically used to remove “superfluous” elements corresponding to old data. For example, to update the DIV elements created previously with a new array of numbers:\n\n```js\ndiv = div.data([1, 2, 4, 8, 16, 32], d => d);\n```\n\nSince a key function was specified (as the identity function), and the new data contains the numbers [4, 8, 16] which match existing elements in the document, the update selection contains three DIV elements. Leaving those elements as-is, we can append new elements for [1, 2, 32] using the enter selection:\n\n```js\ndiv.enter().append(\"div\").text(d => d);\n```\n\nLikewise, to remove the exiting elements [15, 23, 42]:\n\n```js\ndiv.exit().remove();\n```\n\nNow the document body looks like this:\n\n```html\n
1
\n
2
\n
4
\n
8
\n
16
\n
32
\n```\n\nThe order of the DOM elements matches the order of the data because the old data’s order and the new data’s order were consistent. If the new data’s order is different, use [*selection*.order](#selection_order) to reorder the elements in the DOM. See the [General Update Pattern](http://bl.ocks.org/mbostock/3808218) example thread for more on data joins.\n\n# selection.datum([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/datum.js \"Source\")\n\nGets or sets the bound data for each selected element. Unlike [*selection*.data](#selection_data), this method does not compute a join and does not affect indexes or the enter and exit selections.\n\nIf a *value* is specified, sets the element’s bound data to the specified value on all selected elements. If the *value* is a constant, all elements are given the same datum; otherwise, if the *value* is 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 (*nodes*[*i*]). The function is then used to set each element’s new data. A null value will delete the bound data.\n\nIf a *value* is not specified, returns the bound datum for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nThis method is useful for accessing HTML5 [custom data attributes](http://www.w3.org/TR/html5/dom.html#custom-data-attribute). For example, given the following elements:\n\n```html\n\n```\n\nYou can expose the custom data attributes by setting each element’s data as the built-in [dataset](http://www.w3.org/TR/html5/dom.html#dom-dataset) property:\n\n```js\nselection.datum(function() { return this.dataset; })\n```\n\n### Handling Events\n\nFor interaction, selections allow listening for and dispatching of events.\n\n# selection.on(typenames[, listener[, options]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js \"Source\")\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is a string event type, such as `click`, `mouseover`, or `submit`; any [DOM event type](https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events) supported by your browser may be used. The 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 `click.foo` and `click.bar`. To specify multiple typenames, separate typenames with spaces, such as `input change` or `click.foo click.bar`.\n\nWhen a specified event is dispatched on a selected element, the specified *listener* will be evaluated for the element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element (*nodes*[*i*]). 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. To access the current event within a listener, use [d3.event](#event).\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\nAn optional *options* object may specify characteristics about the event listener, such as whether it is capturing or passive; see [*element*.addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener).\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# selection.dispatch(type[, parameters]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/dispatch.js \"Source\")\n\nDispatches a [custom event](http://www.w3.org/TR/dom/#interface-customevent) of the specified *type* to each selected element, in order. An optional *parameters* map may be specified to set additional properties of the event. It may contain the following fields:\n\n* [`bubbles`](https://www.w3.org/TR/dom/#dom-event-bubbles) - if true, the event is dispatched to ancestors in reverse tree order.\n* [`cancelable`](https://www.w3.org/TR/dom/#dom-event-cancelable) - if true, *event*.preventDefault is allowed.\n* [`detail`](https://www.w3.org/TR/dom/#dom-customevent-detail) - any custom data associated with the event.\n\nIf *parameters* is 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 (*nodes*[*i*]). It must return the parameters map for the current element.\n\n# d3.event\n\nThe current [event](https://developer.mozilla.org/en-US/docs/DOM/event), if any. This is set during the invocation of an event listener, and is reset after the listener terminates. Use this to access standard event fields such as [*event*.timeStamp](https://www.w3.org/TR/dom/#dom-event-timestamp) and methods such as [*event*.preventDefault](https://www.w3.org/TR/dom/#dom-event-preventdefault). While you can use the native [*event*.pageX](https://developer.mozilla.org/en/DOM/event.pageX) and [*event*.pageY](https://developer.mozilla.org/en/DOM/event.pageY), it is often more convenient to transform the event position to the local coordinate system of the container that received the event using [d3.mouse](#mouse), [d3.touch](#touch) or [d3.touches](#touches).\n\nIf you use Babel, Webpack, or another ES6-to-ES5 bundler, be aware that the value of d3.event changes during an event! An import of d3.event must be a [live binding](http://www.2ality.com/2015/07/es6-module-exports.html), so you may need to configure the bundler to import from D3’s ES6 modules rather than from the generated UMD bundle; not all bundlers observe [jsnext:main](https://github.com/rollup/rollup/wiki/jsnext:main). Also beware of conflicts with the [*window*.event](https://developer.mozilla.org/en-US/docs/Web/API/Window/event) global.\n\n# d3.customEvent(event, listener[, that[, arguments]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js#L98 \"Source\")\n\nInvokes the specified *listener*, using the specified *that* `this` context and passing the specified *arguments*, if any. During the invocation, [d3.event](#event) is set to the specified *event*; after the listener returns (or throws an error), d3.event is restored to its previous value. In addition, sets *event*.sourceEvent to the prior value of d3.event, allowing custom events to retain a reference to the originating native event. Returns the value returned by the *listener*.\n\n# d3.mouse(container) [<>](https://github.com/d3/d3-selection/blob/master/src/mouse.js \"Source\")\n\nReturns the *x* and *y* coordinates of the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n# d3.touch(container[, touches], identifier) [<>](https://github.com/d3/d3-selection/blob/master/src/touch.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touch with the specified *identifier* associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*]. If there is no touch with the specified identifier in *touches*, returns null; this can be useful for ignoring touchmove events where the only some touches have moved. If *touches* is not specified, it defaults to the current event’s [changedTouches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/changedTouches) property.\n\n# d3.touches(container[, touches]) [<>](https://github.com/d3/d3-selection/blob/master/src/touches.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touches associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as an array of two-element arrays of numbers \\[\\[*x1*, *y1*], [*x2*, *y2*], …\\]. If *touches* is not specified, it defaults to the current event’s [touches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/touches) property.\n\n# d3.clientPoint(container, event) [<>](https://github.com/d3/d3-selection/blob/master/src/point.js \"Source\")\n\nReturns the *x* and *y* coordinates of the specified *event* relative to the specified *container*. (The *event* may also be a [touch](https://www.w3.org/TR/touch-events/#touch-interface).) The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n### Control Flow\n\nFor advanced usage, selections provide methods for custom control flow.\n\n# selection.each(function) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/each.js \"Source\")\n\nInvokes the specified *function* 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 (*nodes*[*i*]). 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, such as:\n\n```js\nparent.each(function(p, j) {\n d3.select(this)\n .selectAll(\".child\")\n .text(d => `child ${d.name} of ${p.name}`);\n});\n```\n\nSee [Sized Donut Multiples](http://bl.ocks.org/mbostock/4c5fad723c87d2fd8273) for an example.\n\n# selection.call(function[, arguments…]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/call.js \"Source\")\n\nInvokes the specified *function* exactly once, passing in this selection along with any optional *arguments*. Returns this selection. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several styles in a reusable function:\n\n```js\nfunction name(selection, first, last) {\n selection\n .attr(\"first-name\", first)\n .attr(\"last-name\", last);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").call(name, \"John\", \"Snow\");\n```\n\nThis is roughly equivalent to:\n\n```js\nname(d3.selectAll(\"div\"), \"John\", \"Snow\");\n```\n\nThe only difference is that *selection*.call always returns the *selection* and not the return value of the called *function*, `name`.\n\n# selection.empty() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js \"Source\")\n\nReturns true if this selection contains no (non-null) elements.\n\n# selection.nodes() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js \"Source\")\n\nReturns an array of all (non-null) elements in this selection.\n\n# selection.node() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/node.js \"Source\")\n\nReturns the first (non-null) element in this selection. If the selection is empty, returns null.\n\n# selection.size() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/size.js \"Source\")\n\nReturns the total number of elements in this selection.\n\n### Local Variables\n\nD3 locals allow you to define local state independent of data. For instance, when rendering [small multiples](http://bl.ocks.org/mbostock/e1192fe405703d8321a5187350910e08) of time-series data, you might want the same *x*-scale for all charts but distinct *y*-scales to compare the relative performance of each metric. D3 locals are scoped by DOM elements: on set, the value is stored on the given element; on get, the value is retrieved from given element or the nearest ancestor that defines it.\n\n# d3.local() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js \"Source\")\n\nDeclares a new local variable. For example:\n\n```js\nconst foo = d3.local();\n```\n\nLike `var`, each local is a distinct symbolic reference; unlike `var`, the value of each local is also scoped by the DOM.\n\n# local.set(node, value) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L18 \"Source\")\n\nSets the value of this local on the specified *node* to the *value*, and returns the specified *value*. This is often performed using [*selection*.each](#selection_each):\n\n```js\nselection.each(function(d) { foo.set(this, d.value); });\n```\n\nIf you are just setting a single variable, consider using [*selection*.property](#selection_property):\n\n```js\nselection.property(foo, d => d.value);\n```\n\n# local.get(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L13 \"Source\")\n\nReturns the value of this local on the specified *node*. If the *node* does not define this local, returns the value from the nearest ancestor that defines it. Returns undefined if no ancestor defines this local.\n\n# local.remove(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L21 \"Source\")\n\nDeletes this local’s value from the specified *node*. Returns true if the *node* defined this local prior to removal, and false otherwise. If ancestors also define this local, those definitions are unaffected, and thus [*local*.get](#local_get) will still return the inherited value.\n\n# local.toString() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L24 \"Source\")\n\nReturns the automatically-generated identifier for this local. This is the name of the property that is used to store the local’s value on elements, and thus you can also set or get the local’s value using *element*[*local*] or by using [*selection*.property](#selection_property).\n\n### Namespaces\n\nXML namespaces are fun! Right? Fortunately you can mostly ignore them.\n\n# d3.namespace(name) [<>](https://github.com/d3/d3-selection/blob/master/src/namespace.js \"Source\")\n\nQualifies the specified *name*, which may or may not have a namespace prefix. If the name contains a colon (`:`), the substring before the colon is interpreted as the namespace prefix, which must be registered in [d3.namespaces](#namespaces). Returns an object `space` and `local` attributes describing the full namespace URL and the local name. For example:\n\n```js\nd3.namespace(\"svg:text\"); // {space: \"http://www.w3.org/2000/svg\", local: \"text\"}\n```\n\nIf the name does not contain a colon, this function merely returns the input name.\n\n# d3.namespaces [<>](https://github.com/d3/d3-selection/blob/master/src/namespaces.js \"Source\")\n\nThe map of registered namespace prefixes. The initial value is:\n\n```js\n{\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: \"http://www.w3.org/1999/xhtml\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n}\n```\n\nAdditional prefixes may be assigned as needed to create elements or attributes in other namespaces.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-selection", "error": "[Circular]", "extraneous": false, "_deduped": "d3-selection" } }, "deprecated": false, "description": "Drag and drop SVG, HTML or Canvas using mouse or touch input.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-drag/", "jsdelivr": "dist/d3-drag.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-drag.js", "module": "src/index.js", "name": "d3-drag", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-drag.min.js", "version": "1.2.5", "readme": "# d3-drag\n\n[Drag-and-drop](https://en.wikipedia.org/wiki/Drag_and_drop) is a popular and easy-to-learn pointing gesture: move the pointer to an object, press and hold to grab it, “drag” the object to a new location, and release to “drop”. D3’s [drag behavior](#api-reference) provides a convenient but flexible abstraction for enabling drag-and-drop interaction on [selections](https://github.com/d3/d3-selection). For example, you can use d3-drag to facilitate interaction with a [force-directed graph](https://github.com/d3/d3-force), or a simulation of colliding circles:\n\n[\"Force](http://bl.ocks.org/mbostock/ad70335eeef6d167bc36fd3c04378048)[\"Force](http://bl.ocks.org/mbostock/2990a882e007f8384b04827617752738)\n\nYou can also use d3-drag to implement custom user interface elements, such as a slider. But the drag behavior isn’t just for moving elements around; there are a variety of ways to respond to a drag gesture. For example, you can use it to lasso elements in a scatterplot, or to paint lines on a canvas:\n\n[\"Line](http://bl.ocks.org/mbostock/f705fc55e6f26df29354)\n\nThe drag behavior can be combined with other behaviors, such as [d3-zoom](https://github.com/d3/d3-zoom) for zooming.\n\n[\"Drag](http://bl.ocks.org/mbostock/3127661b6f13f9316be745e77fdfb084)\n\nThe drag behavior is agnostic about the DOM, so you can use it with SVG, HTML or even Canvas! And you can extend it with advanced selection techniques, such as a Voronoi overlay or a closest-target search:\n\n[\"Circle](http://bl.ocks.org/mbostock/ec10387f24c1fad2acac3bc11eb218a5)[\"Circle](http://bl.ocks.org/mbostock/c206c20294258c18832ff80d8fd395c3)\n\nBest of all, the drag behavior automatically unifies mouse and touch input, and avoids browser idiosyncrasies. When [Pointer Events](https://www.w3.org/TR/pointerevents/) are more widely available, the drag behavior will support those, too.\n\n## Installing\n\nIf you use NPM, `npm install d3-drag`. Otherwise, download the [latest release](https://github.com/d3/d3-drag/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-drag.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n\n\n```\n\n[Try d3-drag in your browser.](https://tonicdev.com/npm/d3-drag)\n\n## API Reference\n\nThis table describes how the drag behavior interprets native events:\n\n| Event | Listening Element | Drag Event | Default Prevented? |\n| ------------ | ----------------- | ---------- | ------------------ |\n| mousedown⁵ | selection | start | no¹ |\n| mousemove² | window¹ | drag | yes |\n| mouseup² | window¹ | end | yes |\n| dragstart² | window | - | yes |\n| selectstart² | window | - | yes |\n| click³ | window | - | yes |\n| touchstart | selection | start | no⁴ |\n| touchmove | selection | drag | yes |\n| touchend | selection | end | no⁴ |\n| touchcancel | selection | end | no⁴ |\n\nThe propagation of all consumed events is [immediately stopped](https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation). If you want to prevent some events from initiating a drag gesture, use [*drag*.filter](#drag_filter).\n\n¹ Necessary to capture events outside an iframe; see [#9](https://github.com/d3/d3-drag/issues/9).\n
² Only applies during an active, mouse-based gesture; see [#9](https://github.com/d3/d3-drag/issues/9).\n
³ Only applies immediately after some mouse-based gestures; see [*drag*.clickDistance](#drag_clickDistance).\n
⁴ Necessary to allow [click emulation](https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7) on touch input; see [#9](https://github.com/d3/d3-drag/issues/9).\n
⁵ Ignored if within 500ms of a touch gesture ending; assumes [click emulation](https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7).\n\n# d3.drag() [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js \"Source\")\n\nCreates a new drag behavior. The returned behavior, [*drag*](#_drag), is both an object and a function, and is typically applied to selected elements via [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n# drag(selection) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L39 \"Source\")\n\nApplies this drag behavior to the specified [*selection*](https://github.com/d3/d3-selection). This function is typically not invoked directly, and is instead invoked via [*selection*.call](https://github.com/d3/d3-selection#selection_call). For example, to instantiate a drag behavior and apply it to a selection:\n\n```js\nd3.selectAll(\".node\").call(d3.drag().on(\"start\", started));\n```\n\nInternally, the drag behavior uses [*selection*.on](https://github.com/d3/d3-selection#selection_on) to bind the necessary event listeners for dragging. The listeners use the name `.drag`, so you can subsequently unbind the drag behavior as follows:\n\n```js\nselection.on(\".drag\", null);\n```\n\nApplying the drag behavior also sets the [-webkit-tap-highlight-color](https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/AdjustingtheTextSize/AdjustingtheTextSize.html#//apple_ref/doc/uid/TP40006510-SW5) style to transparent, disabling the tap highlight on iOS. If you want a different tap highlight color, remove or re-apply this style after applying the drag behavior.\n\n# drag.container([container]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L145 \"Source\")\n\nIf *container* is specified, sets the container accessor to the specified object or function and returns the drag behavior. If *container* is not specified, returns the current container accessor, which defaults to:\n\n```js\nfunction container() {\n return this.parentNode;\n}\n```\n\nThe *container* of a drag gesture determines the coordinate system of subsequent [drag events](#drag-events), affecting *event*.x and *event*.y. The element returned by the container accessor is subsequently passed to [d3.mouse](https://github.com/d3/d3-selection#mouse) or [d3.touch](https://github.com/d3/d3-selection#touch), as appropriate, to determine the local coordinates of the pointer.\n\nThe default container accessor returns the parent node of the element in the originating selection (see [*drag*](#_drag)) that received the initiating input event. This is often appropriate when dragging SVG or HTML elements, since those elements are typically positioned relative to a parent. For dragging graphical elements with a Canvas, however, you may want to redefine the container as the initiating element itself:\n\n```js\nfunction container() {\n return this;\n}\n```\n\nAlternatively, the container may be specified as the element directly, such as `drag.container(canvas)`.\n\n# drag.filter([filter]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L141 \"Source\")\n\nIf *filter* is specified, sets the filter to the specified function and returns the drag behavior. If *filter* is not specified, returns the current filter, which defaults to:\n\n```js\nfunction filter() {\n return !d3.event.ctrlKey && !d3.event.button;\n}\n```\n\nIf the filter returns falsey, the initiating event is ignored and no drag gestures are started. Thus, the filter determines which input events are ignored; the default filter ignores mousedown events on secondary buttons, since those buttons are typically intended for other purposes, such as the context menu.\n\n# drag.touchable([touchable]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L153 \"Source\")\n\nIf *touchable* is specified, sets the touch support detector to the specified function and returns the drag behavior. If *touchable* is not specified, returns the current touch support detector, which defaults to:\n\n```js\nfunction touchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n```\n\nTouch event listeners are only registered if the detector returns truthy for the corresponding element when the drag behavior is [applied](#_drag). The default detector works well for most browsers that are capable of touch input, but not all; Chrome’s mobile device emulator, for example, fails detection.\n\n# drag.subject([subject]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L149 \"Source\")\n\nIf *subject* is specified, sets the subject accessor to the specified object or function and returns the drag behavior. If *subject* is not specified, returns the current subject accessor, which defaults to:\n\n```js\nfunction subject(d) {\n return d == null ? {x: d3.event.x, y: d3.event.y} : d;\n}\n```\n\nThe *subject* of a drag gesture represents *the thing being dragged*. It is computed when an initiating input event is received, such as a mousedown or touchstart, immediately before the drag gesture starts. The subject is then exposed as *event*.subject on subsequent [drag events](#drag-events) for this gesture.\n\nThe default subject is the [datum](https://github.com/d3/d3-selection#selection_datum) of the element in the originating selection (see [*drag*](#_drag)) that received the initiating input event; if this datum is undefined, an object representing the coordinates of the pointer is created. When dragging circle elements in SVG, the default subject is thus the datum of the circle being dragged. With [Canvas](https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element), the default subject is the canvas element’s datum (regardless of where on the canvas you click). In this case, a custom subject accessor would be more appropriate, such as one that picks the closest circle to the mouse within a given search *radius*:\n\n```js\nfunction subject() {\n var n = circles.length,\n i,\n dx,\n dy,\n d2,\n s2 = radius * radius,\n circle,\n subject;\n\n for (i = 0; i < n; ++i) {\n circle = circles[i];\n dx = d3.event.x - circle.x;\n dy = d3.event.y - circle.y;\n d2 = dx * dx + dy * dy;\n if (d2 < s2) subject = circle, s2 = d2;\n }\n\n return subject;\n}\n```\n\n(If necessary, the above can be accelerated using [*quadtree*.find](https://github.com/d3/d3-quadtree#quadtree_find).)\n\nThe returned subject should be an object that exposes `x` and `y` properties, so that the relative position of the subject and the pointer can be preserved during the drag gesture. If the subject is null or undefined, no drag gesture is started for this pointer; however, other starting touches may yet start drag gestures. See also [*drag*.filter](#drag_filter).\n\nThe subject of a drag gesture may not be changed after the gesture starts. The subject accessor is invoked with the same context and arguments as [*selection*.on](https://github.com/d3/d3-selection#selection_on) listeners: the current datum `d` and index `i`, with the `this` context as the current DOM element. During the evaluation of the subject accessor, [d3.event](https://github.com/d3/d3-selection#event) is a beforestart [drag event](#drag-events). Use *event*.sourceEvent to access the initiating input event and *event*.identifier to access the touch identifier. The *event*.x and *event*.y are relative to the [container](#drag_container), and are computed using [d3.mouse](https://github.com/d3/d3-selection#mouse) or [d3.touch](https://github.com/d3/d3-selection#touch) as appropriate.\n\n# drag.clickDistance([distance]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L162 \"Source\")\n\nIf *distance* is specified, sets the maximum distance that the mouse can move between mousedown and mouseup that will trigger a subsequent click event. If at any point between mousedown and mouseup the mouse is greater than or equal to *distance* from its position on mousedown, the click event following mouseup will be suppressed. If *distance* is not specified, returns the current distance threshold, which defaults to zero. The distance threshold is measured in client coordinates ([*event*.clientX](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientX) and [*event*.clientY](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientY)).\n\n# drag.on(typenames, [listener]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L157 \"Source\")\n\nIf *listener* is specified, sets the event *listener* for the specified *typenames* and returns the drag behavior. If an event listener was already registered for the same type and name, the existing listener is removed before the new listener is added. If *listener* is null, removes the current event listeners for the specified *typenames*, if any. If *listener* is not specified, returns the first currently-assigned listener matching the specified *typenames*, if any. When a specified event is dispatched, each *listener* will be invoked with the same context and arguments as [*selection*.on](https://github.com/d3/d3-selection#selection_on) listeners: the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\nThe *typenames* is a string containing one or more *typename* separated by whitespace. Each *typename* is a *type*, optionally followed by a period (`.`) and a *name*, such as `drag.foo` and `drag.bar`; the name allows multiple listeners to be registered for the same *type*. The *type* must be one of the following:\n\n* `start` - after a new pointer becomes active (on mousedown or touchstart).\n* `drag` - after an active pointer moves (on mousemove or touchmove).\n* `end` - after an active pointer becomes inactive (on mouseup, touchend or touchcancel).\n\nSee [*dispatch*.on](https://github.com/d3/d3-dispatch#dispatch_on) for more.\n\nChanges to registered listeners via *drag*.on during a drag gesture *do not affect* the current drag gesture. Instead, you must use [*event*.on](#event_on), which also allows you to register temporary event listeners for the current drag gesture. **Separate events are dispatched for each active pointer** during a drag gesture. For example, if simultaneously dragging multiple subjects with multiple fingers, a start event is dispatched for each finger, even if both fingers start touching simultaneously. See [Drag Events](#drag-events) for more.\n\n# d3.dragDisable(window) [<>](https://github.com/d3/d3-drag/blob/master/src/nodrag.js#L4 \"Source\")\n\nPrevents native drag-and-drop and text selection on the specified *window*. As an alternative to preventing the default action of mousedown events (see [#9](https://github.com/d3/d3-drag/issues/9)), this method prevents undesirable default actions following mousedown. In supported browsers, this means capturing dragstart and selectstart events, preventing the associated default actions, and immediately stopping their propagation. In browsers that do not support selection events, the user-select CSS property is set to none on the document element. This method is intended to be called on mousedown, followed by [d3.dragEnable](#dragEnable) on mouseup.\n\n# d3.dragEnable(window[, noclick]) [<>](https://github.com/d3/d3-drag/blob/master/src/nodrag.js#L15 \"Source\")\n\nAllows native drag-and-drop and text selection on the specified *window*; undoes the effect of [d3.dragDisable](#dragDisable). This method is intended to be called on mouseup, preceded by [d3.dragDisable](#dragDisable) on mousedown. If *noclick* is true, this method also temporarily suppresses click events. The suppression of click events expires after a zero-millisecond timeout, such that it only suppress the click event that would immediately follow the current mouseup event, if any.\n\n### Drag Events\n\nWhen a [drag event listener](#drag_on) is invoked, [d3.event](https://github.com/d3/d3-selection#event) is set to the current drag event. The *event* object exposes several fields:\n\n* `target` - the associated [drag behavior](#drag).\n* `type` - the string “start”, “drag” or “end”; see [*drag*.on](#drag_on).\n* `subject` - the drag subject, defined by [*drag*.subject](#drag_subject).\n* `x` - the new *x*-coordinate of the subject; see [*drag*.container](#drag_container).\n* `y` - the new *y*-coordinate of the subject; see [*drag*.container](#drag_container).\n* `dx` - the change in *x*-coordinate since the previous drag event.\n* `dy` - the change in *y*-coordinate since the previous drag event.\n* `identifier` - the string “mouse”, or a numeric [touch identifier](https://www.w3.org/TR/touch-events/#widl-Touch-identifier).\n* `active` - the number of currently active drag gestures (on start and end, not including this one).\n* `sourceEvent` - the underlying input event, such as mousemove or touchmove.\n\nThe *event*.active field is useful for detecting the first start event and the last end event in a sequence of concurrent drag gestures: it is zero when the first drag gesture starts, and zero when the last drag gesture ends.\n\nThe *event* object also exposes the [*event*.on](#event_on) method.\n\n# event.on(typenames, [listener]) [<>](https://github.com/d3/d3-drag/blob/master/src/event.js \"Source\")\n\nEquivalent to [*drag*.on](#drag_on), but only applies to the current drag gesture. Before the drag gesture starts, a [copy](https://github.com/d3/d3-dispatch#dispatch_copy) of the current drag [event listeners](#drag_on) is made. This copy is bound to the current drag gesture and modified by *event*.on. This is useful for temporary listeners that only receive events for the current drag gesture. For example, this start event listener registers temporary drag and end event listeners as closures:\n\n```js\nfunction started() {\n var circle = d3.select(this).classed(\"dragging\", true);\n\n d3.event.on(\"drag\", dragged).on(\"end\", ended);\n\n function dragged(d) {\n circle.raise().attr(\"cx\", d.x = d3.event.x).attr(\"cy\", d.y = d3.event.y);\n }\n\n function ended() {\n circle.classed(\"dragging\", false);\n }\n}\n```\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-drag", "error": "[Circular]", "extraneous": false }, "d3-dsv": { "_from": "d3-dsv@1", "_id": "d3-dsv@1.2.0", "_inBundle": false, "_integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", "_location": "/d3-dsv", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-dsv@1", "name": "d3-dsv", "escapedName": "d3-dsv", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-fetch" ], "_resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", "_shasum": "9d5f75c3a5f8abd611f74d3f5847b0d4338b885c", "_spec": "d3-dsv@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bin": { "csv2json": "bin/dsv2json", "csv2tsv": "bin/dsv2dsv", "dsv2dsv": "bin/dsv2dsv", "dsv2json": "bin/dsv2json", "json2csv": "bin/json2dsv", "json2dsv": "bin/json2dsv", "json2tsv": "bin/json2dsv", "tsv2csv": "bin/dsv2dsv", "tsv2json": "bin/dsv2json" }, "bugs": { "url": "https://github.com/d3/d3-dsv/issues" }, "dependencies": { "commander": { "_from": "commander@2", "_id": "commander@2.20.3", "_inBundle": false, "_integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "_location": "/commander", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "commander@2", "name": "commander", "escapedName": "commander", "rawSpec": "2", "saveSpec": "[Circular]", "fetchSpec": "2" }, "_requiredBy": [ "/d3-dsv", "/terser", "/terser-webpack-plugin/terser" ], "_resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "_shasum": "fd485e84c03eb4881c20722ba48035e8531aeb33", "_spec": "commander@2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3-dsv", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, "bugs": { "url": "https://github.com/tj/commander.js/issues" }, "dependencies": {}, "deprecated": false, "description": "the complete solution for node.js command-line programs", "devDependencies": { "@types/node": "^12.7.8", "eslint": "^6.4.0", "should": "^13.2.3", "sinon": "^7.5.0", "standard": "^14.3.1", "ts-node": "^8.4.1", "typescript": "^3.6.3" }, "files": [ "index.js", "typings/index.d.ts" ], "homepage": "https://github.com/tj/commander.js#readme", "keywords": [ "commander", "command", "option", "parser" ], "license": "MIT", "main": "index", "name": "commander", "repository": { "type": "git", "url": "git+https://github.com/tj/commander.js.git" }, "scripts": { "lint": "eslint index.js", "test": "node test/run.js && npm run test-typings", "test-typings": "tsc -p tsconfig.json" }, "typings": "typings/index.d.ts", "version": "2.20.3", "readme": "# Commander.js\n\n\n[![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js)\n[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander)\n[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true)\n[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander)\n[![Join the chat at https://gitter.im/tj/commander.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/tj/commander.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander). \n [API documentation](http://tj.github.com/commander.js/)\n\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\nOptions with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.1.0')\n .option('-p, --peppers', 'Add peppers')\n .option('-P, --pineapple', 'Add pineapple')\n .option('-b, --bbq-sauce', 'Add bbq sauce')\n .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza with:');\nif (program.peppers) console.log(' - peppers');\nif (program.pineapple) console.log(' - pineapple');\nif (program.bbqSauce) console.log(' - bbq');\nconsole.log(' - %s cheese', program.cheese);\n```\n\nShort flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as \"--template-engine\" are camel-cased, becoming `program.templateEngine` etc.\n\nNote that multi-word options starting with `--no` prefix negate the boolean value of the following word. For example, `--no-sauce` sets the value of `program.sauce` to false.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .option('--no-sauce', 'Remove sauce')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza');\nif (program.sauce) console.log(' with sauce');\nelse console.log(' without sauce');\n```\n\nTo get string arguments from options you will need to use angle brackets <> for required inputs or square brackets [] for optional inputs. \n\ne.g. ```.option('-m --myarg [myVar]', 'my super cool description')```\n\nThen to access the input if it was passed in.\n\ne.g. ```var myInput = program.myarg```\n\n**NOTE**: If you pass a argument without using brackets the example above will return true and not the value passed in.\n\n\n## Version option\n\nCalling the `version` implicitly adds the `-V` and `--version` options to the command.\nWhen either of these options is present, the command prints the version number and exits.\n\n $ ./examples/pizza -V\n 0.0.1\n\nIf you want your program to respond to the `-v` option instead of the `-V` option, simply pass custom flags to the `version` method using the same syntax as the `option` method.\n\n```js\nprogram\n .version('0.0.1', '-v, --version')\n```\n\nThe version flags can be named anything, but the long option is required.\n\n## Command-specific options\n\nYou can attach options to a command.\n\n```js\n#!/usr/bin/env node\n\nvar program = require('commander');\n\nprogram\n .command('rm ')\n .option('-r, --recursive', 'Remove recursively')\n .action(function (dir, cmd) {\n console.log('remove ' + dir + (cmd.recursive ? ' recursively' : ''))\n })\n\nprogram.parse(process.argv)\n```\n\nA command's options are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated.\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split('..').map(Number);\n}\n\nfunction list(val) {\n return val.split(',');\n}\n\nfunction collect(val, memo) {\n memo.push(val);\n return memo;\n}\n\nfunction increaseVerbosity(v, total) {\n return total + 1;\n}\n\nprogram\n .version('0.1.0')\n .usage('[options] ')\n .option('-i, --integer ', 'An integer argument', parseInt)\n .option('-f, --float ', 'A float argument', parseFloat)\n .option('-r, --range ..', 'A range', range)\n .option('-l, --list ', 'A list', list)\n .option('-o, --optional [value]', 'An optional value')\n .option('-c, --collect [value]', 'A repeatable value', collect, [])\n .option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0)\n .parse(process.argv);\n\nconsole.log(' int: %j', program.integer);\nconsole.log(' float: %j', program.float);\nconsole.log(' optional: %j', program.optional);\nprogram.range = program.range || [];\nconsole.log(' range: %j..%j', program.range[0], program.range[1]);\nconsole.log(' list: %j', program.list);\nconsole.log(' collect: %j', program.collect);\nconsole.log(' verbosity: %j', program.verbose);\nconsole.log(' args: %j', program.args);\n```\n\n## Regular Expression\n```js\nprogram\n .version('0.1.0')\n .option('-s --size ', 'Pizza size', /^(large|medium|small)$/i, 'medium')\n .option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i)\n .parse(process.argv);\n\nconsole.log(' size: %j', program.size);\nconsole.log(' drink: %j', program.drink);\n```\n\n## Variadic arguments\n\n The last argument of a command can be variadic, and only the last argument. To make an argument variadic you have to\n append `...` to the argument name. Here is an example:\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.1.0')\n .command('rmdir [otherDirs...]')\n .action(function (dir, otherDirs) {\n console.log('rmdir %s', dir);\n if (otherDirs) {\n otherDirs.forEach(function (oDir) {\n console.log('rmdir %s', oDir);\n });\n }\n });\n\nprogram.parse(process.argv);\n```\n\n An `Array` is used for the value of a variadic argument. This applies to `program.args` as well as the argument passed\n to your action as demonstrated above.\n\n## Specify the argument syntax\n\n```js\n#!/usr/bin/env node\n\nvar program = require('commander');\n\nprogram\n .version('0.1.0')\n .arguments(' [env]')\n .action(function (cmd, env) {\n cmdValue = cmd;\n envValue = env;\n });\n\nprogram.parse(process.argv);\n\nif (typeof cmdValue === 'undefined') {\n console.error('no command given!');\n process.exit(1);\n}\nconsole.log('command:', cmdValue);\nconsole.log('environment:', envValue || \"no environment given\");\n```\nAngled brackets (e.g. ``) indicate required input. Square brackets (e.g. `[env]`) indicate optional input.\n\n## Git-style sub-commands\n\n```js\n// file: ./examples/pm\nvar program = require('commander');\n\nprogram\n .version('0.1.0')\n .command('install [name]', 'install one or more packages')\n .command('search [query]', 'search with optional query')\n .command('list', 'list packages installed', {isDefault: true})\n .parse(process.argv);\n```\n\nWhen `.command()` is invoked with a description argument, no `.action(callback)` should be called to handle sub-commands, otherwise there will be an error. This tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools. \nThe commander will try to search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-command`, like `pm-install`, `pm-search`.\n\nOptions can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the subcommand from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified.\n\nIf the program is designed to be installed globally, make sure the executables have proper modes, like `755`.\n\n### `--harmony`\n\nYou can enable `--harmony` option in two ways:\n* Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. Note some os version don’t support this pattern.\n* Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n$ ./examples/pizza --help\nUsage: pizza [options]\n\nAn application for pizzas ordering\n\nOptions:\n -h, --help output usage information\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineapple\n -b, --bbq Add bbq sauce\n -c, --cheese Add the specified type of cheese [marble]\n -C, --no-cheese You do not want any cheese\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for \"--help\". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviors, for example\n in the following executable \"stuff\" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.1.0')\n .option('-f, --foo', 'enable some foo')\n .option('-b, --bar', 'enable some bar')\n .option('-B, --baz', 'enable some baz');\n\n// must be before .parse() since\n// node's emit() is immediate\n\nprogram.on('--help', function(){\n console.log('')\n console.log('Examples:');\n console.log(' $ custom-help --help');\n console.log(' $ custom-help -h');\n});\n\nprogram.parse(process.argv);\n\nconsole.log('stuff');\n```\n\nYields the following help output when `node script-name.js -h` or `node script-name.js --help` are run:\n\n```\nUsage: custom-help [options]\n\nOptions:\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n $ custom-help --help\n $ custom-help -h\n```\n\n## .outputHelp(cb)\n\nOutput help information without exiting.\nOptional callback cb allows post-processing of help text before it is displayed.\n\nIf you want to display help by default (e.g. if no command was provided), you can use something like:\n\n```js\nvar program = require('commander');\nvar colors = require('colors');\n\nprogram\n .version('0.1.0')\n .command('getstream [url]', 'get stream URL')\n .parse(process.argv);\n\nif (!process.argv.slice(2).length) {\n program.outputHelp(make_red);\n}\n\nfunction make_red(txt) {\n return colors.red(txt); //display the help text in red on the console\n}\n```\n\n## .help(cb)\n\n Output help information and exit immediately.\n Optional callback cb allows post-processing of help text before it is displayed.\n\n\n## Custom event listeners\n You can execute custom actions by listening to command and option events.\n\n```js\nprogram.on('option:verbose', function () {\n process.env.VERBOSE = this.verbose;\n});\n\n// error on unknown commands\nprogram.on('command:*', function () {\n console.error('Invalid command: %s\\nSee --help for a list of available commands.', program.args.join(' '));\n process.exit(1);\n});\n```\n\n## Examples\n\n```js\nvar program = require('commander');\n\nprogram\n .version('0.1.0')\n .option('-C, --chdir ', 'change the working directory')\n .option('-c, --config ', 'set config path. defaults to ./deploy.conf')\n .option('-T, --no-tests', 'ignore test hook');\n\nprogram\n .command('setup [env]')\n .description('run setup commands for all envs')\n .option(\"-s, --setup_mode [mode]\", \"Which setup mode to use\")\n .action(function(env, options){\n var mode = options.setup_mode || \"normal\";\n env = env || 'all';\n console.log('setup for %s env(s) with %s mode', env, mode);\n });\n\nprogram\n .command('exec ')\n .alias('ex')\n .description('execute the given remote cmd')\n .option(\"-e, --exec_mode \", \"Which exec mode to use\")\n .action(function(cmd, options){\n console.log('exec \"%s\" using %s mode', cmd, options.exec_mode);\n }).on('--help', function() {\n console.log('');\n console.log('Examples:');\n console.log('');\n console.log(' $ deploy exec sequential');\n console.log(' $ deploy exec async');\n });\n\nprogram\n .command('*')\n .action(function(env){\n console.log('deploying \"%s\"', env);\n });\n\nprogram.parse(process.argv);\n```\n\nMore Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.\n\n## License\n\n[MIT](https://github.com/tj/commander.js/blob/master/LICENSE)\n", "readmeFilename": "Readme.md", "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/commander", "error": "[Circular]", "extraneous": false }, "iconv-lite": { "_from": "iconv-lite@0.4", "_id": "iconv-lite@0.4.24", "_inBundle": false, "_integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "_location": "/iconv-lite", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "iconv-lite@0.4", "name": "iconv-lite", "escapedName": "iconv-lite", "rawSpec": "0.4", "saveSpec": "[Circular]", "fetchSpec": "0.4" }, "_requiredBy": [ "/body-parser", "/d3-dsv", "/external-editor", "/raw-body" ], "_resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "_shasum": "2022b4b25fbddc21d2f524974a474aafe733908b", "_spec": "iconv-lite@0.4", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3-dsv", "author": { "name": "Alexander Shtuchkin", "email": "ashtuchkin@gmail.com" }, "browser": { "./lib/extend-node": false, "./lib/streams": false }, "bugs": { "url": "https://github.com/ashtuchkin/iconv-lite/issues" }, "dependencies": { "safer-buffer": { "_from": "safer-buffer@>= 2.1.2 < 3", "_id": "safer-buffer@2.1.2", "_inBundle": false, "_integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "_location": "/safer-buffer", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "safer-buffer@>= 2.1.2 < 3", "name": "safer-buffer", "escapedName": "safer-buffer", "rawSpec": ">= 2.1.2 < 3", "saveSpec": "[Circular]", "fetchSpec": ">= 2.1.2 < 3" }, "_requiredBy": [ "/asn1", "/ecc-jsbn", "/encoding/iconv-lite", "/iconv-lite", "/needle/iconv-lite", "/source-map-loader/iconv-lite", "/sshpk" ], "_resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "_shasum": "44fa161b0187b9549dd84bb91802f9bd8385cd6a", "_spec": "safer-buffer@>= 2.1.2 < 3", "_where": "/builds/gitlab/osm/ng-ui/node_modules/iconv-lite", "author": { "name": "Nikita Skovoroda", "email": "chalkerx@gmail.com", "url": "https://github.com/ChALkeR" }, "bugs": { "url": "https://github.com/ChALkeR/safer-buffer/issues" }, "deprecated": false, "description": "Modern Buffer API polyfill without footguns", "devDependencies": { "standard": "^11.0.1", "tape": "^4.9.0" }, "files": [ "Porting-Buffer.md", "Readme.md", "tests.js", "dangerous.js", "safer.js" ], "homepage": "https://github.com/ChALkeR/safer-buffer#readme", "license": "MIT", "main": "safer.js", "name": "safer-buffer", "repository": { "type": "git", "url": "git+https://github.com/ChALkeR/safer-buffer.git" }, "scripts": { "browserify-test": "browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js", "test": "standard && tape tests.js" }, "version": "2.1.2", "readme": "# safer-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![javascript style guide][standard-image]][standard-url] [![Security Responsible Disclosure][secuirty-image]][secuirty-url]\n\n[travis-image]: https://travis-ci.org/ChALkeR/safer-buffer.svg?branch=master\n[travis-url]: https://travis-ci.org/ChALkeR/safer-buffer\n[npm-image]: https://img.shields.io/npm/v/safer-buffer.svg\n[npm-url]: https://npmjs.org/package/safer-buffer\n[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n[standard-url]: https://standardjs.com\n[secuirty-image]: https://img.shields.io/badge/Security-Responsible%20Disclosure-green.svg\n[secuirty-url]: https://github.com/nodejs/security-wg/blob/master/processes/responsible_disclosure_template.md\n\nModern Buffer API polyfill without footguns, working on Node.js from 0.8 to current.\n\n## How to use?\n\nFirst, port all `Buffer()` and `new Buffer()` calls to `Buffer.alloc()` and `Buffer.from()` API.\n\nThen, to achieve compatibility with outdated Node.js versions (`<4.5.0` and 5.x `<5.9.0`), use\n`const Buffer = require('safer-buffer').Buffer` in all files where you make calls to the new\nBuffer API. _Use `var` instead of `const` if you need that for your Node.js version range support._\n\nAlso, see the\n[porting Buffer](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) guide.\n\n## Do I need it?\n\nHopefully, not — dropping support for outdated Node.js versions should be fine nowdays, and that\nis the recommended path forward. You _do_ need to port to the `Buffer.alloc()` and `Buffer.from()`\nthough.\n\nSee the [porting guide](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md)\nfor a better description.\n\n## Why not [safe-buffer](https://npmjs.com/safe-buffer)?\n\n_In short: while `safe-buffer` serves as a polyfill for the new API, it allows old API usage and\nitself contains footguns._\n\n`safe-buffer` could be used safely to get the new API while still keeping support for older\nNode.js versions (like this module), but while analyzing ecosystem usage of the old Buffer API\nI found out that `safe-buffer` is itself causing problems in some cases.\n\nFor example, consider the following snippet:\n\n```console\n$ cat example.unsafe.js\nconsole.log(Buffer(20))\n$ ./node-v6.13.0-linux-x64/bin/node example.unsafe.js\n\n$ standard example.unsafe.js\nstandard: Use JavaScript Standard Style (https://standardjs.com)\n /home/chalker/repo/safer-buffer/example.unsafe.js:2:13: 'Buffer()' was deprecated since v6. Use 'Buffer.alloc()' or 'Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<4.5.0') instead.\n```\n\nThis is allocates and writes to console an uninitialized chunk of memory.\n[standard](https://www.npmjs.com/package/standard) linter (among others) catch that and warn people\nto avoid using unsafe API.\n\nLet's now throw in `safe-buffer`!\n\n```console\n$ cat example.safe-buffer.js\nconst Buffer = require('safe-buffer').Buffer\nconsole.log(Buffer(20))\n$ standard example.safe-buffer.js\n$ ./node-v6.13.0-linux-x64/bin/node example.safe-buffer.js\n\n```\n\nSee the problem? Adding in `safe-buffer` _magically removes the lint warning_, but the behavior\nremains identiсal to what we had before, and when launched on Node.js 6.x LTS — this dumps out\nchunks of uninitialized memory.\n_And this code will still emit runtime warnings on Node.js 10.x and above._\n\nThat was done by design. I first considered changing `safe-buffer`, prohibiting old API usage or\nemitting warnings on it, but that significantly diverges from `safe-buffer` design. After some\ndiscussion, it was decided to move my approach into a separate package, and _this is that separate\npackage_.\n\nThis footgun is not imaginary — I observed top-downloaded packages doing that kind of thing,\n«fixing» the lint warning by blindly including `safe-buffer` without any actual changes.\n\nAlso in some cases, even if the API _was_ migrated to use of safe Buffer API — a random pull request\ncan bring unsafe Buffer API usage back to the codebase by adding new calls — and that could go\nunnoticed even if you have a linter prohibiting that (becase of the reason stated above), and even\npass CI. _I also observed that being done in popular packages._\n\nSome examples:\n * [webdriverio](https://github.com/webdriverio/webdriverio/commit/05cbd3167c12e4930f09ef7cf93b127ba4effae4#diff-124380949022817b90b622871837d56cR31)\n (a module with 548 759 downloads/month),\n * [websocket-stream](https://github.com/maxogden/websocket-stream/commit/c9312bd24d08271687d76da0fe3c83493871cf61)\n (218 288 d/m, fix in [maxogden/websocket-stream#142](https://github.com/maxogden/websocket-stream/pull/142)),\n * [node-serialport](https://github.com/node-serialport/node-serialport/commit/e8d9d2b16c664224920ce1c895199b1ce2def48c)\n (113 138 d/m, fix in [node-serialport/node-serialport#1510](https://github.com/node-serialport/node-serialport/pull/1510)),\n * [karma](https://github.com/karma-runner/karma/commit/3d94b8cf18c695104ca195334dc75ff054c74eec)\n (3 973 193 d/m, fix in [karma-runner/karma#2947](https://github.com/karma-runner/karma/pull/2947)),\n * [spdy-transport](https://github.com/spdy-http2/spdy-transport/commit/5375ac33f4a62a4f65bcfc2827447d42a5dbe8b1)\n (5 970 727 d/m, fix in [spdy-http2/spdy-transport#53](https://github.com/spdy-http2/spdy-transport/pull/53)).\n * And there are a lot more over the ecosystem.\n\nI filed a PR at\n[mysticatea/eslint-plugin-node#110](https://github.com/mysticatea/eslint-plugin-node/pull/110) to\npartially fix that (for cases when that lint rule is used), but it is a semver-major change for\nlinter rules and presets, so it would take significant time for that to reach actual setups.\n_It also hasn't been released yet (2018-03-20)._\n\nAlso, `safer-buffer` discourages the usage of `.allocUnsafe()`, which is often done by a mistake.\nIt still supports it with an explicit concern barier, by placing it under\n`require('safer-buffer/dangereous')`.\n\n## But isn't throwing bad?\n\nNot really. It's an error that could be noticed and fixed early, instead of causing havoc later like\nunguarded `new Buffer()` calls that end up receiving user input can do.\n\nThis package affects only the files where `var Buffer = require('safer-buffer').Buffer` was done, so\nit is really simple to keep track of things and make sure that you don't mix old API usage with that.\nAlso, CI should hint anything that you might have missed.\n\nNew commits, if tested, won't land new usage of unsafe Buffer API this way.\n_Node.js 10.x also deals with that by printing a runtime depecation warning._\n\n### Would it affect third-party modules?\n\nNo, unless you explicitly do an awful thing like monkey-patching or overriding the built-in `Buffer`.\nDon't do that.\n\n### But I don't want throwing…\n\nThat is also fine!\n\nAlso, it could be better in some cases when you don't comprehensive enough test coverage.\n\nIn that case — just don't override `Buffer` and use\n`var SaferBuffer = require('safer-buffer').Buffer` instead.\n\nThat way, everything using `Buffer` natively would still work, but there would be two drawbacks:\n\n* `Buffer.from`/`Buffer.alloc` won't be polyfilled — use `SaferBuffer.from` and\n `SaferBuffer.alloc` instead.\n* You are still open to accidentally using the insecure deprecated API — use a linter to catch that.\n\nNote that using a linter to catch accidential `Buffer` constructor usage in this case is strongly\nrecommended. `Buffer` is not overriden in this usecase, so linters won't get confused.\n\n## «Without footguns»?\n\nWell, it is still possible to do _some_ things with `Buffer` API, e.g. accessing `.buffer` property\non older versions and duping things from there. You shouldn't do that in your code, probabably.\n\nThe intention is to remove the most significant footguns that affect lots of packages in the\necosystem, and to do it in the proper way.\n\nAlso, this package doesn't protect against security issues affecting some Node.js versions, so for\nusage in your own production code, it is still recommended to update to a Node.js version\n[supported by upstream](https://github.com/nodejs/release#release-schedule).\n", "readmeFilename": "Readme.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/safer-buffer", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Convert character encodings in pure javascript.", "devDependencies": { "async": "*", "errto": "*", "iconv": "*", "istanbul": "*", "mocha": "^3.1.0", "request": "~2.87.0", "semver": "*", "unorm": "*" }, "engines": { "node": ">=0.10.0" }, "homepage": "https://github.com/ashtuchkin/iconv-lite", "keywords": [ "iconv", "convert", "charset", "icu" ], "license": "MIT", "main": "./lib/index.js", "name": "iconv-lite", "repository": { "type": "git", "url": "git://github.com/ashtuchkin/iconv-lite.git" }, "scripts": { "coverage": "istanbul cover _mocha -- --grep .", "coverage-open": "open coverage/lcov-report/index.html", "test": "mocha --reporter spec --grep ." }, "typings": "./lib/index.d.ts", "version": "0.4.24", "readme": "## Pure JS character encoding conversion [![Build Status](https://travis-ci.org/ashtuchkin/iconv-lite.svg?branch=master)](https://travis-ci.org/ashtuchkin/iconv-lite)\n\n * Doesn't need native code compilation. Works on Windows and in sandboxed environments like [Cloud9](http://c9.io).\n * Used in popular projects like [Express.js (body_parser)](https://github.com/expressjs/body-parser), \n [Grunt](http://gruntjs.com/), [Nodemailer](http://www.nodemailer.com/), [Yeoman](http://yeoman.io/) and others.\n * Faster than [node-iconv](https://github.com/bnoordhuis/node-iconv) (see below for performance comparison).\n * Intuitive encode/decode API\n * Streaming support for Node v0.10+\n * [Deprecated] Can extend Node.js primitives (buffers, streams) to support all iconv-lite encodings.\n * In-browser usage via [Browserify](https://github.com/substack/node-browserify) (~180k gzip compressed with Buffer shim included).\n * Typescript [type definition file](https://github.com/ashtuchkin/iconv-lite/blob/master/lib/index.d.ts) included.\n * React Native is supported (need to explicitly `npm install` two more modules: `buffer` and `stream`).\n * License: MIT.\n\n[![NPM Stats](https://nodei.co/npm/iconv-lite.png?downloads=true&downloadRank=true)](https://npmjs.org/packages/iconv-lite/)\n\n## Usage\n### Basic API\n```javascript\nvar iconv = require('iconv-lite');\n\n// Convert from an encoded buffer to js string.\nstr = iconv.decode(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251');\n\n// Convert from js string to an encoded buffer.\nbuf = iconv.encode(\"Sample input string\", 'win1251');\n\n// Check if encoding is supported\niconv.encodingExists(\"us-ascii\")\n```\n\n### Streaming API (Node v0.10+)\n```javascript\n\n// Decode stream (from binary stream to js strings)\nhttp.createServer(function(req, res) {\n var converterStream = iconv.decodeStream('win1251');\n req.pipe(converterStream);\n\n converterStream.on('data', function(str) {\n console.log(str); // Do something with decoded strings, chunk-by-chunk.\n });\n});\n\n// Convert encoding streaming example\nfs.createReadStream('file-in-win1251.txt')\n .pipe(iconv.decodeStream('win1251'))\n .pipe(iconv.encodeStream('ucs2'))\n .pipe(fs.createWriteStream('file-in-ucs2.txt'));\n\n// Sugar: all encode/decode streams have .collect(cb) method to accumulate data.\nhttp.createServer(function(req, res) {\n req.pipe(iconv.decodeStream('win1251')).collect(function(err, body) {\n assert(typeof body == 'string');\n console.log(body); // full request body string\n });\n});\n```\n\n### [Deprecated] Extend Node.js own encodings\n> NOTE: This doesn't work on latest Node versions. See [details](https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility).\n\n```javascript\n// After this call all Node basic primitives will understand iconv-lite encodings.\niconv.extendNodeEncodings();\n\n// Examples:\nbuf = new Buffer(str, 'win1251');\nbuf.write(str, 'gbk');\nstr = buf.toString('latin1');\nassert(Buffer.isEncoding('iso-8859-15'));\nBuffer.byteLength(str, 'us-ascii');\n\nhttp.createServer(function(req, res) {\n req.setEncoding('big5');\n req.collect(function(err, body) {\n console.log(body);\n });\n});\n\nfs.createReadStream(\"file.txt\", \"shift_jis\");\n\n// External modules are also supported (if they use Node primitives, which they probably do).\nrequest = require('request');\nrequest({\n url: \"http://github.com/\", \n encoding: \"cp932\"\n});\n\n// To remove extensions\niconv.undoExtendNodeEncodings();\n```\n\n## Supported encodings\n\n * All node.js native encodings: utf8, ucs2 / utf16-le, ascii, binary, base64, hex.\n * Additional unicode encodings: utf16, utf16-be, utf-7, utf-7-imap.\n * All widespread singlebyte encodings: Windows 125x family, ISO-8859 family, \n IBM/DOS codepages, Macintosh family, KOI8 family, all others supported by iconv library. \n Aliases like 'latin1', 'us-ascii' also supported.\n * All widespread multibyte encodings: CP932, CP936, CP949, CP950, GB2312, GBK, GB18030, Big5, Shift_JIS, EUC-JP.\n\nSee [all supported encodings on wiki](https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings).\n\nMost singlebyte encodings are generated automatically from [node-iconv](https://github.com/bnoordhuis/node-iconv). Thank you Ben Noordhuis and libiconv authors!\n\nMultibyte encodings are generated from [Unicode.org mappings](http://www.unicode.org/Public/MAPPINGS/) and [WHATWG Encoding Standard mappings](http://encoding.spec.whatwg.org/). Thank you, respective authors!\n\n\n## Encoding/decoding speed\n\nComparison with node-iconv module (1000x256kb, on MacBook Pro, Core i5/2.6 GHz, Node v0.12.0). \nNote: your results may vary, so please always check on your hardware.\n\n operation iconv@2.1.4 iconv-lite@0.4.7\n ----------------------------------------------------------\n encode('win1251') ~96 Mb/s ~320 Mb/s\n decode('win1251') ~95 Mb/s ~246 Mb/s\n\n## BOM handling\n\n * Decoding: BOM is stripped by default, unless overridden by passing `stripBOM: false` in options\n (f.ex. `iconv.decode(buf, enc, {stripBOM: false})`).\n A callback might also be given as a `stripBOM` parameter - it'll be called if BOM character was actually found.\n * If you want to detect UTF-8 BOM when decoding other encodings, use [node-autodetect-decoder-stream](https://github.com/danielgindi/node-autodetect-decoder-stream) module.\n * Encoding: No BOM added, unless overridden by `addBOM: true` option.\n\n## UTF-16 Encodings\n\nThis library supports UTF-16LE, UTF-16BE and UTF-16 encodings. First two are straightforward, but UTF-16 is trying to be\nsmart about endianness in the following ways:\n * Decoding: uses BOM and 'spaces heuristic' to determine input endianness. Default is UTF-16LE, but can be \n overridden with `defaultEncoding: 'utf-16be'` option. Strips BOM unless `stripBOM: false`.\n * Encoding: uses UTF-16LE and writes BOM by default. Use `addBOM: false` to override.\n\n## Other notes\n\nWhen decoding, be sure to supply a Buffer to decode() method, otherwise [bad things usually happen](https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding). \nUntranslatable characters are set to � or ?. No transliteration is currently supported. \nNode versions 0.10.31 and 0.11.13 are buggy, don't use them (see #65, #77). \n\n## Testing\n\n```bash\n$ git clone git@github.com:ashtuchkin/iconv-lite.git\n$ cd iconv-lite\n$ npm install\n$ npm test\n \n$ # To view performance:\n$ node test/performance.js\n\n$ # To view test coverage:\n$ npm run coverage\n$ open coverage/lcov-report/index.html\n```\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/iconv-lite", "error": "[Circular]", "extraneous": false }, "rw": { "_from": "rw@1", "_id": "rw@1.3.3", "_inBundle": false, "_integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", "_location": "/rw", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "rw@1", "name": "rw", "escapedName": "rw", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3-dsv" ], "_resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "_shasum": "3f862dfa91ab766b14885ef4d01124bfda074fb4", "_spec": "rw@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3-dsv", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/mbostock/rw/issues" }, "deprecated": false, "description": "Now stdin and stdout are files.", "devDependencies": { "d3-queue": "3", "eslint": "3" }, "homepage": "https://github.com/mbostock/rw", "keywords": [ "fs", "readFile", "writeFile", "stdin", "stdout" ], "license": "BSD-3-Clause", "main": "index.js", "name": "rw", "repository": { "type": "git", "url": "git+ssh://git@github.com/mbostock/rw.git" }, "scripts": { "postpublish": "git push && git push --tags", "prepublish": "npm test", "test": "test/run-tests && eslint index.js lib" }, "version": "1.3.3", "readme": "# rw - Now stdin and stdout are files.\n\nHow do you read a file from stdin? If you thought,\n\n```js\nvar contents = fs.readFileSync(\"/dev/stdin\", \"utf8\");\n```\n\nyou’d be wrong, because Node only reads up to the size of the file reported by fs.stat rather than reading until it receives an EOF. So, if you redirect a file to your program (`cat file | program`), you’ll only read the first 65,536 bytes of your file. Oops.\n\nWhat about writing a file to stdout? If you thought,\n\n```js\nfs.writeFileSync(\"/dev/stdout\", contents, \"utf8\");\n```\n\nyou’d also be wrong, because this tries to close stdout, so you get this error:\n\n```\nError: UNKNOWN, unknown error\n at Object.fs.writeSync (fs.js:528:18)\n at Object.fs.writeFileSync (fs.js:975:21)\n```\n\n(Also, this doesn’t work on Windows, because Windows doesn’t support /dev/stdout, /dev/stdin and /dev/stderr!)\n\nShucks. So what should you do?\n\nYou could use a different pattern for reading from stdin:\n\n```js\nvar chunks = [];\n\nprocess.stdin\n .on(\"data\", function(chunk) { chunks.push(chunk); })\n .on(\"end\", function() { console.log(chunks.join(\"\").length); })\n .setEncoding(\"utf8\");\n```\n\nBut that’s a pain, since now your code has two different code paths for reading inputs depending on whether you’re reading a real file or stdin. And the code gets even more complex if you want to [read that file synchronously](https://github.com/mbostock/rw/blob/master/lib/rw/read-file-sync.js).\n\nYou could also try a different pattern for writing to stdout:\n\n```js\nprocess.stdout.write(contents);\n```\n\nOr even:\n\n```js\nconsole.log(contents);\n```\n\nBut if you try to pipe your output to `head`, you’ll get this error:\n\n```\nError: write EPIPE\n at errnoException (net.js:904:11)\n at Object.afterWrite (net.js:720:19)\n```\n\nHuh.\n\nThe **rw** module fixes these problems. It provides an interface just like readFile, readFileSync, writeFile and writeFileSync, but with implementations that work the way you expect on stdin and stdout. If you use these methods on files other than /dev/stdin or /dev/stdout, they simply delegate to the fs methods, so you can trust that they behave identically to the methods you’re used to.\n\nFor example, now you can read stdin synchronously like so:\n\n```js\nvar contents = rw.readFileSync(\"/dev/stdin\", \"utf8\");\n```\n\nOr to write to stdout:\n\n```js\nrw.writeFileSync(\"/dev/stdout\", contents, \"utf8\");\n```\n\nAnd rw automatically squashes EPIPE errors, so you can pipe the output of your program to `head` and you won’t get a spurious stack trace.\n\nTo install, `npm install rw`.\n\n### Note\n\nIf you want to read synchronously from stdin using [readFileSync](#readFileSync), you cannot also use process.stdin in the same program. Likewise, if you want to write synchronously to stdout or stderr using [writeFileSync](#writeFileSync), you cannot use process.stdout or process.stderr, respectively. (This includes using console.log and the like!) Failure to heed this warning may result in error: EAGAIN, resource temporarily unavailable. Unfortunately, it does not appear possible for this library to fix this issue automatically, so please use caution.\n\nOnly the asynchronous methods [readFile](#readFile) and [writeFile](#writeFile) are supported on Windows. Node has no synchronous API for reading from process.[stdin](https://nodejs.org/api/process.html#process_process_stdin) or writing to process.[stdout](https://nodejs.org/api/process.html#process_process_stdout) or process.[stderr](https://nodejs.org/api/process.html#process_process_stderr), so you’re out of luck!\n\n## API Reference\n\n# rw.readFile(path[, options], callback)\n\nReads the file at the specified *path* completely into memory, invoking the specified *callback* once the data is available and the file is closed. The *callback* is invoked with two arguments: the *error* that occurred during read (hopefully null), and the read data. If *options* is a string, it specifies the encoding to use, in which case the read data will be a string; otherwise *options* is an object, and may specify encoding and flag properties. This method is a drop-in replacement for [fs.readFile](https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback) and fixes the behavior of special files such as /dev/stdin.\n\n# rw.readFileSync(path[, options])\n\nReads the file at the specified *path* completely into memory, synchronously, returning the data. If an error occurred during read, this function throws an error instead. If *options* is a string, it specifies the encoding to use, in which case the read data will be a string; otherwise *options* is an object, and may specify encoding and flag properties. This method is a drop-in replacement for [fs.readFileSync](https://nodejs.org/api/fs.html#fs_fs_readfilesync_file_options) and fixes the behavior of special files such as /dev/stdin.\n\n# rw.writeFile(path, data[, options], callback)\n\nWrites the specified *data* (completely in memory) to a file at the specified *path*, invoking the specified *callback* once the data is completely written and the file is closed. The *callback* is invoked with a single argument: the *error* that occurred during write (hopefully null). If *options* is a string, it specifies the encoding to use, in which case the *data* must be a string; otherwise *options* is an object, and may specify encoding, mode and flag properties. This method is a drop-in replacement for [fs.writeFile](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback) and fixes the behavior of special files such as /dev/stdout.\n\n# rw.writeFileSync(path, data[, options])\n\nWrites the specified *data* (completely in memory) to a file at the specified *path*, synchronously, returning once the data is completely written and the file is closed. Throws an *error* if one occurs during write. If *options* is a string, it specifies the encoding to use, in which case the *data* must be a string; otherwise *options* is an object, and may specify encoding, mode and flag properties. This method is a drop-in replacement for [fs.writeFileSync](https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options) and fixes the behavior of special files such as /dev/stdout.\n\n# rw.dash.readFile(path[, options], callback)\n\nEquivalent to [rw.readFile](#readFile), except treats a *path* of `-` as `/dev/stdin`. Useful for command-line arguments.\n\n# rw.dash.readFileSync(path[, options])\n\nEquivalent to [rw.readFileSync](#readFileSync), except treats a *path* of `-` as `/dev/stdin`. Useful for command-line arguments.\n\n# rw.dash.writeFile(path, data[, options], callback)\n\nEquivalent to [rw.writeFile](#writeFile), except treats a *path* of `-` as `/dev/stdout`. Useful for command-line arguments.\n\n# rw.dash.writeFileSync(path, data[, options])\n\nEquivalent to [rw.writeFileSync](#writeFileSync), except treats a *path* of `-` as `/dev/stdout`. Useful for command-line arguments.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/rw", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "A parser and formatter for delimiter-separated values, such as CSV and TSV", "devDependencies": { "csv-spectrum": "1", "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "bin/*", "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-dsv/", "jsdelivr": "dist/d3-dsv.min.js", "keywords": [ "d3", "d3-module", "dsv", "csv", "tsv" ], "license": "BSD-3-Clause", "main": "dist/d3-dsv.js", "module": "src/index.js", "name": "d3-dsv", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-dsv.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "TZ=America/Los_Angeles tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": false, "unpkg": "dist/d3-dsv.min.js", "version": "1.2.0", "readme": "# d3-dsv\n\nThis module provides a parser and formatter for delimiter-separated values, most commonly [comma-](https://en.wikipedia.org/wiki/Comma-separated_values) (CSV) or tab-separated values (TSV). These tabular formats are popular with spreadsheet programs such as Microsoft Excel, and are often more space-efficient than JSON. This implementation is based on [RFC 4180](http://tools.ietf.org/html/rfc4180).\n\nComma (CSV) and tab (TSV) delimiters are built-in. For example, to parse:\n\n```js\nd3.csvParse(\"foo,bar\\n1,2\"); // [{foo: \"1\", bar: \"2\"}, columns: [\"foo\", \"bar\"]]\nd3.tsvParse(\"foo\\tbar\\n1\\t2\"); // [{foo: \"1\", bar: \"2\"}, columns: [\"foo\", \"bar\"]]\n```\n\nOr to format:\n\n```js\nd3.csvFormat([{foo: \"1\", bar: \"2\"}]); // \"foo,bar\\n1,2\"\nd3.tsvFormat([{foo: \"1\", bar: \"2\"}]); // \"foo\\tbar\\n1\\t2\"\n```\n\nTo use a different delimiter, such as “|” for pipe-separated values, use [d3.dsvFormat](#dsvFormat):\n\n```js\nvar psv = d3.dsvFormat(\"|\");\n\nconsole.log(psv.parse(\"foo|bar\\n1|2\")); // [{foo: \"1\", bar: \"2\"}, columns: [\"foo\", \"bar\"]]\n```\n\nFor easy loading of DSV files in a browser, see [d3-fetch](https://github.com/d3/d3-fetch)’s [d3.csv](https://github.com/d3/d3-fetch/blob/master/README.md#csv) and [d3.tsv](https://github.com/d3/d3-fetch/blob/master/README.md#tsv) methods.\n\n## Installing\n\nIf you use NPM, `npm install d3-dsv`. Otherwise, download the [latest release](https://github.com/d3/d3-dsv/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-dsv.v1.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\n\n```\n\n[Try d3-dsv in your browser.](https://tonicdev.com/npm/d3-dsv)\n\n## API Reference\n\n# d3.csvParse(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[parse](#dsv_parse).\n\n# d3.csvParseRows(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[parseRows](#dsv_parseRows).\n\n# d3.csvFormat(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[format](#dsv_format).\n\n# d3.csvFormatBody(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[formatBody](#dsv_formatBody).\n\n# d3.csvFormatRows(rows) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[formatRows](#dsv_formatRows).\n\n# d3.csvFormatRow(row) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[formatRow](#dsv_formatRow).\n\n# d3.csvFormatValue(value) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[formatValue](#dsv_formatValue).\n\n# d3.tsvParse(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[parse](#dsv_parse).\n\n# d3.tsvParseRows(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[parseRows](#dsv_parseRows).\n\n# d3.tsvFormat(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[format](#dsv_format).\n\n# d3.tsvFormatBody(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[formatBody](#dsv_formatBody).\n\n# d3.tsvFormatRows(rows) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[formatRows](#dsv_formatRows).\n\n# d3.tsvFormatRow(row) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[formatRow](#dsv_formatRow).\n\n# d3.tsvFormatValue(value) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[formatValue](#dsv_formatValue).\n\n# d3.dsvFormat(delimiter) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js)\n\nConstructs a new DSV parser and formatter for the specified *delimiter*. The *delimiter* must be a single character (*i.e.*, a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.\n\n# *dsv*.parse(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nParses the specified *string*, which must be in the delimiter-separated values format with the appropriate delimiter, returning an array of objects representing the parsed rows.\n\nUnlike [*dsv*.parseRows](#dsv_parseRows), this method requires that the first line of the DSV content contains a delimiter-separated list of column names; these column names become the attributes on the returned objects. For example, consider the following CSV file:\n\n```\nYear,Make,Model,Length\n1997,Ford,E350,2.34\n2000,Mercury,Cougar,2.38\n```\n\nThe resulting JavaScript array is:\n\n```js\n[\n {\"Year\": \"1997\", \"Make\": \"Ford\", \"Model\": \"E350\", \"Length\": \"2.34\"},\n {\"Year\": \"2000\", \"Make\": \"Mercury\", \"Model\": \"Cougar\", \"Length\": \"2.38\"}\n]\n```\n\nThe returned array also exposes a `columns` property containing the column names in input order (in contrast to Object.keys, whose iteration order is arbitrary). For example:\n\n```js\ndata.columns; // [\"Year\", \"Make\", \"Model\", \"Length\"]\n```\n\nIf a *row* conversion function is not specified, field values are strings. For safety, there is no automatic conversion to numbers, dates, or other types. In some cases, JavaScript may coerce strings to numbers for you automatically (for example, using the `+` operator), but better is to specify a *row* conversion function. See [d3.autoType](#autoType) for a convenient *row* conversion function that infers and coerces common types like numbers and strings.\n\nIf a *row* conversion function is specified, the specified function is invoked for each row, being passed an object representing the current row (`d`), the index (`i`) starting at zero for the first non-header row, and the array of column names. If the returned value is null or undefined, the row is skipped and will be omitted from the array returned by *dsv*.parse; otherwise, the returned value defines the corresponding row object. For example:\n\n```js\nvar data = d3.csvParse(string, function(d) {\n return {\n year: new Date(+d.Year, 0, 1), // lowercase and convert \"Year\" to Date\n make: d.Make, // lowercase\n model: d.Model, // lowercase\n length: +d.Length // lowercase and convert \"Length\" to number\n };\n});\n```\n\nNote: using `+` rather than [parseInt](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt) or [parseFloat](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseFloat) is typically faster, though more restrictive. For example, `\"30px\"` when coerced using `+` returns `NaN`, while parseInt and parseFloat return `30`.\n\n# dsv.parseRows(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nParses the specified *string*, which must be in the delimiter-separated values format with the appropriate delimiter, returning an array of arrays representing the parsed rows.\n\nUnlike [*dsv*.parse](#dsv_parse), this method treats the header line as a standard row, and should be used whenever DSV content does not contain a header. Each row is represented as an array rather than an object. Rows may have variable length. For example, consider the following CSV file, which notably lacks a header line:\n\n```\n1997,Ford,E350,2.34\n2000,Mercury,Cougar,2.38\n```\n\nThe resulting JavaScript array is:\n\n```js\n[\n [\"1997\", \"Ford\", \"E350\", \"2.34\"],\n [\"2000\", \"Mercury\", \"Cougar\", \"2.38\"]\n]\n```\n\nIf a *row* conversion function is not specified, field values are strings. For safety, there is no automatic conversion to numbers, dates, or other types. In some cases, JavaScript may coerce strings to numbers for you automatically (for example, using the `+` operator), but better is to specify a *row* conversion function. See [d3.autoType](#autoType) for a convenient *row* conversion function that infers and coerces common types like numbers and strings.\n\nIf a *row* conversion function is specified, the specified function is invoked for each row, being passed an array representing the current row (`d`), the index (`i`) starting at zero for the first row, and the array of column names. If the returned value is null or undefined, the row is skipped and will be omitted from the array returned by *dsv*.parse; otherwise, the returned value defines the corresponding row object. For example:\n\n```js\nvar data = d3.csvParseRows(string, function(d, i) {\n return {\n year: new Date(+d[0], 0, 1), // convert first colum column to Date\n make: d[1],\n model: d[2],\n length: +d[3] // convert fourth column to number\n };\n});\n```\n\nIn effect, *row* is similar to applying a [map](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map) and [filter](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter) operator to the returned rows.\n\n# dsv.format(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nFormats the specified array of object *rows* as delimiter-separated values, returning a string. This operation is the inverse of [*dsv*.parse](#dsv_parse). Each row will be separated by a newline (`\\n`), and each column within each row will be separated by the delimiter (such as a comma, `,`). Values that contain either the delimiter, a double-quote (`\"`) or a newline will be escaped using double-quotes.\n\nIf *columns* is not specified, the list of column names that forms the header row is determined by the union of all properties on all objects in *rows*; the order of columns is nondeterministic. If *columns* is specified, it is an array of strings representing the column names. For example:\n\n```js\nvar string = d3.csvFormat(data, [\"year\", \"make\", \"model\", \"length\"]);\n```\n\nAll fields on each row object will be coerced to strings. If the field value is null or undefined, the empty string is used. If the field value is a Date, the [ECMAScript date-time string format](https://www.ecma-international.org/ecma-262/9.0/index.html#sec-date-time-string-format) (a subset of ISO 8601) is used: for example, dates at UTC midnight are formatted as `YYYY-MM-DD`. For more control over which and how fields are formatted, first map *rows* to an array of array of string, and then use [*dsv*.formatRows](#dsv_formatRows).\n\n# dsv.formatBody(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nEquivalent to [*dsv*.format](#dsv_format), but omits the header row. This is useful, for example, when appending rows to an existing file.\n\n# dsv.formatRows(rows) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nFormats the specified array of array of string *rows* as delimiter-separated values, returning a string. This operation is the reverse of [*dsv*.parseRows](#dsv_parseRows). Each row will be separated by a newline (`\\n`), and each column within each row will be separated by the delimiter (such as a comma, `,`). Values that contain either the delimiter, a double-quote (\") or a newline will be escaped using double-quotes.\n\nTo convert an array of objects to an array of arrays while explicitly specifying the columns, use [*array*.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map). For example:\n\n```js\nvar string = d3.csvFormatRows(data.map(function(d, i) {\n return [\n d.year.getFullYear(), // Assuming d.year is a Date object.\n d.make,\n d.model,\n d.length\n ];\n}));\n```\n\nIf you like, you can also [*array*.concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) this result with an array of column names to generate the first row:\n\n```js\nvar string = d3.csvFormatRows([[\n \"year\",\n \"make\",\n \"model\",\n \"length\"\n ]].concat(data.map(function(d, i) {\n return [\n d.year.getFullYear(), // Assuming d.year is a Date object.\n d.make,\n d.model,\n d.length\n ];\n})));\n```\n\n# dsv.formatRow(row) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nFormats a single array *row* of strings as delimiter-separated values, returning a string. Each column within the row will be separated by the delimiter (such as a comma, `,`). Values that contain either the delimiter, a double-quote (\") or a newline will be escaped using double-quotes.\n\n# dsv.formatValue(value) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nFormat a single *value* or string as a delimiter-separated value, returning a string. A value that contains either the delimiter, a double-quote (\") or a newline will be escaped using double-quotes.\n\n# d3.autoType(object) [<>](https://github.com/d3/d3-dsv/blob/master/src/autoType.js \"Source\")\n\nGiven an *object* (or array) representing a parsed row, infers the types of values on the *object* and coerces them accordingly, returning the mutated *object*. This function is intended to be used as a *row* accessor function in conjunction with [*dsv*.parse](#dsv_parse) and [*dsv*.parseRows](#dsv_parseRow). For example, consider the following CSV file:\n\n```\nYear,Make,Model,Length\n1997,Ford,E350,2.34\n2000,Mercury,Cougar,2.38\n```\n\nWhen used with [d3.csvParse](#csvParse),\n\n```js\nd3.csvParse(string, d3.autoType)\n```\n\nthe resulting JavaScript array is:\n\n```js\n[\n {\"Year\": 1997, \"Make\": \"Ford\", \"Model\": \"E350\", \"Length\": 2.34},\n {\"Year\": 2000, \"Make\": \"Mercury\", \"Model\": \"Cougar\", \"Length\": 2.38}\n]\n```\n\nType inference works as follows. For each *value* in the given *object*, the [trimmed](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim) value is computed; the value is then re-assigned as follows:\n\n1. If empty, then `null`.\n1. If exactly `\"true\"`, then `true`.\n1. If exactly `\"false\"`, then `false`.\n1. If exactly `\"NaN\"`, then `NaN`.\n1. Otherwise, if [coercible to a number](https://www.ecma-international.org/ecma-262/9.0/index.html#sec-tonumber-applied-to-the-string-type), then a number.\n1. Otherwise, if a [date-only or date-time string](https://www.ecma-international.org/ecma-262/9.0/index.html#sec-date-time-string-format), then a Date.\n1. Otherwise, a string (the original untrimmed value).\n\nValues with leading zeroes may be coerced to numbers; for example `\"08904\"` coerces to `8904`. However, extra characters such as commas or units (*e.g.*, `\"$1.00\"`, `\"(123)\"`, `\"1,234\"` or `\"32px\"`) will prevent number coercion, resulting in a string.\n\nDate strings must be in ECMAScript’s subset of the [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601). When a date-only string such as YYYY-MM-DD is specified, the inferred time is midnight UTC; however, if a date-time string such as YYYY-MM-DDTHH:MM is specified without a time zone, it is assumed to be local time.\n\nAutomatic type inference is primarily intended to provide safe, predictable behavior in conjunction with [*dsv*.format](#dsv_format) and [*dsv*.formatRows](#dsv_formatRows) for common JavaScript types. If you need different behavior, you should implement your own row accessor function.\n\nFor more, see [the d3.autoType notebook](https://observablehq.com/@d3/d3-autotype).\n\n### Content Security Policy\n\nIf a [content security policy](http://www.w3.org/TR/CSP/) is in place, note that [*dsv*.parse](#dsv_parse) requires `unsafe-eval` in the `script-src` directive, due to the (safe) use of dynamic code generation for fast parsing. (See [source](https://github.com/d3/d3-dsv/blob/master/src/dsv.js).) Alternatively, use [*dsv*.parseRows](#dsv_parseRows).\n\n### Byte-Order Marks\n\nDSV files sometimes begin with a [byte order mark (BOM)](https://en.wikipedia.org/wiki/Byte_order_mark); saving a spreadsheet in CSV UTF-8 format from Microsoft Excel, for example, will include a BOM. On the web this is not usually a problem because the [UTF-8 decode algorithm](https://encoding.spec.whatwg.org/#utf-8-decode) specified in the Encoding standard removes the BOM. Node.js, on the other hand, [does not remove the BOM](https://github.com/nodejs/node-v0.x-archive/issues/1918) when decoding UTF-8.\n\nIf the BOM is not removed, the first character of the text is a zero-width non-breaking space. So if a CSV file with a BOM is parsed by [d3.csvParse](#csvParse), the first column’s name will begin with a zero-width non-breaking space. This can be hard to spot since this character is usually invisible when printed.\n\nTo remove the BOM before parsing, consider using [strip-bom](https://www.npmjs.com/package/strip-bom).\n\n## Command Line Reference\n\n### dsv2dsv\n\n# dsv2dsv [options…] [file]\n\nConverts the specified DSV input *file* to DSV (typically with a different delimiter or encoding). If *file* is not specified, defaults to reading from stdin. For example, to convert to CSV to TSV:\n\n```\ncsv2tsv < example.csv > example.tsv\n```\n\nTo convert windows-1252 CSV to utf-8 CSV:\n\n```\ndsv2dsv --input-encoding windows-1252 < latin1.csv > utf8.csv\n```\n\n# dsv2dsv -h\n
# dsv2dsv --help\n\nOutput usage information.\n\n# dsv2dsv -V\n
# dsv2dsv --version\n\nOutput the version number.\n\n# dsv2dsv -o file\n
# dsv2dsv --out file\n\nSpecify the output file name. Defaults to “-” for stdout.\n\n# dsv2dsv -r delimiter\n
# dsv2dsv --input-delimiter delimiter\n\nSpecify the input delimiter character. Defaults to “,” for reading CSV. (You can enter a tab on the command line by typing ⌃V.)\n\n# dsv2dsv --input-encoding encoding\n\nSpecify the input character encoding. Defaults to “utf8”.\n\n# dsv2dsv -w delimiter\n
# dsv2dsv --output-delimiter delimiter\n\nSpecify the output delimiter character. Defaults to “,” for writing CSV. (You can enter a tab on the command line by typing ⌃V.)\n\n# dsv2dsv --output-encoding encoding\n\nSpecify the output character encoding. Defaults to “utf8”.\n\n# csv2tsv [options…] [file]\n\nEquivalent to [dsv2dsv](#dsv2dsv), but the [output delimiter](#dsv2dsv_output_delimiter) defaults to the tab character (\\t).\n\n# tsv2csv [options…] [file]\n\nEquivalent to [dsv2dsv](#dsv2dsv), but the [input delimiter](#dsv2dsv_output_delimiter) defaults to the tab character (\\t).\n\n### dsv2json\n\n# dsv2json [options…] [file]\n\nConverts the specified DSV input *file* to JSON. If *file* is not specified, defaults to reading from stdin. For example, to convert to CSV to JSON:\n\n```\ncsv2json < example.csv > example.json\n```\n\nOr to convert CSV to a newline-delimited JSON stream:\n\n```\ncsv2json -n < example.csv > example.ndjson\n```\n\n# dsv2json -h\n
# dsv2json --help\n\nOutput usage information.\n\n# dsv2json -V\n
# dsv2json --version\n\nOutput the version number.\n\n# dsv2json -o file\n
# dsv2json --out file\n\nSpecify the output file name. Defaults to “-” for stdout.\n\n# dsv2json -r delimiter\n
# dsv2json --input-delimiter delimiter\n\nSpecify the input delimiter character. Defaults to “,” for reading CSV. (You can enter a tab on the command line by typing ⌃V.)\n\n# dsv2json --input-encoding encoding\n\nSpecify the input character encoding. Defaults to “utf8”.\n\n# dsv2json -r encoding\n
# dsv2json --output-encoding encoding\n\nSpecify the output character encoding. Defaults to “utf8”.\n\n# dsv2json -n\n
# dsv2json --newline-delimited\n\nOutput [newline-delimited JSON](https://github.com/mbostock/ndjson-cli) instead of a single JSON array.\n\n# csv2json [options…] [file]\n\nEquivalent to [dsv2json](#dsv2json).\n\n# tsv2json [options…] [file]\n\nEquivalent to [dsv2json](#dsv2json), but the [input delimiter](#dsv2json_input_delimiter) defaults to the tab character (\\t).\n\n### json2dsv\n\n# json2dsv [options…] [file]\n\nConverts the specified JSON input *file* to DSV. If *file* is not specified, defaults to reading from stdin. For example, to convert to JSON to CSV:\n\n```\njson2csv < example.json > example.csv\n```\n\nOr to convert a newline-delimited JSON stream to CSV:\n\n```\njson2csv -n < example.ndjson > example.csv\n```\n\n# json2dsv -h\n
# json2dsv --help\n\nOutput usage information.\n\n# json2dsv -V\n
# json2dsv --version\n\nOutput the version number.\n\n# json2dsv -o file\n
# json2dsv --out file\n\nSpecify the output file name. Defaults to “-” for stdout.\n\n# json2dsv --input-encoding encoding\n\nSpecify the input character encoding. Defaults to “utf8”.\n\n# json2dsv -w delimiter\n
# json2dsv --output-delimiter delimiter\n\nSpecify the output delimiter character. Defaults to “,” for writing CSV. (You can enter a tab on the command line by typing ⌃V.)\n\n# json2dsv --output-encoding encoding\n\nSpecify the output character encoding. Defaults to “utf8”.\n\n# json2dsv -n\n
# json2dsv --newline-delimited\n\nRead [newline-delimited JSON](https://github.com/mbostock/ndjson-cli) instead of a single JSON array.\n\n# csv2json [options…] [file]\n\nEquivalent to [json2dsv](#json2dsv).\n\n# tsv2json [options…] [file]\n\nEquivalent to [json2dsv](#json2dsv), but the [output delimiter](#json2dsv_output_delimiter) defaults to the tab character (\\t).\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "commander": "2", "iconv-lite": "0.4", "rw": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-dsv", "error": "[Circular]", "extraneous": false }, "d3-ease": { "_from": "d3-ease@1", "_id": "d3-ease@1.0.7", "_inBundle": false, "_integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", "_location": "/d3-ease", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-ease@1", "name": "d3-ease", "escapedName": "d3-ease", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-transition" ], "_resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", "_shasum": "9a834890ef8b8ae8c558b2fe55bd57f5993b85e2", "_spec": "d3-ease@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-ease/issues" }, "deprecated": false, "description": "Easing functions for smooth animation.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-ease/", "jsdelivr": "dist/d3-ease.min.js", "keywords": [ "d3", "d3-module", "ease", "easing", "animation", "transition" ], "license": "BSD-3-Clause", "main": "dist/d3-ease.js", "module": "src/index.js", "name": "d3-ease", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-ease.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": false, "unpkg": "dist/d3-ease.min.js", "version": "1.0.7", "readme": "# d3-ease\n\n*Easing* is a method of distorting time to control apparent motion in animation. It is most commonly used for [slow-in, slow-out](https://en.wikipedia.org/wiki/12_basic_principles_of_animation#Slow_In_and_Slow_Out). By easing time, [animated transitions](https://github.com/d3/d3-transition) are smoother and exhibit more plausible motion.\n\nThe easing types in this module implement the [ease method](#ease_ease), which takes a normalized time *t* and returns the corresponding “eased” time *tʹ*. Both the normalized time and the eased time are typically in the range [0,1], where 0 represents the start of the animation and 1 represents the end; some easing types, such as [elastic](#easeElastic), may return eased times slightly outside this range. A good easing type should return 0 if *t* = 0 and 1 if *t* = 1. See the [easing explorer](https://observablehq.com/@d3/easing) for a visual demonstration.\n\nThese easing types are largely based on work by [Robert Penner](http://robertpenner.com/easing/).\n\n## Installing\n\nIf you use NPM, `npm install d3-ease`. Otherwise, download the [latest release](https://github.com/d3/d3-ease/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-ease.v1.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\n\n```\n\n[Try d3-ease in your browser.](https://observablehq.com/@d3/easing-animations)\n\n## API Reference\n\n# ease(t)\n\nGiven the specified normalized time *t*, typically in the range [0,1], returns the “eased” time *tʹ*, also typically in [0,1]. 0 represents the start of the animation and 1 represents the end. A good implementation returns 0 if *t* = 0 and 1 if *t* = 1. See the [easing explorer](https://observablehq.com/@d3/easing) for a visual demonstration. For example, to apply [cubic](#easeCubic) easing:\n\n```js\nvar te = d3.easeCubic(t);\n```\n\nSimilarly, to apply custom [elastic](#easeElastic) easing:\n\n```js\n// Before the animation starts, create your easing function.\nvar customElastic = d3.easeElastic.period(0.4);\n\n// During the animation, apply the easing function.\nvar te = customElastic(t);\n```\n\n# d3.easeLinear(t) [<>](https://github.com/d3/d3-ease/blob/master/src/linear.js \"Source\")\n\nLinear easing; the identity function; *linear*(*t*) returns *t*.\n\n[\"linear\"](https://observablehq.com/@d3/easing#linear)\n\n# d3.easePolyIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L3 \"Source\")\n\nPolynomial easing; raises *t* to the specified [exponent](#poly_exponent). If the exponent is not specified, it defaults to 3, equivalent to [cubicIn](#easeCubicIn).\n\n[\"polyIn\"](https://observablehq.com/@d3/easing#polyIn)\n\n# d3.easePolyOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L15 \"Source\")\n\nReverse polynomial easing; equivalent to 1 - [polyIn](#easePolyIn)(1 - *t*). If the [exponent](#poly_exponent) is not specified, it defaults to 3, equivalent to [cubicOut](#easeCubicOut).\n\n[\"polyOut\"](https://observablehq.com/@d3/easing#polyOut)\n\n# d3.easePoly(t) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js \"Source\")\n
# d3.easePolyInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L27 \"Source\")\n\nSymmetric polynomial easing; scales [polyIn](#easePolyIn) for *t* in [0, 0.5] and [polyOut](#easePolyOut) for *t* in [0.5, 1]. If the [exponent](#poly_exponent) is not specified, it defaults to 3, equivalent to [cubic](#easeCubic).\n\n[\"polyInOut\"](https://observablehq.com/@d3/easing#polyInOut)\n\n# poly.exponent(e) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L1 \"Source\")\n\nReturns a new polynomial easing with the specified exponent *e*. For example, to create equivalents of [linear](#easeLinear), [quad](#easeQuad), and [cubic](#easeCubic):\n\n```js\nvar linear = d3.easePoly.exponent(1),\n quad = d3.easePoly.exponent(2),\n cubic = d3.easePoly.exponent(3);\n```\n\n# d3.easeQuadIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L1 \"Source\")\n\nQuadratic easing; equivalent to [polyIn](#easePolyIn).[exponent](#poly_exponent)(2).\n\n[\"quadIn\"](https://observablehq.com/@d3/easing#quadIn)\n\n# d3.easeQuadOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L5 \"Source\")\n\nReverse quadratic easing; equivalent to 1 - [quadIn](#easeQuadIn)(1 - *t*). Also equivalent to [polyOut](#easePolyOut).[exponent](#poly_exponent)(2).\n\n[\"quadOut\"](https://observablehq.com/@d3/easing#quadOut)\n\n# d3.easeQuad(t) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js \"Source\")\n
# d3.easeQuadInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L9 \"Source\")\n\nSymmetric quadratic easing; scales [quadIn](#easeQuadIn) for *t* in [0, 0.5] and [quadOut](#easeQuadOut) for *t* in [0.5, 1]. Also equivalent to [poly](#easePoly).[exponent](#poly_exponent)(2).\n\n[\"quadInOut\"](https://observablehq.com/@d3/easing#quadInOut)\n\n# d3.easeCubicIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L1 \"Source\")\n\nCubic easing; equivalent to [polyIn](#easePolyIn).[exponent](#poly_exponent)(3).\n\n[\"cubicIn\"](https://observablehq.com/@d3/easing#cubicIn)\n\n# d3.easeCubicOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L5 \"Source\")\n\nReverse cubic easing; equivalent to 1 - [cubicIn](#easeCubicIn)(1 - *t*). Also equivalent to [polyOut](#easePolyOut).[exponent](#poly_exponent)(3).\n\n[\"cubicOut\"](https://observablehq.com/@d3/easing#cubicOut)\n\n# d3.easeCubic(t) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js \"Source\")\n
# d3.easeCubicInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L9 \"Source\")\n\nSymmetric cubic easing; scales [cubicIn](#easeCubicIn) for *t* in [0, 0.5] and [cubicOut](#easeCubicOut) for *t* in [0.5, 1]. Also equivalent to [poly](#easePoly).[exponent](#poly_exponent)(3).\n\n[\"cubicInOut\"](https://observablehq.com/@d3/easing#cubicInOut)\n\n# d3.easeSinIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L4 \"Source\")\n\nSinusoidal easing; returns sin(*t*).\n\n[\"sinIn\"](https://observablehq.com/@d3/easing#sinIn)\n\n# d3.easeSinOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L8 \"Source\")\n\nReverse sinusoidal easing; equivalent to 1 - [sinIn](#easeSinIn)(1 - *t*).\n\n[\"sinOut\"](https://observablehq.com/@d3/easing#sinOut)\n\n# d3.easeSin(t) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js \"Source\")\n
# d3.easeSinInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L12 \"Source\")\n\nSymmetric sinusoidal easing; scales [sinIn](#easeSinIn) for *t* in [0, 0.5] and [sinOut](#easeSinOut) for *t* in [0.5, 1].\n\n[\"sinInOut\"](https://observablehq.com/@d3/easing#sinInOut)\n\n# d3.easeExpIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L1 \"Source\")\n\nExponential easing; raises 2 to the exponent 10 \\* (*t* - 1).\n\n[\"expIn\"](https://observablehq.com/@d3/easing#expIn)\n\n# d3.easeExpOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L5 \"Source\")\n\nReverse exponential easing; equivalent to 1 - [expIn](#easeExpIn)(1 - *t*).\n\n[\"expOut\"](https://observablehq.com/@d3/easing#expOut)\n\n# d3.easeExp(t) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js \"Source\")\n
# d3.easeExpInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L9 \"Source\")\n\nSymmetric exponential easing; scales [expIn](#easeExpIn) for *t* in [0, 0.5] and [expOut](#easeExpOut) for *t* in [0.5, 1].\n\n[\"expInOut\"](https://observablehq.com/@d3/easing#expInOut)\n\n# d3.easeCircleIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L1 \"Source\")\n\nCircular easing.\n\n[\"circleIn\"](https://observablehq.com/@d3/easing#circleIn)\n\n# d3.easeCircleOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L5 \"Source\")\n\nReverse circular easing; equivalent to 1 - [circleIn](#easeCircleIn)(1 - *t*).\n\n[\"circleOut\"](https://observablehq.com/@d3/easing#circleOut)\n\n# d3.easeCircle(t) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js \"Source\")\n
# d3.easeCircleInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L9 \"Source\")\n\nSymmetric circular easing; scales [circleIn](#easeCircleIn) for *t* in [0, 0.5] and [circleOut](#easeCircleOut) for *t* in [0.5, 1].\n\n[\"circleInOut\"](https://observablehq.com/@d3/easing#circleInOut)\n\n# d3.easeElasticIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L5 \"Source\")\n\nElastic easing, like a rubber band. The [amplitude](#elastic_amplitude) and [period](#elastic_period) of the oscillation are configurable; if not specified, they default to 1 and 0.3, respectively.\n\n[\"elasticIn\"](https://observablehq.com/@d3/easing#elasticIn)\n\n# d3.easeElastic(t) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js \"Source\")\n
# d3.easeElasticOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L18 \"Source\")\n\nReverse elastic easing; equivalent to 1 - [elasticIn](#easeElasticIn)(1 - *t*).\n\n[\"elasticOut\"](https://observablehq.com/@d3/easing#elasticOut)\n\n# d3.easeElasticInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L31 \"Source\")\n\nSymmetric elastic easing; scales [elasticIn](#easeElasticIn) for *t* in [0, 0.5] and [elasticOut](#easeElasticOut) for *t* in [0.5, 1].\n\n[\"elasticInOut\"](https://observablehq.com/@d3/easing#elasticInOut)\n\n# elastic.amplitude(a) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L40 \"Source\")\n\nReturns a new elastic easing with the specified amplitude *a*.\n\n# elastic.period(p) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L41 \"Source\")\n\nReturns a new elastic easing with the specified period *p*.\n\n# d3.easeBackIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L3 \"Source\")\n\n[Anticipatory](https://en.wikipedia.org/wiki/12_basic_principles_of_animation#Anticipation) easing, like a dancer bending his knees before jumping off the floor. The degree of [overshoot](#back_overshoot) is configurable; if not specified, it defaults to 1.70158.\n\n[\"backIn\"](https://observablehq.com/@d3/easing#backIn)\n\n# d3.easeBackOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L15 \"Source\")\n\nReverse anticipatory easing; equivalent to 1 - [backIn](#easeBackIn)(1 - *t*).\n\n[\"backOut\"](https://observablehq.com/@d3/easing#backOut)\n\n# d3.easeBack(t) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js \"Source\")\n
# d3.easeBackInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L27 \"Source\")\n\nSymmetric anticipatory easing; scales [backIn](#easeBackIn) for *t* in [0, 0.5] and [backOut](#easeBackOut) for *t* in [0.5, 1].\n\n[\"backInOut\"](https://observablehq.com/@d3/easing#backInOut)\n\n# back.overshoot(s) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L1 \"Source\")\n\nReturns a new back easing with the specified overshoot *s*.\n\n# d3.easeBounceIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L12 \"Source\")\n\nBounce easing, like a rubber ball.\n\n[\"bounceIn\"](https://observablehq.com/@d3/easing#bounceIn)\n\n# d3.easeBounce(t) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js \"Source\")\n
# d3.easeBounceOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L16 \"Source\")\n\nReverse bounce easing; equivalent to 1 - [bounceIn](#easeBounceIn)(1 - *t*).\n\n[\"bounceOut\"](https://observablehq.com/@d3/easing#bounceOut)\n\n# d3.easeBounceInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L20 \"Source\")\n\nSymmetric bounce easing; scales [bounceIn](#easeBounceIn) for *t* in [0, 0.5] and [bounceOut](#easeBounceOut) for *t* in [0.5, 1].\n\n[\"bounceInOut\"](https://observablehq.com/@d3/easing#bounceInOut)\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-ease", "error": "[Circular]", "extraneous": false }, "d3-fetch": { "_from": "d3-fetch@1", "_id": "d3-fetch@1.2.0", "_inBundle": false, "_integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", "_location": "/d3-fetch", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-fetch@1", "name": "d3-fetch", "escapedName": "d3-fetch", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", "_shasum": "15ce2ecfc41b092b1db50abd2c552c2316cf7fc7", "_spec": "d3-fetch@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-fetch/issues" }, "dependencies": { "d3-dsv": { "_from": "d3-dsv@1", "_id": "d3-dsv@1.2.0", "_inBundle": false, "_integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", "_location": "/d3-dsv", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", "_shasum": "9d5f75c3a5f8abd611f74d3f5847b0d4338b885c", "_spec": "d3-dsv@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bin": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "A parser and formatter for delimiter-separated values, such as CSV and TSV", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-dsv/", "jsdelivr": "dist/d3-dsv.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-dsv.js", "module": "src/index.js", "name": "d3-dsv", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-dsv.min.js", "version": "1.2.0", "readme": "# d3-dsv\n\nThis module provides a parser and formatter for delimiter-separated values, most commonly [comma-](https://en.wikipedia.org/wiki/Comma-separated_values) (CSV) or tab-separated values (TSV). These tabular formats are popular with spreadsheet programs such as Microsoft Excel, and are often more space-efficient than JSON. This implementation is based on [RFC 4180](http://tools.ietf.org/html/rfc4180).\n\nComma (CSV) and tab (TSV) delimiters are built-in. For example, to parse:\n\n```js\nd3.csvParse(\"foo,bar\\n1,2\"); // [{foo: \"1\", bar: \"2\"}, columns: [\"foo\", \"bar\"]]\nd3.tsvParse(\"foo\\tbar\\n1\\t2\"); // [{foo: \"1\", bar: \"2\"}, columns: [\"foo\", \"bar\"]]\n```\n\nOr to format:\n\n```js\nd3.csvFormat([{foo: \"1\", bar: \"2\"}]); // \"foo,bar\\n1,2\"\nd3.tsvFormat([{foo: \"1\", bar: \"2\"}]); // \"foo\\tbar\\n1\\t2\"\n```\n\nTo use a different delimiter, such as “|” for pipe-separated values, use [d3.dsvFormat](#dsvFormat):\n\n```js\nvar psv = d3.dsvFormat(\"|\");\n\nconsole.log(psv.parse(\"foo|bar\\n1|2\")); // [{foo: \"1\", bar: \"2\"}, columns: [\"foo\", \"bar\"]]\n```\n\nFor easy loading of DSV files in a browser, see [d3-fetch](https://github.com/d3/d3-fetch)’s [d3.csv](https://github.com/d3/d3-fetch/blob/master/README.md#csv) and [d3.tsv](https://github.com/d3/d3-fetch/blob/master/README.md#tsv) methods.\n\n## Installing\n\nIf you use NPM, `npm install d3-dsv`. Otherwise, download the [latest release](https://github.com/d3/d3-dsv/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-dsv.v1.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\n\n```\n\n[Try d3-dsv in your browser.](https://tonicdev.com/npm/d3-dsv)\n\n## API Reference\n\n# d3.csvParse(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[parse](#dsv_parse).\n\n# d3.csvParseRows(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[parseRows](#dsv_parseRows).\n\n# d3.csvFormat(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[format](#dsv_format).\n\n# d3.csvFormatBody(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[formatBody](#dsv_formatBody).\n\n# d3.csvFormatRows(rows) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[formatRows](#dsv_formatRows).\n\n# d3.csvFormatRow(row) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[formatRow](#dsv_formatRow).\n\n# d3.csvFormatValue(value) [<>](https://github.com/d3/d3-dsv/blob/master/src/csv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\",\").[formatValue](#dsv_formatValue).\n\n# d3.tsvParse(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[parse](#dsv_parse).\n\n# d3.tsvParseRows(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[parseRows](#dsv_parseRows).\n\n# d3.tsvFormat(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[format](#dsv_format).\n\n# d3.tsvFormatBody(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[formatBody](#dsv_formatBody).\n\n# d3.tsvFormatRows(rows) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[formatRows](#dsv_formatRows).\n\n# d3.tsvFormatRow(row) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[formatRow](#dsv_formatRow).\n\n# d3.tsvFormatValue(value) [<>](https://github.com/d3/d3-dsv/blob/master/src/tsv.js \"Source\")\n\nEquivalent to [dsvFormat](#dsvFormat)(\"\\t\").[formatValue](#dsv_formatValue).\n\n# d3.dsvFormat(delimiter) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js)\n\nConstructs a new DSV parser and formatter for the specified *delimiter*. The *delimiter* must be a single character (*i.e.*, a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.\n\n# *dsv*.parse(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nParses the specified *string*, which must be in the delimiter-separated values format with the appropriate delimiter, returning an array of objects representing the parsed rows.\n\nUnlike [*dsv*.parseRows](#dsv_parseRows), this method requires that the first line of the DSV content contains a delimiter-separated list of column names; these column names become the attributes on the returned objects. For example, consider the following CSV file:\n\n```\nYear,Make,Model,Length\n1997,Ford,E350,2.34\n2000,Mercury,Cougar,2.38\n```\n\nThe resulting JavaScript array is:\n\n```js\n[\n {\"Year\": \"1997\", \"Make\": \"Ford\", \"Model\": \"E350\", \"Length\": \"2.34\"},\n {\"Year\": \"2000\", \"Make\": \"Mercury\", \"Model\": \"Cougar\", \"Length\": \"2.38\"}\n]\n```\n\nThe returned array also exposes a `columns` property containing the column names in input order (in contrast to Object.keys, whose iteration order is arbitrary). For example:\n\n```js\ndata.columns; // [\"Year\", \"Make\", \"Model\", \"Length\"]\n```\n\nIf a *row* conversion function is not specified, field values are strings. For safety, there is no automatic conversion to numbers, dates, or other types. In some cases, JavaScript may coerce strings to numbers for you automatically (for example, using the `+` operator), but better is to specify a *row* conversion function. See [d3.autoType](#autoType) for a convenient *row* conversion function that infers and coerces common types like numbers and strings.\n\nIf a *row* conversion function is specified, the specified function is invoked for each row, being passed an object representing the current row (`d`), the index (`i`) starting at zero for the first non-header row, and the array of column names. If the returned value is null or undefined, the row is skipped and will be omitted from the array returned by *dsv*.parse; otherwise, the returned value defines the corresponding row object. For example:\n\n```js\nvar data = d3.csvParse(string, function(d) {\n return {\n year: new Date(+d.Year, 0, 1), // lowercase and convert \"Year\" to Date\n make: d.Make, // lowercase\n model: d.Model, // lowercase\n length: +d.Length // lowercase and convert \"Length\" to number\n };\n});\n```\n\nNote: using `+` rather than [parseInt](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt) or [parseFloat](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseFloat) is typically faster, though more restrictive. For example, `\"30px\"` when coerced using `+` returns `NaN`, while parseInt and parseFloat return `30`.\n\n# dsv.parseRows(string[, row]) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nParses the specified *string*, which must be in the delimiter-separated values format with the appropriate delimiter, returning an array of arrays representing the parsed rows.\n\nUnlike [*dsv*.parse](#dsv_parse), this method treats the header line as a standard row, and should be used whenever DSV content does not contain a header. Each row is represented as an array rather than an object. Rows may have variable length. For example, consider the following CSV file, which notably lacks a header line:\n\n```\n1997,Ford,E350,2.34\n2000,Mercury,Cougar,2.38\n```\n\nThe resulting JavaScript array is:\n\n```js\n[\n [\"1997\", \"Ford\", \"E350\", \"2.34\"],\n [\"2000\", \"Mercury\", \"Cougar\", \"2.38\"]\n]\n```\n\nIf a *row* conversion function is not specified, field values are strings. For safety, there is no automatic conversion to numbers, dates, or other types. In some cases, JavaScript may coerce strings to numbers for you automatically (for example, using the `+` operator), but better is to specify a *row* conversion function. See [d3.autoType](#autoType) for a convenient *row* conversion function that infers and coerces common types like numbers and strings.\n\nIf a *row* conversion function is specified, the specified function is invoked for each row, being passed an array representing the current row (`d`), the index (`i`) starting at zero for the first row, and the array of column names. If the returned value is null or undefined, the row is skipped and will be omitted from the array returned by *dsv*.parse; otherwise, the returned value defines the corresponding row object. For example:\n\n```js\nvar data = d3.csvParseRows(string, function(d, i) {\n return {\n year: new Date(+d[0], 0, 1), // convert first colum column to Date\n make: d[1],\n model: d[2],\n length: +d[3] // convert fourth column to number\n };\n});\n```\n\nIn effect, *row* is similar to applying a [map](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map) and [filter](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter) operator to the returned rows.\n\n# dsv.format(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nFormats the specified array of object *rows* as delimiter-separated values, returning a string. This operation is the inverse of [*dsv*.parse](#dsv_parse). Each row will be separated by a newline (`\\n`), and each column within each row will be separated by the delimiter (such as a comma, `,`). Values that contain either the delimiter, a double-quote (`\"`) or a newline will be escaped using double-quotes.\n\nIf *columns* is not specified, the list of column names that forms the header row is determined by the union of all properties on all objects in *rows*; the order of columns is nondeterministic. If *columns* is specified, it is an array of strings representing the column names. For example:\n\n```js\nvar string = d3.csvFormat(data, [\"year\", \"make\", \"model\", \"length\"]);\n```\n\nAll fields on each row object will be coerced to strings. If the field value is null or undefined, the empty string is used. If the field value is a Date, the [ECMAScript date-time string format](https://www.ecma-international.org/ecma-262/9.0/index.html#sec-date-time-string-format) (a subset of ISO 8601) is used: for example, dates at UTC midnight are formatted as `YYYY-MM-DD`. For more control over which and how fields are formatted, first map *rows* to an array of array of string, and then use [*dsv*.formatRows](#dsv_formatRows).\n\n# dsv.formatBody(rows[, columns]) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nEquivalent to [*dsv*.format](#dsv_format), but omits the header row. This is useful, for example, when appending rows to an existing file.\n\n# dsv.formatRows(rows) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nFormats the specified array of array of string *rows* as delimiter-separated values, returning a string. This operation is the reverse of [*dsv*.parseRows](#dsv_parseRows). Each row will be separated by a newline (`\\n`), and each column within each row will be separated by the delimiter (such as a comma, `,`). Values that contain either the delimiter, a double-quote (\") or a newline will be escaped using double-quotes.\n\nTo convert an array of objects to an array of arrays while explicitly specifying the columns, use [*array*.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map). For example:\n\n```js\nvar string = d3.csvFormatRows(data.map(function(d, i) {\n return [\n d.year.getFullYear(), // Assuming d.year is a Date object.\n d.make,\n d.model,\n d.length\n ];\n}));\n```\n\nIf you like, you can also [*array*.concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) this result with an array of column names to generate the first row:\n\n```js\nvar string = d3.csvFormatRows([[\n \"year\",\n \"make\",\n \"model\",\n \"length\"\n ]].concat(data.map(function(d, i) {\n return [\n d.year.getFullYear(), // Assuming d.year is a Date object.\n d.make,\n d.model,\n d.length\n ];\n})));\n```\n\n# dsv.formatRow(row) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nFormats a single array *row* of strings as delimiter-separated values, returning a string. Each column within the row will be separated by the delimiter (such as a comma, `,`). Values that contain either the delimiter, a double-quote (\") or a newline will be escaped using double-quotes.\n\n# dsv.formatValue(value) [<>](https://github.com/d3/d3-dsv/blob/master/src/dsv.js \"Source\")\n\nFormat a single *value* or string as a delimiter-separated value, returning a string. A value that contains either the delimiter, a double-quote (\") or a newline will be escaped using double-quotes.\n\n# d3.autoType(object) [<>](https://github.com/d3/d3-dsv/blob/master/src/autoType.js \"Source\")\n\nGiven an *object* (or array) representing a parsed row, infers the types of values on the *object* and coerces them accordingly, returning the mutated *object*. This function is intended to be used as a *row* accessor function in conjunction with [*dsv*.parse](#dsv_parse) and [*dsv*.parseRows](#dsv_parseRow). For example, consider the following CSV file:\n\n```\nYear,Make,Model,Length\n1997,Ford,E350,2.34\n2000,Mercury,Cougar,2.38\n```\n\nWhen used with [d3.csvParse](#csvParse),\n\n```js\nd3.csvParse(string, d3.autoType)\n```\n\nthe resulting JavaScript array is:\n\n```js\n[\n {\"Year\": 1997, \"Make\": \"Ford\", \"Model\": \"E350\", \"Length\": 2.34},\n {\"Year\": 2000, \"Make\": \"Mercury\", \"Model\": \"Cougar\", \"Length\": 2.38}\n]\n```\n\nType inference works as follows. For each *value* in the given *object*, the [trimmed](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim) value is computed; the value is then re-assigned as follows:\n\n1. If empty, then `null`.\n1. If exactly `\"true\"`, then `true`.\n1. If exactly `\"false\"`, then `false`.\n1. If exactly `\"NaN\"`, then `NaN`.\n1. Otherwise, if [coercible to a number](https://www.ecma-international.org/ecma-262/9.0/index.html#sec-tonumber-applied-to-the-string-type), then a number.\n1. Otherwise, if a [date-only or date-time string](https://www.ecma-international.org/ecma-262/9.0/index.html#sec-date-time-string-format), then a Date.\n1. Otherwise, a string (the original untrimmed value).\n\nValues with leading zeroes may be coerced to numbers; for example `\"08904\"` coerces to `8904`. However, extra characters such as commas or units (*e.g.*, `\"$1.00\"`, `\"(123)\"`, `\"1,234\"` or `\"32px\"`) will prevent number coercion, resulting in a string.\n\nDate strings must be in ECMAScript’s subset of the [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601). When a date-only string such as YYYY-MM-DD is specified, the inferred time is midnight UTC; however, if a date-time string such as YYYY-MM-DDTHH:MM is specified without a time zone, it is assumed to be local time.\n\nAutomatic type inference is primarily intended to provide safe, predictable behavior in conjunction with [*dsv*.format](#dsv_format) and [*dsv*.formatRows](#dsv_formatRows) for common JavaScript types. If you need different behavior, you should implement your own row accessor function.\n\nFor more, see [the d3.autoType notebook](https://observablehq.com/@d3/d3-autotype).\n\n### Content Security Policy\n\nIf a [content security policy](http://www.w3.org/TR/CSP/) is in place, note that [*dsv*.parse](#dsv_parse) requires `unsafe-eval` in the `script-src` directive, due to the (safe) use of dynamic code generation for fast parsing. (See [source](https://github.com/d3/d3-dsv/blob/master/src/dsv.js).) Alternatively, use [*dsv*.parseRows](#dsv_parseRows).\n\n### Byte-Order Marks\n\nDSV files sometimes begin with a [byte order mark (BOM)](https://en.wikipedia.org/wiki/Byte_order_mark); saving a spreadsheet in CSV UTF-8 format from Microsoft Excel, for example, will include a BOM. On the web this is not usually a problem because the [UTF-8 decode algorithm](https://encoding.spec.whatwg.org/#utf-8-decode) specified in the Encoding standard removes the BOM. Node.js, on the other hand, [does not remove the BOM](https://github.com/nodejs/node-v0.x-archive/issues/1918) when decoding UTF-8.\n\nIf the BOM is not removed, the first character of the text is a zero-width non-breaking space. So if a CSV file with a BOM is parsed by [d3.csvParse](#csvParse), the first column’s name will begin with a zero-width non-breaking space. This can be hard to spot since this character is usually invisible when printed.\n\nTo remove the BOM before parsing, consider using [strip-bom](https://www.npmjs.com/package/strip-bom).\n\n## Command Line Reference\n\n### dsv2dsv\n\n# dsv2dsv [options…] [file]\n\nConverts the specified DSV input *file* to DSV (typically with a different delimiter or encoding). If *file* is not specified, defaults to reading from stdin. For example, to convert to CSV to TSV:\n\n```\ncsv2tsv < example.csv > example.tsv\n```\n\nTo convert windows-1252 CSV to utf-8 CSV:\n\n```\ndsv2dsv --input-encoding windows-1252 < latin1.csv > utf8.csv\n```\n\n# dsv2dsv -h\n
# dsv2dsv --help\n\nOutput usage information.\n\n# dsv2dsv -V\n
# dsv2dsv --version\n\nOutput the version number.\n\n# dsv2dsv -o file\n
# dsv2dsv --out file\n\nSpecify the output file name. Defaults to “-” for stdout.\n\n# dsv2dsv -r delimiter\n
# dsv2dsv --input-delimiter delimiter\n\nSpecify the input delimiter character. Defaults to “,” for reading CSV. (You can enter a tab on the command line by typing ⌃V.)\n\n# dsv2dsv --input-encoding encoding\n\nSpecify the input character encoding. Defaults to “utf8”.\n\n# dsv2dsv -w delimiter\n
# dsv2dsv --output-delimiter delimiter\n\nSpecify the output delimiter character. Defaults to “,” for writing CSV. (You can enter a tab on the command line by typing ⌃V.)\n\n# dsv2dsv --output-encoding encoding\n\nSpecify the output character encoding. Defaults to “utf8”.\n\n# csv2tsv [options…] [file]\n\nEquivalent to [dsv2dsv](#dsv2dsv), but the [output delimiter](#dsv2dsv_output_delimiter) defaults to the tab character (\\t).\n\n# tsv2csv [options…] [file]\n\nEquivalent to [dsv2dsv](#dsv2dsv), but the [input delimiter](#dsv2dsv_output_delimiter) defaults to the tab character (\\t).\n\n### dsv2json\n\n# dsv2json [options…] [file]\n\nConverts the specified DSV input *file* to JSON. If *file* is not specified, defaults to reading from stdin. For example, to convert to CSV to JSON:\n\n```\ncsv2json < example.csv > example.json\n```\n\nOr to convert CSV to a newline-delimited JSON stream:\n\n```\ncsv2json -n < example.csv > example.ndjson\n```\n\n# dsv2json -h\n
# dsv2json --help\n\nOutput usage information.\n\n# dsv2json -V\n
# dsv2json --version\n\nOutput the version number.\n\n# dsv2json -o file\n
# dsv2json --out file\n\nSpecify the output file name. Defaults to “-” for stdout.\n\n# dsv2json -r delimiter\n
# dsv2json --input-delimiter delimiter\n\nSpecify the input delimiter character. Defaults to “,” for reading CSV. (You can enter a tab on the command line by typing ⌃V.)\n\n# dsv2json --input-encoding encoding\n\nSpecify the input character encoding. Defaults to “utf8”.\n\n# dsv2json -r encoding\n
# dsv2json --output-encoding encoding\n\nSpecify the output character encoding. Defaults to “utf8”.\n\n# dsv2json -n\n
# dsv2json --newline-delimited\n\nOutput [newline-delimited JSON](https://github.com/mbostock/ndjson-cli) instead of a single JSON array.\n\n# csv2json [options…] [file]\n\nEquivalent to [dsv2json](#dsv2json).\n\n# tsv2json [options…] [file]\n\nEquivalent to [dsv2json](#dsv2json), but the [input delimiter](#dsv2json_input_delimiter) defaults to the tab character (\\t).\n\n### json2dsv\n\n# json2dsv [options…] [file]\n\nConverts the specified JSON input *file* to DSV. If *file* is not specified, defaults to reading from stdin. For example, to convert to JSON to CSV:\n\n```\njson2csv < example.json > example.csv\n```\n\nOr to convert a newline-delimited JSON stream to CSV:\n\n```\njson2csv -n < example.ndjson > example.csv\n```\n\n# json2dsv -h\n
# json2dsv --help\n\nOutput usage information.\n\n# json2dsv -V\n
# json2dsv --version\n\nOutput the version number.\n\n# json2dsv -o file\n
# json2dsv --out file\n\nSpecify the output file name. Defaults to “-” for stdout.\n\n# json2dsv --input-encoding encoding\n\nSpecify the input character encoding. Defaults to “utf8”.\n\n# json2dsv -w delimiter\n
# json2dsv --output-delimiter delimiter\n\nSpecify the output delimiter character. Defaults to “,” for writing CSV. (You can enter a tab on the command line by typing ⌃V.)\n\n# json2dsv --output-encoding encoding\n\nSpecify the output character encoding. Defaults to “utf8”.\n\n# json2dsv -n\n
# json2dsv --newline-delimited\n\nRead [newline-delimited JSON](https://github.com/mbostock/ndjson-cli) instead of a single JSON array.\n\n# csv2json [options…] [file]\n\nEquivalent to [json2dsv](#json2dsv).\n\n# tsv2json [options…] [file]\n\nEquivalent to [json2dsv](#json2dsv), but the [output delimiter](#json2dsv_output_delimiter) defaults to the tab character (\\t).\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-dsv", "error": "[Circular]", "extraneous": false, "_deduped": "d3-dsv" } }, "deprecated": false, "description": "Convenient parsing for Fetch.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-fetch/", "jsdelivr": "dist/d3-fetch.min.js", "keywords": [ "d3", "d3-module", "fetch", "ajax", "XMLHttpRequest" ], "license": "BSD-3-Clause", "main": "dist/d3-fetch.js", "module": "src/index.js", "name": "d3-fetch", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-fetch.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-fetch.min.js", "version": "1.2.0", "readme": "# d3-fetch\n\nThis module provides convenient parsing on top of [Fetch](https://fetch.spec.whatwg.org/). For example, to load a text file:\n\n```js\nd3.text(\"/path/to/file.txt\").then(function(text) {\n console.log(text); // Hello, world!\n});\n```\n\nTo load and parse a CSV file:\n\n```js\nd3.csv(\"/path/to/file.csv\").then(function(data) {\n console.log(data); // [{\"Hello\": \"world\"}, …]\n});\n```\n\nThis module has built-in support for parsing [JSON](#json), [CSV](#csv), and [TSV](#tsv). You can parse additional formats by using [text](#text) directly. (This module replaced [d3-request](https://github.com/d3/d3-request).)\n\n## Installing\n\nIf you use NPM, `npm install d3-fetch`. Otherwise, download the [latest release](https://github.com/d3/d3-fetch/releases/latest). You can also load directly from [d3js.org](https://d3js.org) as a [standalone library](https://d3js.org/d3-fetch.v1.min.js). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n\n```\n\n## API Reference\n\n# d3.blob(input[, init]) [<>](https://github.com/d3/d3-fetch/blob/master/src/blob.js \"Source\")\n\nFetches the binary file at the specified *input* URL as a Blob. If *init* is specified, it is passed along to the underlying call to [fetch](https://fetch.spec.whatwg.org/#fetch-method); see [RequestInit](https://fetch.spec.whatwg.org/#requestinit) for allowed fields.\n\n# d3.buffer(input[, init]) [<>](https://github.com/d3/d3-fetch/blob/master/src/buffer.js \"Source\")\n\nFetches the binary file at the specified *input* URL as an ArrayBuffer. If *init* is specified, it is passed along to the underlying call to [fetch](https://fetch.spec.whatwg.org/#fetch-method); see [RequestInit](https://fetch.spec.whatwg.org/#requestinit) for allowed fields.\n\n# d3.csv(input[, init][, row]) [<>](https://github.com/d3/d3-fetch/blob/master/src/dsv.js \"Source\")\n\nEquivalent to [d3.dsv](#dsv) with the comma character as the delimiter.\n\n# d3.dsv(delimiter, input[, init][, row]) [<>](https://github.com/d3/d3-fetch/blob/master/src/dsv.js \"Source\")\n\nFetches the [DSV](https://github.com/d3/d3-dsv) file at the specified *input* URL. If *init* is specified, it is passed along to the underlying call to [fetch](https://fetch.spec.whatwg.org/#fetch-method); see [RequestInit](https://fetch.spec.whatwg.org/#requestinit) for allowed fields. An optional *row* conversion function may be specified to map and filter row objects to a more-specific representation; see [*dsv*.parse](https://github.com/d3/d3-dsv#dsv_parse) for details. For example:\n\n```js\nd3.dsv(\",\", \"test.csv\", function(d) {\n return {\n year: new Date(+d.Year, 0, 1), // convert \"Year\" column to Date\n make: d.Make,\n model: d.Model,\n length: +d.Length // convert \"Length\" column to number\n };\n}).then(function(data) {\n console.log(data);\n});\n```\n\nIf only one of *init* and *row* is specified, it is interpreted as the *row* conversion function if it is a function, and otherwise an *init* object.\n\nSee also [d3.csv](#csv) and [d3.tsv](#tsv).\n\n# d3.html(input[, init]) [<>](https://github.com/d3/d3-fetch/blob/master/src/xml.js \"Source\")\n\nFetches the file at the specified *input* URL as [text](#text) and then [parses it](https://developer.mozilla.org/docs/Web/API/DOMParser) as HTML. If *init* is specified, it is passed along to the underlying call to [fetch](https://fetch.spec.whatwg.org/#fetch-method); see [RequestInit](https://fetch.spec.whatwg.org/#requestinit) for allowed fields.\n\n# d3.image(input[, init]) [<>](https://github.com/d3/d3-fetch/blob/master/src/image.js \"Source\")\n\nFetches the image at the specified *input* URL. If *init* is specified, sets any additional properties on the image before loading. For example, to enable an anonymous [cross-origin request](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image):\n\n```js\nd3.image(\"https://example.com/test.png\", {crossOrigin: \"anonymous\"}).then(function(img) {\n console.log(img);\n});\n```\n\n# d3.json(input[, init]) [<>](https://github.com/d3/d3-fetch/blob/master/src/json.js \"Source\")\n\nFetches the [JSON](http://json.org) file at the specified *input* URL. If *init* is specified, it is passed along to the underlying call to [fetch](https://fetch.spec.whatwg.org/#fetch-method); see [RequestInit](https://fetch.spec.whatwg.org/#requestinit) for allowed fields. If the server returns a status code of [204 No Content](https://developer.mozilla.org/docs/Web/HTTP/Status/204) or [205 Reset Content](https://developer.mozilla.org/docs/Web/HTTP/Status/205), the promise resolves to `undefined`.\n\n# d3.svg(input[, init]) [<>](https://github.com/d3/d3-fetch/blob/master/src/xml.js \"Source\")\n\nFetches the file at the specified *input* URL as [text](#text) and then [parses it](https://developer.mozilla.org/docs/Web/API/DOMParser) as SVG. If *init* is specified, it is passed along to the underlying call to [fetch](https://fetch.spec.whatwg.org/#fetch-method); see [RequestInit](https://fetch.spec.whatwg.org/#requestinit) for allowed fields.\n\n# d3.text(input[, init]) [<>](https://github.com/d3/d3-fetch/blob/master/src/text.js \"Source\")\n\nFetches the text file at the specified *input* URL. If *init* is specified, it is passed along to the underlying call to [fetch](https://fetch.spec.whatwg.org/#fetch-method); see [RequestInit](https://fetch.spec.whatwg.org/#requestinit) for allowed fields.\n\n# d3.tsv(input[, init][, row]) [<>](https://github.com/d3/d3-fetch/blob/master/src/dsv.js \"Source\")\n\nEquivalent to [d3.dsv](#dsv) with the tab character as the delimiter.\n\n# d3.xml(input[, init]) [<>](https://github.com/d3/d3-fetch/blob/master/src/xml.js \"Source\")\n\nFetches the file at the specified *input* URL as [text](#text) and then [parses it](https://developer.mozilla.org/docs/Web/API/DOMParser) as XML. If *init* is specified, it is passed along to the underlying call to [fetch](https://fetch.spec.whatwg.org/#fetch-method); see [RequestInit](https://fetch.spec.whatwg.org/#requestinit) for allowed fields.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-dsv": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-fetch", "error": "[Circular]", "extraneous": false }, "d3-force": { "_from": "d3-force@1", "_id": "d3-force@1.2.1", "_inBundle": false, "_integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", "_location": "/d3-force", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-force@1", "name": "d3-force", "escapedName": "d3-force", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", "_shasum": "fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b", "_spec": "d3-force@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-force/issues" }, "dependencies": { "d3-collection": { "_from": "d3-collection@1", "_id": "d3-collection@1.0.7", "_inBundle": false, "_integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", "_location": "/d3-collection", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", "_shasum": "349bd2aa9977db071091c13144d5e4f16b5b310e", "_spec": "d3-collection@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Handy data structures for elements keyed by string.", "devDependencies": "[Circular]", "homepage": "https://d3js.org/d3-collection/", "jsdelivr": "dist/d3-collection.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-collection.js", "module": "src/index.js", "name": "d3-collection", "repository": "[Circular]", "scripts": "[Circular]", "unpkg": "dist/d3-collection.min.js", "version": "1.0.7", "readme": "# d3-collection\n\nHandy data structures for elements keyed by string.\n\n## Installing\n\nIf you use NPM, `npm install d3-collection`. Otherwise, download the [latest release](https://github.com/d3/d3-collection/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-collection.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-collection in your browser.](https://tonicdev.com/npm/d3-collection)\n\n## API Reference\n\n* [Objects](#objects)\n* [Maps](#maps)\n* [Sets](#sets)\n* [Nests](#nests)\n\n### Objects\n\nA common data type in JavaScript is the *associative array*, or more simply the *object*, which has a set of named properties. The standard mechanism for iterating over the keys (or property names) in an associative array is the [for…in loop](https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in). However, note that the iteration order is undefined. D3 provides several methods for converting associative arrays to standard arrays with numeric indexes.\n\nA word of caution: it is tempting to use plain objects as maps, but this causes [unexpected behavior](http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/) when built-in property names are used as keys, such as `object[\"__proto__\"] = 42` and `\"hasOwnProperty\" in object`. If you cannot guarantee that map keys and set values will be safe, use [maps](#maps) and [sets](#sets) (or their ES6 equivalents) instead of plain objects.\n\n# d3.keys(object) [<>](https://github.com/d3/d3-collection/blob/master/src/keys.js \"Source\")\n\nReturns an array containing the property names of the specified object (an associative array). The order of the returned array is undefined.\n\n# d3.values(object) [<>](https://github.com/d3/d3-collection/blob/master/src/values.js \"Source\")\n\nReturns an array containing the property values of the specified object (an associative array). The order of the returned array is undefined.\n\n# d3.entries(object) [<>](https://github.com/d3/d3-collection/blob/master/src/entries.js \"Source\")\n\nReturns an array containing the property keys and values of the specified object (an associative array). Each entry is an object with a key and value attribute, such as `{key: \"foo\", value: 42}`. The order of the returned array is undefined.\n\n```js\nd3.entries({foo: 42, bar: true}); // [{key: \"foo\", value: 42}, {key: \"bar\", value: true}]\n```\n\n### Maps\n\nLike [ES6 Maps](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), but with a few differences:\n\n* Keys are coerced to strings.\n* [map.each](#map_each), not [map.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach). (Also, no *thisArg*.)\n* [map.remove](#map_remove), not [map.delete](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete).\n* [map.entries](#map_entries) returns an array of {key, value} objects, not an iterator of [key, value].\n* [map.size](#map_size) is a method, not a [property](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size); also, there’s [map.empty](#map_empty).\n\n# d3.map([object[, key]]) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js \"Source\")\n\nConstructs a new map. If *object* is specified, copies all enumerable properties from the specified object into this map. The specified object may also be an array or another map. An optional *key* function may be specified to compute the key for each value in the array. For example:\n\n```js\nvar map = d3.map([{name: \"foo\"}, {name: \"bar\"}], function(d) { return d.name; });\nmap.get(\"foo\"); // {\"name\": \"foo\"}\nmap.get(\"bar\"); // {\"name\": \"bar\"}\nmap.get(\"baz\"); // undefined\n```\n\nSee also [nests](#nests).\n\n# map.has(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L7 \"Source\")\n\nReturns true if and only if this map has an entry for the specified *key* string. Note: the value may be `null` or `undefined`.\n\n# map.get(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L10 \"Source\")\n\nReturns the value for the specified *key* string. If the map does not have an entry for the specified *key*, returns `undefined`.\n\n# map.set(key, value) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L13 \"Source\")\n\nSets the *value* for the specified *key* string. If the map previously had an entry for the same *key* string, the old entry is replaced with the new value. Returns the map, allowing chaining. For example:\n\n```js\nvar map = d3.map()\n .set(\"foo\", 1)\n .set(\"bar\", 2)\n .set(\"baz\", 3);\n\nmap.get(\"foo\"); // 1\n```\n\n# map.remove(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L17 \"Source\")\n\nIf the map has an entry for the specified *key* string, removes the entry and returns true. Otherwise, this method does nothing and returns false.\n\n# map.clear() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L21 \"Source\")\n\nRemoves all entries from this map.\n\n# map.keys() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L24 \"Source\")\n\nReturns an array of string keys for every entry in this map. The order of the returned keys is arbitrary.\n\n# map.values() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L29 \"Source\")\n\nReturns an array of values for every entry in this map. The order of the returned values is arbitrary.\n\n# map.entries() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L34 \"Source\")\n\nReturns an array of key-value objects for each entry in this map. The order of the returned entries is arbitrary. Each entry’s key is a string, but the value has arbitrary type.\n\n# map.each(function) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L48 \"Source\")\n\nCalls the specified *function* for each entry in this map, passing the entry’s value and key as arguments, followed by the map itself. Returns undefined. The iteration order is arbitrary.\n\n# map.empty() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L44 \"Source\")\n\nReturns true if and only if this map has zero entries.\n\n# map.size() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L39 \"Source\")\n\nReturns the number of entries in this map.\n\n### Sets\n\nLike [ES6 Sets](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set), but with a few differences:\n\n* Values are coerced to strings.\n* [set.each](#set_each), not [set.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/forEach). (Also, no *thisArg*.)\n* [set.remove](#set_remove), not [set.delete](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete).\n* [set.size](#set_size) is a method, not a [property](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/size); also, there’s [set.empty](#set_empty).\n\n# d3.set([array[, accessor]]) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js \"Source\")\n\nConstructs a new set. If *array* is specified, adds the given *array* of string values to the returned set. The specified array may also be another set. An optional *accessor* function may be specified, which is equivalent to calling *array.map(accessor)* before constructing the set.\n\n# set.has(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L9 \"Source\")\n\nReturns true if and only if this set has an entry for the specified *value* string.\n\n# set.add(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L10 \"Source\")\n\nAdds the specified *value* string to this set. Returns the set, allowing chaining. For example:\n\n```js\nvar set = d3.set()\n .add(\"foo\")\n .add(\"bar\")\n .add(\"baz\");\n\nset.has(\"foo\"); // true\n```\n\n# set.remove(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L15 \"Source\")\n\nIf the set contains the specified *value* string, removes it and returns true. Otherwise, this method does nothing and returns false.\n\n# set.clear() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L16 \"Source\")\n\nRemoves all values from this set.\n\n# set.values() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L17 \"Source\")\n\nReturns an array of the string values in this set. The order of the returned values is arbitrary. Can be used as a convenient way of computing the unique values for a set of strings. For example:\n\n```js\nd3.set([\"foo\", \"bar\", \"foo\", \"baz\"]).values(); // \"foo\", \"bar\", \"baz\"\n```\n\n# set.each(function) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L20 \"Source\")\n\nCalls the specified *function* for each value in this set, passing the value as the first two arguments (for symmetry with [*map*.each](#map_each)), followed by the set itself. Returns undefined. The iteration order is arbitrary.\n\n# set.empty() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L19 \"Source\")\n\nReturns true if and only if this set has zero values.\n\n# set.size() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L18 \"Source\")\n\nReturns the number of values in this set.\n\n### Nests\n\nNesting allows elements in an array to be grouped into a hierarchical tree structure; think of it like the GROUP BY operator in SQL, except you can have multiple levels of grouping, and the resulting output is a tree rather than a flat table. The levels in the tree are specified by key functions. The leaf nodes of the tree can be sorted by value, while the internal nodes can be sorted by key. An optional rollup function will collapse the elements in each leaf node using a summary function. The nest operator (the object returned by [nest](#nest)) is reusable, and does not retain any references to the data that is nested.\n\nFor example, consider the following tabular data structure of Barley yields, from various sites in Minnesota during 1931-2:\n\n```js\nvar yields = [\n {yield: 27.00, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n {yield: 48.87, variety: \"Manchuria\", year: 1931, site: \"Waseca\"},\n {yield: 27.43, variety: \"Manchuria\", year: 1931, site: \"Morris\"},\n ...\n];\n```\n\nTo facilitate visualization, it may be useful to nest the elements first by year, and then by variety, as follows:\n\n```js\nvar entries = d3.nest()\n .key(function(d) { return d.year; })\n .key(function(d) { return d.variety; })\n .entries(yields);\n```\n\nThis returns a nested array. Each element of the outer array is a key-values pair, listing the values for each distinct key:\n\n```js\n[{key: \"1931\", values: [\n {key: \"Manchuria\", values: [\n {yield: 27.00, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n {yield: 48.87, variety: \"Manchuria\", year: 1931, site: \"Waseca\"},\n {yield: 27.43, variety: \"Manchuria\", year: 1931, site: \"Morris\"}, ...]},\n {key: \"Glabron\", values: [\n {yield: 43.07, variety: \"Glabron\", year: 1931, site: \"University Farm\"},\n {yield: 55.20, variety: \"Glabron\", year: 1931, site: \"Waseca\"}, ...]}, ...]},\n {key: \"1932\", values: ...}]\n```\n\nThe nested form allows easy iteration and generation of hierarchical structures in SVG or HTML.\n\nFor a longer introduction to nesting, see:\n\n* Phoebe Bright’s [D3 Nest Tutorial and examples](http://bl.ocks.org/phoebebright/raw/3176159/)\n* Shan Carter’s [Mister Nester](http://bl.ocks.org/shancarter/raw/4748131/)\n\n# d3.nest() [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js \"Source\")\n\nCreates a new nest operator. The set of keys is initially empty.\n\n# nest.key(key) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L4 \"Source\")\n\nRegisters a new *key* function. The *key* function will be invoked for each element in the input array and must return a string identifier to assign the element to its group. Most often, the function is a simple accessor, such as the year and variety accessors above. (Keys functions are *not* passed the input array index.) Each time a key is registered, it is pushed onto the end of the internal array of keys, and the nest operator applies an additional level of nesting.\n\n# nest.sortKeys(comparator) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L5 \"Source\")\n\nSorts key values for the [current key](#nest_key) using the specified *comparator* function, such as [d3.ascending](https://github.com/d3/d3-array#ascending) or [d3.descending](https://github.com/d3/d3-array#descending). If no comparator is specified for the current key, the order in which keys will be returned is undefined. For example, to sort years in ascending order and varieties in descending order:\n\n```js\nvar entries = d3.nest()\n .key(function(d) { return d.year; }).sortKeys(d3.ascending)\n .key(function(d) { return d.variety; }).sortKeys(d3.descending)\n .entries(yields);\n```\n\nNote that this only affects the result of [*nest*.entries](#nest_entries); the order of keys returned by [*nest*.map](#nest_map) and [*nest*.object](#nest_object) is always undefined, regardless of comparator.\n\n# nest.sortValues(comparator) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L6 \"Source\")\n\nSorts leaf elements using the specified *comparator* function, such as [d3.ascending](https://github.com/d3/d3-array#ascending) or [d3.descending](https://github.com/d3/d3-array#descending). This is roughly equivalent to sorting the input array before applying the nest operator; however it is typically more efficient as the size of each group is smaller. If no value comparator is specified, elements will be returned in the order they appeared in the input array. This applies to [*nest*.map](#nest_map), [*nest*.entries](#nest_entries) and [*nest*.object](#nest_object).\n\n# nest.rollup(function) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L7 \"Source\")\n\nSpecifies a rollup *function* to be applied on each group of leaf elements. The return value of the rollup function will replace the array of leaf values in either the associative array returned by [*nest*.map](#nest_map) or [*nest*.object](#nest_object); for [*nest*.entries](#nest_entries), it replaces the leaf *entry*.values with *entry*.value. If a [leaf comparator](#nest_sortValues) is specified, the leaf elements are sorted prior to invoking the rollup function.\n\n# nest.map(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L50 \"Source\")\n\nApplies the nest operator to the specified *array*, returning a nested [map](#map). Each entry in the returned map corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another map; otherwise, the value is the array of elements filtered from the input *array* that have the given key value. If no keys are defined, returns the input *array*.\n\n# nest.object(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L49 \"Source\")\n\nApplies the nest operator to the specified *array*, returning a nested object. Each entry in the returned associative array corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another associative array; otherwise, the value is the array of elements filtered from the input *array* that have the given key value.\n\nNote: this method is unsafe if any of the keys conflict with built-in JavaScript properties, such as `__proto__`. If you cannot guarantee that the keys will be safe, you should use [nest.map](#nest_map) instead.\n\n# nest.entries(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L51 \"Source\")\n\nApplies the nest operator to the specified *array*, returning an array of key-values entries. Conceptually, this is similar to applying [*map*.entries](#map_entries) to the associative array returned by [*nest*.map](#nest_map), but it applies to every level of the hierarchy rather than just the first (outermost) level. Each entry in the returned array corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another nested array of entries; otherwise, the value is the array of elements filtered from the input *array* that have the given key value.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-collection", "error": "[Circular]", "extraneous": false, "_deduped": "d3-collection" }, "d3-dispatch": { "_from": "d3-dispatch@1", "_id": "d3-dispatch@1.0.6", "_inBundle": false, "_integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", "_location": "/d3-dispatch", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", "_shasum": "00d37bcee4dd8cd97729dd893a0ac29caaba5d58", "_spec": "d3-dispatch@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Register named callbacks and call them with arguments.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-dispatch/", "jsdelivr": "dist/d3-dispatch.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-dispatch.js", "module": "src/index.js", "name": "d3-dispatch", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-dispatch.min.js", "version": "1.0.6", "readme": "# d3-dispatch\n\nDispatching is a convenient mechanism for separating concerns with loosely-coupled code: register named callbacks and then call them with arbitrary arguments. A variety of D3 components, such as [d3-request](https://github.com/d3/d3-request), use this mechanism to emit events to listeners. Think of this like Node’s [EventEmitter](https://nodejs.org/api/events.html), except every listener has a well-defined name so it’s easy to remove or replace them.\n\nFor example, to create a dispatch for *start* and *end* events:\n\n```js\nvar dispatch = d3.dispatch(\"start\", \"end\");\n```\n\nYou can then register callbacks for these events using [*dispatch*.on](#dispatch_on):\n\n```js\ndispatch.on(\"start\", callback1);\ndispatch.on(\"start.foo\", callback2);\ndispatch.on(\"end\", callback3);\n```\n\nThen, you can invoke all the *start* callbacks using [*dispatch*.call](#dispatch_call) or [*dispatch*.apply](#dispatch_apply):\n\n```js\ndispatch.call(\"start\");\n```\n\nLike *function*.call, you may also specify the `this` context and any arguments:\n\n```js\ndispatch.call(\"start\", {about: \"I am a context object\"}, \"I am an argument\");\n```\n\nWant a more involved example? See how to use [d3-dispatch for coordinated views](http://bl.ocks.org/mbostock/5872848).\n\n## Installing\n\nIf you use NPM, `npm install d3-dispatch`. Otherwise, download the [latest release](https://github.com/d3/d3-dispatch/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-dispatch.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-dispatch in your browser.](https://tonicdev.com/npm/d3-dispatch)\n\n## API Reference\n\n# d3.dispatch(types…) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js \"Source\")\n\nCreates a new dispatch for the specified event *types*. Each *type* is a string, such as `\"start\"` or `\"end\"`.\n\n# *dispatch*.on(typenames[, callback]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L26 \"Source\")\n\nAdds, removes or gets the *callback* for the specified *typenames*. If a *callback* function is specified, it is registered for the specified (fully-qualified) *typenames*. If a callback was already registered for the given *typenames*, the existing callback is removed before the new callback is added.\n\nThe specified *typenames* is a string, such as `start` or `end.foo`. The 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 `start end` or `start.foo start.bar`.\n\nTo remove all callbacks for a given name `foo`, say `dispatch.on(\".foo\", null)`.\n\nIf *callback* is not specified, returns the current callback for the specified *typenames*, if any. If multiple typenames are specified, the first matching callback is returned.\n\n# *dispatch*.copy() [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L49 \"Source\")\n\nReturns a copy of this dispatch object. Changes to this dispatch do not affect the returned copy and vice versa.\n\n# *dispatch*.call(type[, that[, arguments…]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L54 \"Source\")\n\nLike [*function*.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. See [*dispatch*.apply](#dispatch_apply) for more information.\n\n# *dispatch*.apply(type[, that[, arguments]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L59 \"Source\")\n\nLike [*function*.apply](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. For example, if you wanted to dispatch your *custom* callbacks after handling a native *click* event, while preserving the current `this` context and arguments, you could say:\n\n```js\nselection.on(\"click\", function() {\n dispatch.apply(\"custom\", this, arguments);\n});\n```\n\nYou can pass whatever arguments you want to callbacks; most commonly, you might create an object that represents an event, or pass the current datum (*d*) and index (*i*). See [function.call](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call) and [function.apply](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Apply) for further information.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-dispatch", "error": "[Circular]", "extraneous": false, "_deduped": "d3-dispatch" }, "d3-quadtree": { "_from": "d3-quadtree@1", "_id": "d3-quadtree@1.0.7", "_inBundle": false, "_integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", "_location": "/d3-quadtree", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-quadtree@1", "name": "d3-quadtree", "escapedName": "d3-quadtree", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-force" ], "_resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", "_shasum": "ca8b84df7bb53763fe3c2f24bd435137f4e53135", "_spec": "d3-quadtree@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-quadtree/issues" }, "deprecated": false, "description": "Two-dimensional recursive spatial subdivision.", "devDependencies": { "d3-array": "1 - 2", "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-quadtree/", "jsdelivr": "dist/d3-quadtree.min.js", "keywords": [ "d3", "d3-module", "quadtree" ], "license": "BSD-3-Clause", "main": "dist/d3-quadtree.js", "module": "src/index.js", "name": "d3-quadtree", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-quadtree.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": false, "unpkg": "dist/d3-quadtree.min.js", "version": "1.0.7", "readme": "# d3-quadtree\n\nA [quadtree](https://en.wikipedia.org/wiki/Quadtree) recursively partitions two-dimensional space into squares, dividing each square into four equally-sized squares. Each distinct point exists in a unique leaf [node](#nodes); coincident points are represented by a linked list. Quadtrees can accelerate various spatial operations, such as the [Barnes–Hut approximation](https://en.wikipedia.org/wiki/Barnes–Hut_simulation) for computing many-body forces, collision detection, and searching for nearby points.\n\n\n\n\n## Installing\n\nIf you use NPM, `npm install d3-quadtree`. Otherwise, download the [latest release](https://github.com/d3/d3-quadtree/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-quadtree.v1.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\n\n```\n\n## API Reference\n\n# d3.quadtree([data[, x, y]])\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/quadtree.js \"Source\")\n\nCreates a new, empty quadtree with an empty [extent](#quadtree_extent) and the default [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors. If *data* is specified, [adds](#quadtree_addAll) the specified array of data to the quadtree. This is equivalent to:\n\n```js\nvar tree = d3.quadtree()\n .addAll(data);\n```\n\nIf *x* and *y* are also specified, sets the [*x*-](#quadtree_x) and [*y*-](#quadtree_y) accessors to the specified functions before adding the specified array of data to the quadtree, equivalent to:\n\n```js\nvar tree = d3.quadtree()\n .x(x)\n .y(y)\n .addAll(data);\n```\n\n# quadtree.x([x]) [<>](https://github.com/d3/d3-quadtree/blob/master/src/x.js \"Source\")\n\nIf *x* is specified, sets the current *x*-coordinate accessor and returns the quadtree. If *x* is not specified, returns the current *x*-accessor, which defaults to:\n\n```js\nfunction x(d) {\n return d[0];\n}\n```\n\nThe *x*-acccessor is used to derive the *x*-coordinate of data when [adding](#quadtree_add) to and [removing](#quadtree_remove) from the tree. It is also used when [finding](#quadtree_find) to re-access the coordinates of data previously added to the tree; therefore, the *x*- and *y*-accessors must be consistent, returning the same value given the same input.\n\n# quadtree.y([y])\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/y.js \"Source\")\n\nIf *y* is specified, sets the current *y*-coordinate accessor and returns the quadtree. If *y* is not specified, returns the current *y*-accessor, which defaults to:\n\n```js\nfunction y(d) {\n return d[1];\n}\n```\n\nThe *y*-acccessor is used to derive the *y*-coordinate of data when [adding](#quadtree_add) to and [removing](#quadtree_remove) from the tree. It is also used when [finding](#quadtree_find) to re-access the coordinates of data previously added to the tree; therefore, the *x*- and *y*-accessors must be consistent, returning the same value given the same input.\n\n# quadtree.extent([*extent*])\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/extent.js \"Source\")\n\nIf *extent* is specified, expands the quadtree to [cover](#quadtree_cover) the specified points [[*x0*, *y0*], [*x1*, *y1*]] and returns the quadtree. If *extent* is not specified, returns the quadtree’s current extent [[*x0*, *y0*], [*x1*, *y1*]], where *x0* and *y0* are the inclusive lower bounds and *x1* and *y1* are the inclusive upper bounds, or undefined if the quadtree has no extent. The extent may also be expanded by calling [*quadtree*.cover](#quadtree_cover) or [*quadtree*.add](#quadtree_add).\n\n# quadtree.cover(x, y)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/cover.js \"Source\")\n\nExpands the quadtree to cover the specified point ⟨*x*,*y*⟩, and returns the quadtree. If the quadtree’s extent already covers the specified point, this method does nothing. If the quadtree has an extent, the extent is repeatedly doubled to cover the specified point, wrapping the [root](#quadtree_root) [node](#nodes) as necessary; if the quadtree is empty, the extent is initialized to the extent [[⌊*x*⌋, ⌊*y*⌋], [⌈*x*⌉, ⌈*y*⌉]]. (Rounding is necessary such that if the extent is later doubled, the boundaries of existing quadrants do not change due to floating point error.)\n\n# quadtree.add(datum)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/add.js \"Source\")\n\nAdds the specified *datum* to the quadtree, deriving its coordinates ⟨*x*,*y*⟩ using the current [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors, and returns the quadtree. If the new point is outside the current [extent](#quadtree_extent) of the quadtree, the quadtree is automatically expanded to [cover](#quadtree_cover) the new point.\n\n# quadtree.addAll(data)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/add.js \"Source\")\n\nAdds the specified array of *data* to the quadtree, deriving each element’s coordinates ⟨*x*,*y*⟩ using the current [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors, and return this quadtree. This is approximately equivalent to calling [*quadtree*.add](#quadtree_add) repeatedly:\n\n```js\nfor (var i = 0, n = data.length; i < n; ++i) {\n quadtree.add(data[i]);\n}\n```\n\nHowever, this method results in a more compact quadtree because the extent of the *data* is computed first before adding the data.\n\n# quadtree.remove(datum)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/remove.js \"Source\")\n\nRemoves the specified *datum* from the quadtree, deriving its coordinates ⟨*x*,*y*⟩ using the current [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors, and returns the quadtree. If the specified *datum* does not exist in this quadtree, this method does nothing.\n\n# quadtree.removeAll(data)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/remove.js \"Source\")\n\nRemoves the specified *data* from the quadtree, deriving their coordinates ⟨*x*,*y*⟩ using the current [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors, and returns the quadtree. If a specified datum does not exist in this quadtree, it is ignored.\n\n# quadtree.copy()\n\nReturns a copy of the quadtree. All [nodes](#nodes) in the returned quadtree are identical copies of the corresponding node in the quadtree; however, any data in the quadtree is shared by reference and not copied.\n\n# quadtree.root()\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/root.js \"Source\")\n\nReturns the root [node](#nodes) of the quadtree.\n\n# quadtree.data()\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/data.js \"Source\")\n\nReturns an array of all data in the quadtree.\n\n# quadtree.size()\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/size.js \"Source\")\n\nReturns the total number of data in the quadtree.\n\n# quadtree.find(x, y[, radius])\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/find.js \"Source\")\n\nReturns the datum closest to the position ⟨*x*,*y*⟩ with the given search *radius*. If *radius* is not specified, it defaults to infinity. If there is no datum within the search area, returns undefined.\n\n# quadtree.visit(callback)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/visit.js \"Source\")\n\nVisits each [node](#nodes) in the quadtree in pre-order traversal, invoking the specified *callback* with arguments *node*, *x0*, *y0*, *x1*, *y1* for each node, where *node* is the node being visited, ⟨*x0*, *y0*⟩ are the lower bounds of the node, and ⟨*x1*, *y1*⟩ are the upper bounds, and returns the quadtree. (Assuming that positive *x* is right and positive *y* is down, as is typically the case in Canvas and SVG, ⟨*x0*, *y0*⟩ is the top-left corner and ⟨*x1*, *y1*⟩ is the lower-right corner; however, the coordinate system is arbitrary, so more formally *x0* <= *x1* and *y0* <= *y1*.)\n\nIf the *callback* returns true for a given node, then the children of that node are not visited; otherwise, all child nodes are visited. This can be used to quickly visit only parts of the tree, for example when using the [Barnes–Hut approximation](https://en.wikipedia.org/wiki/Barnes–Hut_simulation). Note, however, that child quadrants are always visited in sibling order: top-left, top-right, bottom-left, bottom-right. In cases such as [search](#quadtree_find), visiting siblings in a specific order may be faster.\n\n# quadtree.visitAfter(callback)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/visitAfter.js \"Source\")\n\nVisits each [node](#nodes) in the quadtree in post-order traversal, invoking the specified *callback* with arguments *node*, *x0*, *y0*, *x1*, *y1* for each node, where *node* is the node being visited, ⟨*x0*, *y0*⟩ are the lower bounds of the node, and ⟨*x1*, *y1*⟩ are the upper bounds, and returns the quadtree. (Assuming that positive *x* is right and positive *y* is down, as is typically the case in Canvas and SVG, ⟨*x0*, *y0*⟩ is the top-left corner and ⟨*x1*, *y1*⟩ is the lower-right corner; however, the coordinate system is arbitrary, so more formally *x0* <= *x1* and *y0* <= *y1*.) Returns *root*.\n\n### Nodes\n\nInternal nodes of the quadtree are represented as four-element arrays in left-to-right, top-to-bottom order:\n\n* `0` - the top-left quadrant, if any.\n* `1` - the top-right quadrant, if any.\n* `2` - the bottom-left quadrant, if any.\n* `3` - the bottom-right quadrant, if any.\n\nA child quadrant may be undefined if it is empty.\n\nLeaf nodes are represented as objects with the following properties:\n\n* `data` - the data associated with this point, as passed to [*quadtree*.add](#quadtree_add).\n* `next` - the next datum in this leaf, if any.\n\nThe `length` property may be used to distinguish leaf nodes from internal nodes: it is undefined for leaf nodes, and 4 for internal nodes. For example, to iterate over all data in a leaf node:\n\n```js\nif (!node.length) do console.log(node.data); while (node = node.next);\n```\n\nThe point’s *x*- and *y*-coordinates **must not be modified** while the point is in the quadtree. To update a point’s position, [remove](#quadtree_remove) the point and then re-[add](#quadtree_add) it to the quadtree at the new position. Alternatively, you may discard the existing quadtree entirely and create a new one from scratch; this may be more efficient if many of the points have moved.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-quadtree", "error": "[Circular]", "extraneous": false, "_deduped": "d3-quadtree" }, "d3-timer": { "_from": "d3-timer@1", "_id": "d3-timer@1.0.10", "_inBundle": false, "_integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", "_location": "/d3-timer", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-timer@1", "name": "d3-timer", "escapedName": "d3-timer", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-force", "/d3-transition" ], "_resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", "_shasum": "dfe76b8a91748831b13b6d9c793ffbd508dd9de5", "_spec": "d3-timer@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-timer/issues" }, "deprecated": false, "description": "An efficient queue capable of managing thousands of concurrent animations.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-timer/", "jsdelivr": "dist/d3-timer.min.js", "keywords": [ "d3", "d3-module", "timer", "transition", "animation", "requestAnimationFrame", "setTimeout", "setInterval" ], "license": "BSD-3-Clause", "main": "dist/d3-timer.js", "module": "src/index.js", "name": "d3-timer", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-timer.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-timer.min.js", "version": "1.0.10", "readme": "# d3-timer\n\nThis module provides an efficient queue capable of managing thousands of concurrent animations, while guaranteeing consistent, synchronized timing with concurrent or staged animations. Internally, it uses [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) for fluid animation (if available), switching to [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) for delays longer than 24ms.\n\n## Installing\n\nIf you use NPM, `npm install d3-timer`. Otherwise, download the [latest release](https://github.com/d3/d3-timer/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-timer.v1.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\n\n```\n\n## API Reference\n\n# d3.now() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L15 \"Source\")\n\nReturns the current time as defined by [performance.now](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) if available, and [Date.now](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now) if not. The current time is updated at the start of a frame; it is thus consistent during the frame, and any timers scheduled during the same frame will be synchronized. If this method is called outside of a frame, such as in response to a user event, the current time is calculated and then fixed until the next frame, again ensuring consistent timing during event handling.\n\n# d3.timer(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L52 \"Source\")\n\nSchedules a new timer, invoking the specified *callback* repeatedly until the timer is [stopped](#timer_stop). An optional numeric *delay* in milliseconds may be specified to invoke the given *callback* after a delay; if *delay* is not specified, it defaults to zero. The delay is relative to the specified *time* in milliseconds; if *time* is not specified, it defaults to [now](#now).\n\nThe *callback* is passed the (apparent) *elapsed* time since the timer became active. For example:\n\n```js\nvar t = d3.timer(function(elapsed) {\n console.log(elapsed);\n if (elapsed > 200) t.stop();\n}, 150);\n```\n\nThis produces roughly the following console output:\n\n```\n3\n25\n48\n65\n85\n106\n125\n146\n167\n189\n209\n```\n\n(The exact values may vary depending on your JavaScript runtime and what else your computer is doing.) Note that the first *elapsed* time is 3ms: this is the elapsed time since the timer started, not since the timer was scheduled. Here the timer started 150ms after it was scheduled due to the specified delay. The apparent *elapsed* time may be less than the true *elapsed* time if the page is backgrounded and [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) is paused; in the background, apparent time is frozen.\n\nIf [timer](#timer) is called within the callback of another timer, the new timer callback (if eligible as determined by the specified *delay* and *time*) will be invoked immediately at the end of the current frame, rather than waiting until the next frame. Within a frame, timer callbacks are guaranteed to be invoked in the order they were scheduled, regardless of their start time.\n\n# timer.restart(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L31 \"Source\")\n\nRestart a timer with the specified *callback* and optional *delay* and *time*. This is equivalent to stopping this timer and creating a new timer with the specified arguments, although this timer retains the original invocation priority.\n\n# timer.stop() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L43 \"Source\")\n\nStops this timer, preventing subsequent callbacks. This method has no effect if the timer has already stopped.\n\n# d3.timerFlush() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L58 \"Source\")\n\nImmediately invoke any eligible timer callbacks. Note that zero-delay timers are normally first executed after one frame (~17ms). This can cause a brief flicker because the browser renders the page twice: once at the end of the first event loop, then again immediately on the first timer callback. By flushing the timer queue at the end of the first event loop, you can run any zero-delay timers immediately and avoid the flicker.\n\n# d3.timeout(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timeout.js \"Source\")\n\nLike [timer](#timer), except the timer automatically [stops](#timer_stop) on its first callback. A suitable replacement for [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) that is guaranteed to not run in the background. The *callback* is passed the elapsed time.\n\n# d3.interval(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/interval.js \"Source\")\n\nLike [timer](#timer), except the *callback* is invoked only every *delay* milliseconds; if *delay* is not specified, this is equivalent to [timer](#timer). A suitable replacement for [setInterval](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval) that is guaranteed to not run in the background. The *callback* is passed the elapsed time.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-timer", "error": "[Circular]", "extraneous": false, "_deduped": "d3-timer" } }, "deprecated": false, "description": "Force-directed graph layout using velocity Verlet integration.", "devDependencies": { "eslint": "5", "rollup": "0.64", "rollup-plugin-terser": "1", "tape": "4" }, "homepage": "https://d3js.org/d3-force/", "jsdelivr": "dist/d3-force.min.js", "keywords": [ "d3", "d3-module", "layout", "network", "graph", "force", "verlet", "infovis" ], "license": "BSD-3-Clause", "main": "dist/d3-force.js", "module": "src/index.js", "name": "d3-force", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-force.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "unpkg": "dist/d3-force.min.js", "version": "1.2.1", "readme": "# d3-force\n\nThis module implements a [velocity Verlet](https://en.wikipedia.org/wiki/Verlet_integration) numerical integrator for simulating physical forces on particles. The simulation is simplified: it assumes a constant unit time step Δ*t* = 1 for each step, and a constant unit mass *m* = 1 for all particles. As a result, a force *F* acting on a particle is equivalent to a constant acceleration *a* over the time interval Δ*t*, and can be simulated simply by adding to the particle’s velocity, which is then added to the particle’s position.\n\nIn the domain of information visualization, physical simulations are useful for studying [networks](http://bl.ocks.org/mbostock/ad70335eeef6d167bc36fd3c04378048) and [hierarchies](http://bl.ocks.org/mbostock/95aa92e2f4e8345aaa55a4a94d41ce37)!\n\n[\"Force](http://bl.ocks.org/mbostock/ad70335eeef6d167bc36fd3c04378048)[\"Force-Directed](http://bl.ocks.org/mbostock/95aa92e2f4e8345aaa55a4a94d41ce37)\n\nYou can also simulate circles (disks) with collision, such as for [bubble charts](http://www.nytimes.com/interactive/2012/09/06/us/politics/convention-word-counts.html) or [beeswarm plots](http://bl.ocks.org/mbostock/6526445e2b44303eebf21da3b6627320):\n\n[\"Collision](http://bl.ocks.org/mbostock/31ce330646fa8bcb7289ff3b97aab3f5)[\"Beeswarm\"](http://bl.ocks.org/mbostock/6526445e2b44303eebf21da3b6627320)\n\nYou can even use it as a rudimentary physics engine, say to simulate cloth:\n\n[\"Force-Directed](http://bl.ocks.org/mbostock/1b64ec067fcfc51e7471d944f51f1611)\n\nTo use this module, create a [simulation](#simulation) for an array of [nodes](#simulation_nodes), and compose the desired [forces](#simulation_force). Then [listen](#simulation_on) for tick events to render the nodes as they update in your preferred graphics system, such as Canvas or SVG.\n\n## Installing\n\nIf you use NPM, `npm install d3-force`. Otherwise, download the [latest release](https://github.com/d3/d3-force/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-force.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3_force` global is exported:\n\n```html\n\n\n\n\n\n\n```\n\n[Try d3-force in your browser.](https://tonicdev.com/npm/d3-force)\n\n## API Reference\n\n### Simulation\n\n# d3.forceSimulation([nodes]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js \"Source\")\n\nCreates a new simulation with the specified array of [*nodes*](#simulation_nodes) and no [forces](#simulation_force). If *nodes* is not specified, it defaults to the empty array. The simulator [starts](#simulation_restart) automatically; use [*simulation*.on](#simulation_on) to listen for tick events as the simulation runs. If you wish to run the simulation manually instead, call [*simulation*.stop](#simulation_stop), and then call [*simulation*.tick](#simulation_tick) as desired.\n\n# simulation.restart() [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L86 \"Source\")\n\nRestarts the simulation’s internal timer and returns the simulation. In conjunction with [*simulation*.alphaTarget](#simulation_alphaTarget) or [*simulation*.alpha](#simulation_alpha), this method can be used to “reheat” the simulation during interaction, such as when dragging a node, or to resume the simulation after temporarily pausing it with [*simulation*.stop](#simulation_stop).\n\n# simulation.stop() [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L90 \"Source\")\n\nStops the simulation’s internal timer, if it is running, and returns the simulation. If the timer is already stopped, this method does nothing. This method is useful for running the simulation manually; see [*simulation*.tick](#simulation_tick).\n\n# simulation.tick([iterations]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L38 \"Source\")\n\nManually steps the simulation by the specified number of *iterations*, and returns the simulation. If *iterations* is not specified, it defaults to 1 (single step).\n\nFor each iteration, it increments the current [*alpha*](#simulation_alpha) by ([*alphaTarget*](#simulation_alphaTarget) - *alpha*) × [*alphaDecay*](#simulation_alphaDecay); then invokes each registered [force](#simulation_force), passing the new *alpha*; then decrements each [node](#simulation_nodes)’s velocity by *velocity* × [*velocityDecay*](#simulation_velocityDecay); lastly increments each node’s position by *velocity*.\n\nThis method does not dispatch [events](#simulation_on); events are only dispatched by the internal timer when the simulation is started automatically upon [creation](#forceSimulation) or by calling [*simulation*.restart](#simulation_restart). The natural number of ticks when the simulation is started is ⌈*log*([*alphaMin*](#simulation_alphaMin)) / *log*(1 - [*alphaDecay*](#simulation_alphaDecay))⌉; by default, this is 300.\n\nThis method can be used in conjunction with [*simulation*.stop](#simulation_stop) to compute a [static force layout](https://bl.ocks.org/mbostock/1667139). For large graphs, static layouts should be computed [in a web worker](https://bl.ocks.org/mbostock/01ab2e85e8727d6529d20391c0fd9a16) to avoid freezing the user interface.\n\n# simulation.nodes([nodes]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L94 \"Source\")\n\nIf *nodes* is specified, sets the simulation’s nodes to the specified array of objects, initializing their positions and velocities if necessary, and then [re-initializes](#force_initialize) any bound [forces](#simulation_force); returns the simulation. If *nodes* is not specified, returns the simulation’s array of nodes as specified to the [constructor](#forceSimulation).\n\nEach *node* must be an object. The following properties are assigned by the simulation:\n\n* `index` - the node’s zero-based index into *nodes*\n* `x` - the node’s current *x*-position\n* `y` - the node’s current *y*-position\n* `vx` - the node’s current *x*-velocity\n* `vy` - the node’s current *y*-velocity\n\nThe position ⟨*x*,*y*⟩ and velocity ⟨*vx*,*vy*⟩ may be subsequently modified by [forces](#forces) and by the simulation. If either *vx* or *vy* is NaN, the velocity is initialized to ⟨0,0⟩. If either *x* or *y* is NaN, the position is initialized in a [phyllotaxis arrangement](http://bl.ocks.org/mbostock/11478058), so chosen to ensure a deterministic, uniform distribution around the origin.\n\nTo fix a node in a given position, you may specify two additional properties:\n\n* `fx` - the node’s fixed *x*-position\n* `fy` - the node’s fixed *y*-position\n\nAt the end of each [tick](#simulation_tick), after the application of any forces, a node with a defined *node*.fx has *node*.x reset to this value and *node*.vx set to zero; likewise, a node with a defined *node*.fy has *node*.y reset to this value and *node*.vy set to zero. To unfix a node that was previously fixed, set *node*.fx and *node*.fy to null, or delete these properties.\n\nIf the specified array of *nodes* is modified, such as when nodes are added to or removed from the simulation, this method must be called again with the new (or changed) array to notify the simulation and bound forces of the change; the simulation does not make a defensive copy of the specified array.\n\n# simulation.alpha([alpha]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L98 \"Source\")\n\nIf *alpha* is specified, sets the current alpha to the specified number in the range [0,1] and returns this simulation. If *alpha* is not specified, returns the current alpha value, which defaults to 1.\n\n# simulation.alphaMin([min]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L102 \"Source\")\n\nIf *min* is specified, sets the minimum *alpha* to the specified number in the range [0,1] and returns this simulation. If *min* is not specified, returns the current minimum *alpha* value, which defaults to 0.001. The simulation’s internal timer stops when the current [*alpha*](#simulation_alpha) is less than the minimum *alpha*. The default [alpha decay rate](#simulation_alphaDecay) of ~0.0228 corresponds to 300 iterations.\n\n# simulation.alphaDecay([decay]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L106 \"Source\")\n\nIf *decay* is specified, sets the [*alpha*](#simulation_alpha) decay rate to the specified number in the range [0,1] and returns this simulation. If *decay* is not specified, returns the current *alpha* decay rate, which defaults to 0.0228… = 1 - *pow*(0.001, 1 / 300) where 0.001 is the default [minimum *alpha*](#simulation_alphaMin).\n\nThe alpha decay rate determines how quickly the current alpha interpolates towards the desired [target *alpha*](#simulation_alphaTarget); since the default target *alpha* is zero, by default this controls how quickly the simulation cools. Higher decay rates cause the simulation to stabilize more quickly, but risk getting stuck in a local minimum; lower values cause the simulation to take longer to run, but typically converge on a better layout. To have the simulation run forever at the current *alpha*, set the *decay* rate to zero; alternatively, set a [target *alpha*](#simulation_alphaTarget) greater than the [minimum *alpha*](#simulation_alphaMin).\n\n# simulation.alphaTarget([target]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L110 \"Source\")\n\nIf *target* is specified, sets the current target [*alpha*](#simulation_alpha) to the specified number in the range [0,1] and returns this simulation. If *target* is not specified, returns the current target alpha value, which defaults to 0.\n\n# simulation.velocityDecay([decay]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L114 \"Source\")\n\nIf *decay* is specified, sets the velocity decay factor to the specified number in the range [0,1] and returns this simulation. If *decay* is not specified, returns the current velocity decay factor, which defaults to 0.4. The decay factor is akin to atmospheric friction; after the application of any forces during a [tick](#simulation_tick), each node’s velocity is multiplied by 1 - *decay*. As with lowering the [alpha decay rate](#simulation_alphaDecay), less velocity decay may converge on a better solution, but risks numerical instabilities and oscillation.\n\n# simulation.force(name[, force]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L118 \"Source\")\n\nIf *force* is specified, assigns the [force](#forces) for the specified *name* and returns this simulation. If *force* is not specified, returns the force with the specified name, or undefined if there is no such force. (By default, new simulations have no forces.) For example, to create a new simulation to layout a graph, you might say:\n\n```js\nvar simulation = d3.forceSimulation(nodes)\n .force(\"charge\", d3.forceManyBody())\n .force(\"link\", d3.forceLink(links))\n .force(\"center\", d3.forceCenter());\n```\n\nTo remove the force with the given *name*, pass null as the *force*. For example, to remove the charge force:\n\n```js\nsimulation.force(\"charge\", null);\n```\n\n# simulation.find(x, y[, radius]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L122 \"Source\")\n\nReturns the node closest to the position ⟨*x*,*y*⟩ with the given search *radius*. If *radius* is not specified, it defaults to infinity. If there is no node within the search area, returns undefined.\n\n# simulation.on(typenames, [listener]) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L145 \"Source\")\n\nIf *listener* is specified, sets the event *listener* for the specified *typenames* and returns this simulation. If an event listener was already registered for the same type and name, the existing listener is removed before the new listener is added. If *listener* is null, removes the current event listeners for the specified *typenames*, if any. If *listener* is not specified, returns the first currently-assigned listener matching the specified *typenames*, if any. When a specified event is dispatched, each *listener* will be invoked with the `this` context as the simulation.\n\nThe *typenames* is a string containing one or more *typename* separated by whitespace. Each *typename* is a *type*, optionally followed by a period (`.`) and a *name*, such as `tick.foo` and `tick.bar`; the name allows multiple listeners to be registered for the same *type*. The *type* must be one of the following:\n\n* `tick` - after each tick of the simulation’s internal timer.\n* `end` - after the simulation’s timer stops when *alpha* < [*alphaMin*](#simulation_alphaMin).\n\nNote that *tick* events are not dispatched when [*simulation*.tick](#simulation_tick) is called manually; events are only dispatched by the internal timer and are intended for interactive rendering of the simulation. To affect the simulation, register [forces](#simulation_force) instead of modifying nodes’ positions or velocities inside a tick event listener.\n\nSee [*dispatch*.on](https://github.com/d3/d3-dispatch#dispatch_on) for details.\n\n### Forces\n\nA *force* is simply a function that modifies nodes’ positions or velocities; in this context, a *force* can apply a classical physical force such as electrical charge or gravity, or it can resolve a geometric constraint, such as keeping nodes within a bounding box or keeping linked nodes a fixed distance apart. For example, a simple positioning force that moves nodes towards the origin ⟨0,0⟩ might be implemented as:\n\n```js\nfunction force(alpha) {\n for (var i = 0, n = nodes.length, node, k = alpha * 0.1; i < n; ++i) {\n node = nodes[i];\n node.vx -= node.x * k;\n node.vy -= node.y * k;\n }\n}\n```\n\nForces typically read the node’s current position ⟨*x*,*y*⟩ and then add to (or subtract from) the node’s velocity ⟨*vx*,*vy*⟩. However, forces may also “peek ahead” to the anticipated next position of the node, ⟨*x* + *vx*,*y* + *vy*⟩; this is necessary for resolving geometric constraints through [iterative relaxation](https://en.wikipedia.org/wiki/Relaxation_\\(iterative_method\\)). Forces may also modify the position directly, which is sometimes useful to avoid adding energy to the simulation, such as when recentering the simulation in the viewport.\n\nSimulations typically compose multiple forces as desired. This module provides several for your enjoyment:\n\n* [Centering](#centering)\n* [Collision](#collision)\n* [Links](#links)\n* [Many-Body](#many-body)\n* [Positioning](#positioning)\n\nForces may optionally implement [*force*.initialize](#force_initialize) to receive the simulation’s array of nodes.\n\n# force(alpha) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L47 \"Source\")\n\nApplies this force, optionally observing the specified *alpha*. Typically, the force is applied to the array of nodes previously passed to [*force*.initialize](#force_initialize), however, some forces may apply to a subset of nodes, or behave differently. For example, [d3.forceLink](#links) applies to the source and target of each link.\n\n# force.initialize(nodes) [<>](https://github.com/d3/d3-force/blob/master/src/simulation.js#L77 \"Source\")\n\nAssigns the array of *nodes* to this force. This method is called when a force is bound to a simulation via [*simulation*.force](#simulation_force) and when the simulation’s nodes change via [*simulation*.nodes](#simulation_nodes). A force may perform necessary work during initialization, such as evaluating per-node parameters, to avoid repeatedly performing work during each application of the force.\n\n#### Centering\n\nThe centering force translates nodes uniformly so that the mean position of all nodes (the center of mass if all nodes have equal weight) is at the given position ⟨[*x*](#center_x),[*y*](#center_y)⟩. This force modifies the positions of nodes on each application; it does not modify velocities, as doing so would typically cause the nodes to overshoot and oscillate around the desired center. This force helps keeps nodes in the center of the viewport, and unlike the [positioning force](#positioning), it does not distort their relative positions.\n\n# d3.forceCenter([x, y]) [<>](https://github.com/d3/d3-force/blob/master/src/center.js#L1 \"Source\")\n\nCreates a new centering force with the specified [*x*-](#center_x) and [*y*-](#center_y) coordinates. If *x* and *y* are not specified, they default to ⟨0,0⟩.\n\n# center.x([x]) [<>](https://github.com/d3/d3-force/blob/master/src/center.js#L27 \"Source\")\n\nIf *x* is specified, sets the *x*-coordinate of the centering position to the specified number and returns this force. If *x* is not specified, returns the current *x*-coordinate, which defaults to zero.\n\n# center.y([y]) [<>](https://github.com/d3/d3-force/blob/master/src/center.js#L31 \"Source\")\n\nIf *y* is specified, sets the *y*-coordinate of the centering position to the specified number and returns this force. If *y* is not specified, returns the current *y*-coordinate, which defaults to zero.\n\n#### Collision\n\nThe collision force treats nodes as circles with a given [radius](#collide_radius), rather than points, and prevents nodes from overlapping. More formally, two nodes *a* and *b* are separated so that the distance between *a* and *b* is at least *radius*(*a*) + *radius*(*b*). To reduce jitter, this is by default a “soft” constraint with a configurable [strength](#collide_strength) and [iteration count](#collide_iterations).\n\n# d3.forceCollide([radius]) [<>](https://github.com/d3/d3-force/blob/master/src/collide.js \"Source\")\n\nCreates a new circle collision force with the specified [*radius*](#collide_radius). If *radius* is not specified, it defaults to the constant one for all nodes.\n\n# collide.radius([radius]) [<>](https://github.com/d3/d3-force/blob/master/src/collide.js#L86 \"Source\")\n\nIf *radius* is specified, sets the radius accessor to the specified number or function, re-evaluates the radius accessor for each node, and returns this force. If *radius* is not specified, returns the current radius accessor, which defaults to:\n\n```js\nfunction radius() {\n return 1;\n}\n```\n\nThe radius accessor is invoked for each [node](#simulation_nodes) in the simulation, being passed the *node* and its zero-based *index*. The resulting number is then stored internally, such that the radius of each node is only recomputed when the force is initialized or when this method is called with a new *radius*, and not on every application of the force.\n\n# collide.strength([strength]) [<>](https://github.com/d3/d3-force/blob/master/src/collide.js#L82 \"Source\")\n\nIf *strength* is specified, sets the force strength to the specified number in the range [0,1] and returns this force. If *strength* is not specified, returns the current strength which defaults to 0.7.\n\nOverlapping nodes are resolved through iterative relaxation. For each node, the other nodes that are anticipated to overlap at the next tick (using the anticipated positions ⟨*x* + *vx*,*y* + *vy*⟩) are determined; the node’s velocity is then modified to push the node out of each overlapping node. The change in velocity is dampened by the force’s strength such that the resolution of simultaneous overlaps can be blended together to find a stable solution.\n\n# collide.iterations([iterations]) [<>](https://github.com/d3/d3-force/blob/master/src/collide.js#L78 \"Source\")\n\nIf *iterations* is specified, sets the number of iterations per application to the specified number and returns this force. If *iterations* is not specified, returns the current iteration count which defaults to 1. Increasing the number of iterations greatly increases the rigidity of the constraint and avoids partial overlap of nodes, but also increases the runtime cost to evaluate the force.\n\n#### Links\n\nThe link force pushes linked nodes together or apart according to the desired [link distance](#link_distance). The strength of the force is proportional to the difference between the linked nodes’ distance and the target distance, similar to a spring force.\n\n# d3.forceLink([links]) [<>](https://github.com/d3/d3-force/blob/master/src/link.js \"Source\")\n\nCreates a new link force with the specified *links* and default parameters. If *links* is not specified, it defaults to the empty array.\n\n# link.links([links]) [<>](https://github.com/d3/d3-force/blob/master/src/link.js#L92 \"Source\")\n\nIf *links* is specified, sets the array of links associated with this force, recomputes the [distance](#link_distance) and [strength](#link_strength) parameters for each link, and returns this force. If *links* is not specified, returns the current array of links, which defaults to the empty array.\n\nEach link is an object with the following properties:\n\n* `source` - the link’s source node; see [*simulation*.nodes](#simulation_nodes)\n* `target` - the link’s target node; see [*simulation*.nodes](#simulation_nodes)\n* `index` - the zero-based index into *links*, assigned by this method\n\nFor convenience, a link’s source and target properties may be initialized using numeric or string identifiers rather than object references; see [*link*.id](#link_id). When the link force is [initialized](#force_initialize) (or re-initialized, as when the nodes or links change), any *link*.source or *link*.target property which is *not* an object is replaced by an object reference to the corresponding *node* with the given identifier.\n\nIf the specified array of *links* is modified, such as when links are added to or removed from the simulation, this method must be called again with the new (or changed) array to notify the force of the change; the force does not make a defensive copy of the specified array.\n\n# link.id([id]) [<>](https://github.com/d3/d3-force/blob/master/src/link.js#L96 \"Source\")\n\nIf *id* is specified, sets the node id accessor to the specified function and returns this force. If *id* is not specified, returns the current node id accessor, which defaults to the numeric *node*.index:\n\n```js\nfunction id(d) {\n return d.index;\n}\n```\n\nThe default id accessor allows each link’s source and target to be specified as a zero-based index into the [nodes](#simulation_nodes) array. For example:\n\n```js\nvar nodes = [\n {\"id\": \"Alice\"},\n {\"id\": \"Bob\"},\n {\"id\": \"Carol\"}\n];\n\nvar links = [\n {\"source\": 0, \"target\": 1}, // Alice → Bob\n {\"source\": 1, \"target\": 2} // Bob → Carol\n];\n```\n\nNow consider a different id accessor that returns a string:\n\n```js\nfunction id(d) {\n return d.id;\n}\n```\n\nWith this accessor, you can use named sources and targets:\n\n```js\nvar nodes = [\n {\"id\": \"Alice\"},\n {\"id\": \"Bob\"},\n {\"id\": \"Carol\"}\n];\n\nvar links = [\n {\"source\": \"Alice\", \"target\": \"Bob\"},\n {\"source\": \"Bob\", \"target\": \"Carol\"}\n];\n```\n\nThis is particularly useful when representing graphs in JSON, as JSON does not allow references. See [this example](http://bl.ocks.org/mbostock/f584aa36df54c451c94a9d0798caed35).\n\nThe id accessor is invoked for each node whenever the force is initialized, as when the [nodes](#simulation_nodes) or [links](#link_links) change, being passed the node and its zero-based index.\n\n# link.distance([distance]) [<>](https://github.com/d3/d3-force/blob/master/src/link.js#L108 \"Source\")\n\nIf *distance* is specified, sets the distance accessor to the specified number or function, re-evaluates the distance accessor for each link, and returns this force. If *distance* is not specified, returns the current distance accessor, which defaults to:\n\n```js\nfunction distance() {\n return 30;\n}\n```\n\nThe distance accessor is invoked for each [link](#link_links), being passed the *link* and its zero-based *index*. The resulting number is then stored internally, such that the distance of each link is only recomputed when the force is initialized or when this method is called with a new *distance*, and not on every application of the force.\n\n# link.strength([strength]) [<>](https://github.com/d3/d3-force/blob/master/src/link.js#L104 \"Source\")\n\nIf *strength* is specified, sets the strength accessor to the specified number or function, re-evaluates the strength accessor for each link, and returns this force. If *strength* is not specified, returns the current strength accessor, which defaults to:\n\n```js\nfunction strength(link) {\n return 1 / Math.min(count(link.source), count(link.target));\n}\n```\n\nWhere *count*(*node*) is a function that returns the number of links with the given node as a source or target. This default was chosen because it automatically reduces the strength of links connected to heavily-connected nodes, improving stability.\n\nThe strength accessor is invoked for each [link](#link_links), being passed the *link* and its zero-based *index*. The resulting number is then stored internally, such that the strength of each link is only recomputed when the force is initialized or when this method is called with a new *strength*, and not on every application of the force.\n\n# link.iterations([iterations]) [<>](https://github.com/d3/d3-force/blob/master/src/link.js#L100 \"Source\")\n\nIf *iterations* is specified, sets the number of iterations per application to the specified number and returns this force. If *iterations* is not specified, returns the current iteration count which defaults to 1. Increasing the number of iterations greatly increases the rigidity of the constraint and is useful for [complex structures such as lattices](http://bl.ocks.org/mbostock/1b64ec067fcfc51e7471d944f51f1611), but also increases the runtime cost to evaluate the force.\n\n#### Many-Body\n\nThe many-body (or *n*-body) force applies mutually amongst all [nodes](#simulation_nodes). It can be used to simulate gravity (attraction) if the [strength](#manyBody_strength) is positive, or electrostatic charge (repulsion) if the strength is negative. This implementation uses quadtrees and the [Barnes–Hut approximation](https://en.wikipedia.org/wiki/Barnes–Hut_simulation) to greatly improve performance; the accuracy can be customized using the [theta](#manyBody_theta) parameter.\n\nUnlike links, which only affect two linked nodes, the charge force is global: every node affects every other node, even if they are on disconnected subgraphs.\n\n# d3.forceManyBody() [<>](https://github.com/d3/d3-force/blob/master/src/manyBody.js \"Source\")\n\nCreates a new many-body force with the default parameters.\n\n# manyBody.strength([strength]) [<>](https://github.com/d3/d3-force/blob/master/src/manyBody.js#L97 \"Source\")\n\nIf *strength* is specified, sets the strength accessor to the specified number or function, re-evaluates the strength accessor for each node, and returns this force. A positive value causes nodes to attract each other, similar to gravity, while a negative value causes nodes to repel each other, similar to electrostatic charge. If *strength* is not specified, returns the current strength accessor, which defaults to:\n\n```js\nfunction strength() {\n return -30;\n}\n```\n\nThe strength accessor is invoked for each [node](#simulation_nodes) in the simulation, being passed the *node* and its zero-based *index*. The resulting number is then stored internally, such that the strength of each node is only recomputed when the force is initialized or when this method is called with a new *strength*, and not on every application of the force.\n\n# manyBody.theta([theta]) [<>](https://github.com/d3/d3-force/blob/master/src/manyBody.js#L109 \"Source\")\n\nIf *theta* is specified, sets the Barnes–Hut approximation criterion to the specified number and returns this force. If *theta* is not specified, returns the current value, which defaults to 0.9.\n\nTo accelerate computation, this force implements the [Barnes–Hut approximation](http://en.wikipedia.org/wiki/Barnes–Hut_simulation) which takes O(*n* log *n*) per application where *n* is the number of [nodes](#simulation_nodes). For each application, a [quadtree](https://github.com/d3/d3-quadtree) stores the current node positions; then for each node, the combined force of all other nodes on the given node is computed. For a cluster of nodes that is far away, the charge force can be approximated by treating the cluster as a single, larger node. The *theta* parameter determines the accuracy of the approximation: if the ratio *w* / *l* of the width *w* of the quadtree cell to the distance *l* from the node to the cell’s center of mass is less than *theta*, all nodes in the given cell are treated as a single node rather than individually.\n\n# manyBody.distanceMin([distance]) [<>](https://github.com/d3/d3-force/blob/master/src/manyBody.js#L101 \"Source\")\n\nIf *distance* is specified, sets the minimum distance between nodes over which this force is considered. If *distance* is not specified, returns the current minimum distance, which defaults to 1. A minimum distance establishes an upper bound on the strength of the force between two nearby nodes, avoiding instability. In particular, it avoids an infinitely-strong force if two nodes are exactly coincident; in this case, the direction of the force is random.\n\n# manyBody.distanceMax([distance]) [<>](https://github.com/d3/d3-force/blob/master/src/manyBody.js#L105 \"Source\")\n\nIf *distance* is specified, sets the maximum distance between nodes over which this force is considered. If *distance* is not specified, returns the current maximum distance, which defaults to infinity. Specifying a finite maximum distance improves performance and produces a more localized layout.\n\n#### Positioning\n\nThe [*x*](#forceX)- and [*y*](#forceY)-positioning forces push nodes towards a desired position along the given dimension with a configurable strength. The [*radial*](#forceRadial) force is similar, except it pushes nodes towards the closest point on a given circle. The strength of the force is proportional to the one-dimensional distance between the node’s position and the target position. While these forces can be used to position individual nodes, they are intended primarily for global forces that apply to all (or most) nodes.\n\n# d3.forceX([x]) [<>](https://github.com/d3/d3-force/blob/master/src/x.js \"Source\")\n\nCreates a new positioning force along the *x*-axis towards the given position [*x*](#x_x). If *x* is not specified, it defaults to 0.\n\n# x.strength([strength]) [<>](https://github.com/d3/d3-force/blob/master/src/x.js#L32 \"Source\")\n\nIf *strength* is specified, sets the strength accessor to the specified number or function, re-evaluates the strength accessor for each node, and returns this force. The *strength* determines how much to increment the node’s *x*-velocity: ([*x*](#x_x) - *node*.x) × *strength*. For example, a value of 0.1 indicates that the node should move a tenth of the way from its current *x*-position to the target *x*-position with each application. Higher values moves nodes more quickly to the target position, often at the expense of other forces or constraints. A value outside the range [0,1] is not recommended.\n\nIf *strength* is not specified, returns the current strength accessor, which defaults to:\n\n```js\nfunction strength() {\n return 0.1;\n}\n```\n\nThe strength accessor is invoked for each [node](#simulation_nodes) in the simulation, being passed the *node* and its zero-based *index*. The resulting number is then stored internally, such that the strength of each node is only recomputed when the force is initialized or when this method is called with a new *strength*, and not on every application of the force.\n\n# x.x([x]) [<>](https://github.com/d3/d3-force/blob/master/src/x.js#L36 \"Source\")\n\nIf *x* is specified, sets the *x*-coordinate accessor to the specified number or function, re-evaluates the *x*-accessor for each node, and returns this force. If *x* is not specified, returns the current *x*-accessor, which defaults to:\n\n```js\nfunction x() {\n return 0;\n}\n```\n\nThe *x*-accessor is invoked for each [node](#simulation_nodes) in the simulation, being passed the *node* and its zero-based *index*. The resulting number is then stored internally, such that the target *x*-coordinate of each node is only recomputed when the force is initialized or when this method is called with a new *x*, and not on every application of the force.\n\n# d3.forceY([y]) [<>](https://github.com/d3/d3-force/blob/master/src/y.js \"Source\")\n\nCreates a new positioning force along the *y*-axis towards the given position [*y*](#y_y). If *y* is not specified, it defaults to 0.\n\n# y.strength([strength]) [<>](https://github.com/d3/d3-force/blob/master/src/y.js#L32 \"Source\")\n\nIf *strength* is specified, sets the strength accessor to the specified number or function, re-evaluates the strength accessor for each node, and returns this force. The *strength* determines how much to increment the node’s *y*-velocity: ([*y*](#y_y) - *node*.y) × *strength*. For example, a value of 0.1 indicates that the node should move a tenth of the way from its current *y*-position to the target *y*-position with each application. Higher values moves nodes more quickly to the target position, often at the expense of other forces or constraints. A value outside the range [0,1] is not recommended.\n\nIf *strength* is not specified, returns the current strength accessor, which defaults to:\n\n```js\nfunction strength() {\n return 0.1;\n}\n```\n\nThe strength accessor is invoked for each [node](#simulation_nodes) in the simulation, being passed the *node* and its zero-based *index*. The resulting number is then stored internally, such that the strength of each node is only recomputed when the force is initialized or when this method is called with a new *strength*, and not on every application of the force.\n\n# y.y([y]) [<>](https://github.com/d3/d3-force/blob/master/src/y.js#L36 \"Source\")\n\nIf *y* is specified, sets the *y*-coordinate accessor to the specified number or function, re-evaluates the *y*-accessor for each node, and returns this force. If *y* is not specified, returns the current *y*-accessor, which defaults to:\n\n```js\nfunction y() {\n return 0;\n}\n```\n\nThe *y*-accessor is invoked for each [node](#simulation_nodes) in the simulation, being passed the *node* and its zero-based *index*. The resulting number is then stored internally, such that the target *y*-coordinate of each node is only recomputed when the force is initialized or when this method is called with a new *y*, and not on every application of the force.\n\n# d3.forceRadial(radius[, x][, y]) [<>](https://github.com/d3/d3-force/blob/master/src/radial.js \"Source\")\n\n[\"Radial](https://bl.ocks.org/mbostock/cd98bf52e9067e26945edd95e8cf6ef9)\n\nCreates a new positioning force towards a circle of the specified [*radius*](#radial_radius) centered at ⟨[*x*](#radial_x),[*y*](#radial_y)⟩. If *x* and *y* are not specified, they default to ⟨0,0⟩.\n\n# radial.strength([strength]) [<>](https://github.com/d3/d3-force/blob/master/src/radial.js \"Source\")\n\nIf *strength* is specified, sets the strength accessor to the specified number or function, re-evaluates the strength accessor for each node, and returns this force. The *strength* determines how much to increment the node’s *x*- and *y*-velocity. For example, a value of 0.1 indicates that the node should move a tenth of the way from its current position to the closest point on the circle with each application. Higher values moves nodes more quickly to the target position, often at the expense of other forces or constraints. A value outside the range [0,1] is not recommended.\n\nIf *strength* is not specified, returns the current strength accessor, which defaults to:\n\n```js\nfunction strength() {\n return 0.1;\n}\n```\n\nThe strength accessor is invoked for each [node](#simulation_nodes) in the simulation, being passed the *node* and its zero-based *index*. The resulting number is then stored internally, such that the strength of each node is only recomputed when the force is initialized or when this method is called with a new *strength*, and not on every application of the force.\n\n# radial.radius([radius]) [<>](https://github.com/d3/d3-force/blob/master/src/radial.js \"Source\")\n\nIf *radius* is specified, sets the circle *radius* to the specified number or function, re-evaluates the *radius* accessor for each node, and returns this force. If *radius* is not specified, returns the current *radius* accessor.\n\nThe *radius* accessor is invoked for each [node](#simulation_nodes) in the simulation, being passed the *node* and its zero-based *index*. The resulting number is then stored internally, such that the target radius of each node is only recomputed when the force is initialized or when this method is called with a new *radius*, and not on every application of the force.\n\n# radial.x([x]) [<>](https://github.com/d3/d3-force/blob/master/src/radial.js \"Source\")\n\nIf *x* is specified, sets the *x*-coordinate of the circle center to the specified number and returns this force. If *x* is not specified, returns the current *x*-coordinate of the center, which defaults to zero.\n\n# radial.y([y]) [<>](https://github.com/d3/d3-force/blob/master/src/radial.js \"Source\")\n\nIf *y* is specified, sets the *y*-coordinate of the circle center to the specified number and returns this force. If *y* is not specified, returns the current *y*-coordinate of the center, which defaults to zero.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-collection": "1", "d3-dispatch": "1", "d3-quadtree": "1", "d3-timer": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-force", "error": "[Circular]", "extraneous": false }, "d3-format": { "_from": "d3-format@1", "_id": "d3-format@1.4.5", "_inBundle": false, "_integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", "_location": "/d3-format", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-format@1", "name": "d3-format", "escapedName": "d3-format", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-scale" ], "_resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", "_shasum": "374f2ba1320e3717eb74a9356c67daee17a7edb4", "_spec": "d3-format@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-format/issues" }, "deprecated": false, "description": "Format numbers for human consumption.", "devDependencies": { "eslint": "7", "rollup": "2", "rollup-plugin-terser": "7", "tape": "5" }, "files": [ "dist/**/*.js", "src/**/*.js", "locale/*.json" ], "homepage": "https://d3js.org/d3-format/", "jsdelivr": "dist/d3-format.min.js", "keywords": [ "d3", "d3-module", "format", "localization" ], "license": "BSD-3-Clause", "main": "dist/d3-format.js", "module": "src/index.js", "name": "d3-format", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-format.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": [ "./src/defaultLocale.js" ], "unpkg": "dist/d3-format.min.js", "version": "1.4.5", "readme": "# d3-format\n\nEver noticed how sometimes JavaScript doesn’t display numbers the way you expect? Like, you tried to print tenths with a simple loop:\n\n```js\nfor (var i = 0; i < 10; i++) {\n console.log(0.1 * i);\n}\n```\n\nAnd you got this:\n\n```js\n0\n0.1\n0.2\n0.30000000000000004\n0.4\n0.5\n0.6000000000000001\n0.7000000000000001\n0.8\n0.9\n```\n\nWelcome to [binary floating point](https://en.wikipedia.org/wiki/Double-precision_floating-point_format)! ಠ_ಠ\n\nYet rounding error is not the only reason to customize number formatting. A table of numbers should be formatted consistently for comparison; above, 0.0 would be better than 0. Large numbers should have grouped digits (e.g., 42,000) or be in scientific or metric notation (4.2e+4, 42k). Currencies should have fixed precision ($3.50). Reported numerical results should be rounded to significant digits (4021 becomes 4000). Number formats should appropriate to the reader’s locale (42.000,00 or 42,000.00). The list goes on.\n\nFormatting numbers for human consumption is the purpose of d3-format, which is modeled after Python 3’s [format specification mini-language](https://docs.python.org/3/library/string.html#format-specification-mini-language) ([PEP 3101](https://www.python.org/dev/peps/pep-3101/)). Revisiting the example above:\n\n```js\nvar f = d3.format(\".1f\");\nfor (var i = 0; i < 10; i++) {\n console.log(f(0.1 * i));\n}\n```\n\nNow you get this:\n\n```js\n0.0\n0.1\n0.2\n0.3\n0.4\n0.5\n0.6\n0.7\n0.8\n0.9\n```\n\nBut d3-format is much more than an alias for [number.toFixed](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed)! A few more examples:\n\n```js\nd3.format(\".0%\")(0.123); // rounded percentage, \"12%\"\nd3.format(\"($.2f\")(-3.5); // localized fixed-point currency, \"(£3.50)\"\nd3.format(\"+20\")(42); // space-filled and signed, \" +42\"\nd3.format(\".^20\")(42); // dot-filled and centered, \".........42.........\"\nd3.format(\".2s\")(42e6); // SI-prefix with two significant digits, \"42M\"\nd3.format(\"#x\")(48879); // prefixed lowercase hexadecimal, \"0xbeef\"\nd3.format(\",.2r\")(4223); // grouped thousands with two significant digits, \"4,200\"\n```\n\nSee [*locale*.format](#locale_format) for a detailed specification, and try running [d3.formatSpecifier](#formatSpecifier) on the above formats to decode their meaning.\n\n## Installing\n\nIf you use NPM, `npm install d3-format`. Otherwise, download the [latest release](https://github.com/d3/d3-format/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-format.v1.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\n\n```\n\nLocale files are published to npm and can be loaded using [d3.json](https://github.com/d3/d3-request/blob/master/README.md#json). For example, to set Russian as the default locale:\n\n```js\nd3.json(\"https://cdn.jsdelivr.net/npm/d3-format@1/locale/ru-RU.json\", function(error, locale) {\n if (error) throw error;\n\n d3.formatDefaultLocale(locale);\n\n var format = d3.format(\"$,\");\n\n console.log(format(1234.56)); // 1 234,56 руб.\n});\n```\n\n[Try d3-format in your browser.](https://observablehq.com/@d3/d3-format)\n\n## API Reference\n\n# d3.format(specifier) [<>](https://github.com/d3/d3-format/blob/master/src/defaultLocale.js#L4 \"Source\")\n\nAn alias for [*locale*.format](#locale_format) on the [default locale](#formatDefaultLocale).\n\n# d3.formatPrefix(specifier, value) [<>](https://github.com/d3/d3-format/blob/master/src/defaultLocale.js#L5 \"Source\")\n\nAn alias for [*locale*.formatPrefix](#locale_formatPrefix) on the [default locale](#formatDefaultLocale).\n\n# locale.format(specifier) [<>](https://github.com/d3/d3-format/blob/master/src/locale.js#L18 \"Source\")\n\nReturns a new format function for the given string *specifier*. The returned function takes a number as the only argument, and returns a string representing the formatted number. The general form of a specifier is:\n\n```\n[​[fill]align][sign][symbol][0][width][,][.precision][~][type]\n```\n\nThe *fill* can be any character. The presence of a fill character is signaled by the *align* character following it, which must be one of the following:\n\n* `>` - Forces the field to be right-aligned within the available space. (Default behavior).\n* `<` - Forces the field to be left-aligned within the available space.\n* `^` - Forces the field to be centered within the available space.\n* `=` - like `>`, but with any sign and symbol to the left of any padding.\n\nThe *sign* can be:\n\n* `-` - nothing for zero or positive and a minus sign for negative. (Default behavior.)\n* `+` - a plus sign for zero or positive and a minus sign for negative.\n* `(` - nothing for zero or positive and parentheses for negative.\n* ` ` (space) - a space for zero or positive and a minus sign for negative.\n\nThe *symbol* can be:\n\n* `$` - apply currency symbols per the locale definition.\n* `#` - for binary, octal, or hexadecimal notation, prefix by `0b`, `0o`, or `0x`, respectively.\n\nThe *zero* (`0`) option enables zero-padding; this implicitly sets *fill* to `0` and *align* to `=`. The *width* defines the minimum field width; if not specified, then the width will be determined by the content. The *comma* (`,`) option enables the use of a group separator, such as a comma for thousands.\n\nDepending on the *type*, the *precision* either indicates the number of digits that follow the decimal point (types `f` and `%`), or the number of significant digits (types `​`, `e`, `g`, `r`, `s` and `p`). If the precision is not specified, it defaults to 6 for all types except `​` (none), which defaults to 12. Precision is ignored for integer formats (types `b`, `o`, `d`, `x`, `X` and `c`). See [precisionFixed](#precisionFixed) and [precisionRound](#precisionRound) for help picking an appropriate precision.\n\nThe `~` option trims insignificant trailing zeros across all format types. This is most commonly used in conjunction with types `r`, `e`, `s` and `%`. For example:\n\n```js\nd3.format(\"s\")(1500); // \"1.50000k\"\nd3.format(\"~s\")(1500); // \"1.5k\"\n```\n\nThe available *type* values are:\n\n* `e` - exponent notation.\n* `f` - fixed point notation.\n* `g` - either decimal or exponent notation, rounded to significant digits.\n* `r` - decimal notation, rounded to significant digits.\n* `s` - decimal notation with an [SI prefix](#locale_formatPrefix), rounded to significant digits.\n* `%` - multiply by 100, and then decimal notation with a percent sign.\n* `p` - multiply by 100, round to significant digits, and then decimal notation with a percent sign.\n* `b` - binary notation, rounded to integer.\n* `o` - octal notation, rounded to integer.\n* `d` - decimal notation, rounded to integer.\n* `x` - hexadecimal notation, using lower-case letters, rounded to integer.\n* `X` - hexadecimal notation, using upper-case letters, rounded to integer.\n* `c` - converts the integer to the corresponding unicode character before printing.\n\nThe type `​` (none) is also supported as shorthand for `~g` (with a default precision of 12 instead of 6), and the type `n` is shorthand for `,g`. For the `g`, `n` and `​` (none) types, decimal notation is used if the resulting string would have *precision* or fewer digits; otherwise, exponent notation is used. For example:\n\n```js\nd3.format(\".2\")(42); // \"42\"\nd3.format(\".2\")(4.2); // \"4.2\"\nd3.format(\".1\")(42); // \"4e+1\"\nd3.format(\".1\")(4.2); // \"4\"\n```\n\n# locale.formatPrefix(specifier, value) [<>](https://github.com/d3/d3-format/blob/master/src/locale.js#L127 \"Source\")\n\nEquivalent to [*locale*.format](#locale_format), except the returned function will convert values to the units of the appropriate [SI prefix](https://en.wikipedia.org/wiki/Metric_prefix#List_of_SI_prefixes) for the specified numeric reference *value* before formatting in fixed point notation. The following prefixes are supported:\n\n* `y` - yocto, 10⁻²⁴\n* `z` - zepto, 10⁻²¹\n* `a` - atto, 10⁻¹⁸\n* `f` - femto, 10⁻¹⁵\n* `p` - pico, 10⁻¹²\n* `n` - nano, 10⁻⁹\n* `µ` - micro, 10⁻⁶\n* `m` - milli, 10⁻³\n* `​` (none) - 10⁰\n* `k` - kilo, 10³\n* `M` - mega, 10⁶\n* `G` - giga, 10⁹\n* `T` - tera, 10¹²\n* `P` - peta, 10¹⁵\n* `E` - exa, 10¹⁸\n* `Z` - zetta, 10²¹\n* `Y` - yotta, 10²⁴\n\nUnlike [*locale*.format](#locale_format) with the `s` format type, this method returns a formatter with a consistent SI prefix, rather than computing the prefix dynamically for each number. In addition, the *precision* for the given *specifier* represents the number of digits past the decimal point (as with `f` fixed point notation), not the number of significant digits. For example:\n\n```js\nvar f = d3.formatPrefix(\",.0\", 1e-6);\nf(0.00042); // \"420µ\"\nf(0.0042); // \"4,200µ\"\n```\n\nThis method is useful when formatting multiple numbers in the same units for easy comparison. See [precisionPrefix](#precisionPrefix) for help picking an appropriate precision, and [bl.ocks.org/9764126](http://bl.ocks.org/mbostock/9764126) for an example.\n\n# d3.formatSpecifier(specifier) [<>](https://github.com/d3/d3-format/blob/master/src/formatSpecifier.js \"Source\")\n\nParses the specified *specifier*, returning an object with exposed fields that correspond to the [format specification mini-language](#locale_format) and a toString method that reconstructs the specifier. For example, `formatSpecifier(\"s\")` returns:\n\n```js\nFormatSpecifier {\n \"fill\": \" \",\n \"align\": \">\",\n \"sign\": \"-\",\n \"symbol\": \"\",\n \"zero\": false,\n \"width\": undefined,\n \"comma\": false,\n \"precision\": undefined,\n \"trim\": false,\n \"type\": \"s\"\n}\n```\n\nThis method is useful for understanding how format specifiers are parsed and for deriving new specifiers. For example, you might compute an appropriate precision based on the numbers you want to format using [precisionFixed](#precisionFixed) and then create a new format:\n\n```js\nvar s = d3.formatSpecifier(\"f\");\ns.precision = d3.precisionFixed(0.01);\nvar f = d3.format(s);\nf(42); // \"42.00\";\n```\n\n# new d3.FormatSpecifier(specifier) [<>](https://github.com/d3/d3-format/blob/master/src/formatSpecifier.js \"Source\")\n\nGiven the specified *specifier* object, returning an object with exposed fields that correspond to the [format specification mini-language](#locale_format) and a toString method that reconstructs the specifier. For example, `new FormatSpecifier({type: \"s\"})` returns:\n\n```js\nFormatSpecifier {\n \"fill\": \" \",\n \"align\": \">\",\n \"sign\": \"-\",\n \"symbol\": \"\",\n \"zero\": false,\n \"width\": undefined,\n \"comma\": false,\n \"precision\": undefined,\n \"trim\": false,\n \"type\": \"s\"\n}\n```\n\n# d3.precisionFixed(step) [<>](https://github.com/d3/d3-format/blob/master/src/precisionFixed.js \"Source\")\n\nReturns a suggested decimal precision for fixed point notation given the specified numeric *step* value. The *step* represents the minimum absolute difference between values that will be formatted. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 1, 1.5, and 2, the *step* should be 0.5 and the suggested precision is 1:\n\n```js\nvar p = d3.precisionFixed(0.5),\n f = d3.format(\".\" + p + \"f\");\nf(1); // \"1.0\"\nf(1.5); // \"1.5\"\nf(2); // \"2.0\"\n```\n\nWhereas for the numbers 1, 2 and 3, the *step* should be 1 and the suggested precision is 0:\n\n```js\nvar p = d3.precisionFixed(1),\n f = d3.format(\".\" + p + \"f\");\nf(1); // \"1\"\nf(2); // \"2\"\nf(3); // \"3\"\n```\n\nNote: for the `%` format type, subtract two:\n\n```js\nvar p = Math.max(0, d3.precisionFixed(0.05) - 2),\n f = d3.format(\".\" + p + \"%\");\nf(0.45); // \"45%\"\nf(0.50); // \"50%\"\nf(0.55); // \"55%\"\n```\n\n# d3.precisionPrefix(step, value) [<>](https://github.com/d3/d3-format/blob/master/src/precisionPrefix.js \"Source\")\n\nReturns a suggested decimal precision for use with [*locale*.formatPrefix](#locale_formatPrefix) given the specified numeric *step* and reference *value*. The *step* represents the minimum absolute difference between values that will be formatted, and *value* determines which SI prefix will be used. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 1.1e6, 1.2e6, and 1.3e6, the *step* should be 1e5, the *value* could be 1.3e6, and the suggested precision is 1:\n\n```js\nvar p = d3.precisionPrefix(1e5, 1.3e6),\n f = d3.formatPrefix(\".\" + p, 1.3e6);\nf(1.1e6); // \"1.1M\"\nf(1.2e6); // \"1.2M\"\nf(1.3e6); // \"1.3M\"\n```\n\n# d3.precisionRound(step, max) [<>](https://github.com/d3/d3-format/blob/master/src/precisionRound.js \"Source\")\n\nReturns a suggested decimal precision for format types that round to significant digits given the specified numeric *step* and *max* values. The *step* represents the minimum absolute difference between values that will be formatted, and the *max* represents the largest absolute value that will be formatted. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 0.99, 1.0, and 1.01, the *step* should be 0.01, the *max* should be 1.01, and the suggested precision is 3:\n\n```js\nvar p = d3.precisionRound(0.01, 1.01),\n f = d3.format(\".\" + p + \"r\");\nf(0.99); // \"0.990\"\nf(1.0); // \"1.00\"\nf(1.01); // \"1.01\"\n```\n\nWhereas for the numbers 0.9, 1.0, and 1.1, the *step* should be 0.1, the *max* should be 1.1, and the suggested precision is 2:\n\n```js\nvar p = d3.precisionRound(0.1, 1.1),\n f = d3.format(\".\" + p + \"r\");\nf(0.9); // \"0.90\"\nf(1.0); // \"1.0\"\nf(1.1); // \"1.1\"\n```\n\nNote: for the `e` format type, subtract one:\n\n```js\nvar p = Math.max(0, d3.precisionRound(0.01, 1.01) - 1),\n f = d3.format(\".\" + p + \"e\");\nf(0.01); // \"1.00e-2\"\nf(1.01); // \"1.01e+0\"\n```\n\n### Locales\n\n# d3.formatLocale(definition) [<>](https://github.com/d3/d3-format/blob/master/src/locale.js \"Source\")\n\nReturns a *locale* object for the specified *definition* with [*locale*.format](#locale_format) and [*locale*.formatPrefix](#locale_formatPrefix) methods. The *definition* must include the following properties:\n\n* `decimal` - the decimal point (e.g., `\".\"`).\n* `thousands` - the group separator (e.g., `\",\"`).\n* `grouping` - the array of group sizes (e.g., `[3]`), cycled as needed.\n* `currency` - the currency prefix and suffix (e.g., `[\"$\", \"\"]`).\n* `numerals` - optional; an array of ten strings to replace the numerals 0-9.\n* `percent` - optional; the percent sign (defaults to `\"%\"`).\n* `minus` - optional; the minus sign (defaults to hyphen-minus, `\"-\"`).\n* `nan` - optional; the not-a-number value (defaults `\"NaN\"`).\n\nNote that the *thousands* property is a misnomer, as the grouping definition allows groups other than thousands.\n\n# d3.formatDefaultLocale(definition) [<>](https://github.com/d3/d3-format/blob/master/src/defaultLocale.js \"Source\")\n\nEquivalent to [d3.formatLocale](#formatLocale), except it also redefines [d3.format](#format) and [d3.formatPrefix](#formatPrefix) to the new locale’s [*locale*.format](#locale_format) and [*locale*.formatPrefix](#locale_formatPrefix). If you do not set a default locale, it defaults to [U.S. English](https://github.com/d3/d3-format/blob/master/locale/en-US.json).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-format", "error": "[Circular]", "extraneous": false }, "d3-geo": { "_from": "d3-geo@1", "_id": "d3-geo@1.12.1", "_inBundle": false, "_integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", "_location": "/d3-geo", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-geo@1", "name": "d3-geo", "escapedName": "d3-geo", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", "_shasum": "7fc2ab7414b72e59fbcbd603e80d9adc029b035f", "_spec": "d3-geo@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "https://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-geo/issues" }, "dependencies": { "d3-array": { "_from": "d3-array@1", "_id": "d3-array@1.2.4", "_inBundle": false, "_integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", "_location": "/d3-array", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "_shasum": "635ce4d5eea759f6f605863dbcfc30edc737f71f", "_spec": "d3-array@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Array manipulation, ordering, searching, summarizing, etc.", "devDependencies": "[Circular]", "homepage": "https://d3js.org/d3-array/", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-array.js", "module": "src/index.js", "name": "d3-array", "repository": "[Circular]", "scripts": "[Circular]", "unpkg": "dist/d3-array.min.js", "version": "1.2.4", "readme": "# d3-array\n\nData in JavaScript is often represented by an array, and so one tends to manipulate arrays when visualizing or analyzing data. Some common forms of manipulation include taking a contiguous slice (subset) of an array, filtering an array using a predicate function, and mapping an array to a parallel set of values using a transform function. Before looking at the set of utilities that this module provides, familiarize yourself with the powerful [array methods built-in to JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype).\n\nJavaScript includes **mutation methods** that modify the array:\n\n* [*array*.pop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop) - Remove the last element from the array.\n* [*array*.push](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) - Add one or more elements to the end of the array.\n* [*array*.reverse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse) - Reverse the order of the elements of the array.\n* [*array*.shift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift) - Remove the first element from the array.\n* [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) - Sort the elements of the array.\n* [*array*.splice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) - Add or remove elements from the array.\n* [*array*.unshift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift) - Add one or more elements to the front of the array.\n\nThere are also **access methods** that return some representation of the array:\n\n* [*array*.concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) - Join the array with other array(s) or value(s).\n* [*array*.join](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join) - Join all elements of the array into a string.\n* [*array*.slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) - Extract a section of the array.\n* [*array*.indexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) - Find the first occurrence of a value within the array.\n* [*array*.lastIndexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - Find the last occurrence of a value within the array.\n\nAnd finally **iteration methods** that apply functions to elements in the array:\n\n* [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) - Create a new array with only the elements for which a predicate is true.\n* [*array*.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) - Call a function for each element in the array.\n* [*array*.every](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every) - See if every element in the array satisfies a predicate.\n* [*array*.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) - Create a new array with the result of calling a function on every element in the array.\n* [*array*.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some) - See if at least one element in the array satisfies a predicate.\n* [*array*.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) - Apply a function to reduce the array to a single value (from left-to-right).\n* [*array*.reduceRight](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight) - Apply a function to reduce the array to a single value (from right-to-left).\n\n## Installing\n\nIf you use NPM, `npm install d3-array`. Otherwise, download the [latest release](https://github.com/d3/d3-array/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-array.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-array in your browser.](https://tonicdev.com/npm/d3-array)\n\n## API Reference\n\n* [Statistics](#statistics)\n* [Search](#search)\n* [Transformations](#transformations)\n* [Histograms](#histograms)\n* [Histogram Thresholds](#histogram-thresholds)\n\n### Statistics\n\nMethods for computing basic summary statistics.\n\n# d3.min(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/min.js \"Source\")\n\nReturns the minimum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the minimum value.\n\nUnlike the built-in [Math.min](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/min), this method ignores undefined, null and NaN values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the minimum of the strings [“20”, “3”] is “20”, while the minimum of the numbers [20, 3] is 3.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.max(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/max.js \"Source\")\n\nReturns the maximum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the maximum value.\n\nUnlike the built-in [Math.max](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/max), this method ignores undefined values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the maximum of the strings [“20”, “3”] is “3”, while the maximum of the numbers [20, 3] is 20.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.extent(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/extent.js \"Source\")\n\nReturns the [minimum](#min) and [maximum](#max) value in the given *array* using natural order. If the array is empty, returns [undefined, undefined]. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the extent.\n\n# d3.sum(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/sum.js \"Source\")\n\nReturns the sum of the given *array* of numbers. If the array is empty, returns 0. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the sum. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.mean(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/mean.js \"Source\")\n\nReturns the mean of the given *array* of numbers. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the mean. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.median(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/median.js \"Source\")\n\nReturns the median of the given *array* of numbers using the [R-7 method](https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample). If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the median. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.quantile(array, p[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/quantile.js \"Source\")\n\nReturns the *p*-quantile of the given **sorted** *array* of numbers, where *p* is a number in the range [0, 1]. For example, the median can be computed using *p* = 0.5, the first quartile at *p* = 0.25, and the third quartile at *p* = 0.75. This particular implementation uses the [R-7 method](http://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population), which is the default for the R programming language and Excel. For example:\n\n```js\nvar a = [0, 10, 30];\nd3.quantile(a, 0); // 0\nd3.quantile(a, 0.5); // 10\nd3.quantile(a, 1); // 30\nd3.quantile(a, 0.25); // 5\nd3.quantile(a, 0.75); // 20\nd3.quantile(a, 0.1); // 2\n```\n\nAn optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the quantile.\n\n# d3.variance(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/variance.js \"Source\")\n\nReturns an [unbiased estimator of the population variance](http://mathworld.wolfram.com/SampleVariance.html) of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the variance. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.deviation(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/deviation.js \"Source\")\n\nReturns the standard deviation, defined as the square root of the [bias-corrected variance](#variance), of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the standard deviation. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n### Search\n\nMethods for searching arrays for a specific element.\n\n# d3.scan(array[, comparator]) [<>](https://github.com/d3/d3-array/blob/master/src/scan.js \"Source\")\n\nPerforms a linear scan of the specified *array*, returning the index of the least element according to the specified *comparator*. If the given *array* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns undefined. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:\n\n```js\nvar array = [{foo: 42}, {foo: 91}];\nd3.scan(array, function(a, b) { return a.foo - b.foo; }); // 0\nd3.scan(array, function(a, b) { return b.foo - a.foo; }); // 1\n```\n\nThis function is similar to [min](#min), except it allows the use of a comparator rather than an accessor and it returns the index instead of the accessed value. See also [bisect](#bisect).\n\n# d3.bisectLeft(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nReturns the insertion point for *x* in *array* to maintain sorted order. The arguments *lo* and *hi* may be used to specify a subset of the array which should be considered; by default the entire array is used. If *x* is already present in *array*, the insertion point will be before (to the left of) any existing entries. The return value is suitable for use as the first argument to [splice](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice) assuming that *array* is already sorted. The returned insertion point *i* partitions the *array* into two halves so that all *v* < *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* >= *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisect(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js \"Source\")
\n# d3.bisectRight(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nSimilar to [bisectLeft](#bisectLeft), but returns an insertion point which comes after (to the right of) any existing entries of *x* in *array*. The returned insertion point *i* partitions the *array* into two halves so that all *v* <= *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* > *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisector(accessor) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n
# d3.bisector(comparator) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n\nReturns a new bisector using the specified *accessor* or *comparator* function. This method can be used to bisect arrays of objects instead of being limited to simple arrays of primitives. For example, given the following array of objects:\n\n```js\nvar data = [\n {date: new Date(2011, 1, 1), value: 0.5},\n {date: new Date(2011, 2, 1), value: 0.6},\n {date: new Date(2011, 3, 1), value: 0.7},\n {date: new Date(2011, 4, 1), value: 0.8}\n];\n```\n\nA suitable bisect function could be constructed as:\n\n```js\nvar bisectDate = d3.bisector(function(d) { return d.date; }).right;\n```\n\nThis is equivalent to specifying a comparator:\n\n```js\nvar bisectDate = d3.bisector(function(d, x) { return d.date - x; }).right;\n```\n\nAnd then applied as *bisectDate*(*array*, *date*), returning an index. Note that the comparator is always passed the search value *x* as the second argument. Use a comparator rather than an accessor if you want values to be sorted in an order different than natural order, such as in descending rather than ascending order.\n\n# bisector.left(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L6 \"Source\")\n\nEquivalent to [bisectLeft](#bisectLeft), but uses this bisector’s associated comparator.\n\n# bisector.right(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L16 \"Source\")\n\nEquivalent to [bisectRight](#bisectRight), but uses this bisector’s associated comparator.\n\n# d3.ascending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/ascending.js \"Source\")\n\nReturns -1 if *a* is less than *b*, or 1 if *a* is greater than *b*, or 0. This is the comparator function for natural order, and can be used in conjunction with the built-in [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) method to arrange elements in ascending order. It is implemented as:\n\n```js\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n# d3.descending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/descending.js \"Source\")\n\nReturns -1 if *a* is greater than *b*, or 1 if *a* is less than *b*, or 0. This is the comparator function for reverse natural order, and can be used in conjunction with the built-in array sort method to arrange elements in descending order. It is implemented as:\n\n```js\nfunction descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n### Transformations\n\nMethods for transforming arrays and for generating new arrays.\n\n# d3.cross(a, b[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/cross.js \"Source\")\n\nReturns the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) of the two arrays *a* and *b*. For each element *i* in the specified array *a* and each element *j* in the specified array *b*, in order, invokes the specified *reducer* function passing the element *i* and element *j*. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.cross([1, 2], [\"x\", \"y\"]); // returns [[1, \"x\"], [1, \"y\"], [2, \"x\"], [2, \"y\"]]\nd3.cross([1, 2], [\"x\", \"y\"], (a, b) => a + b); // returns [\"1x\", \"1y\", \"2x\", \"2y\"]\n```\n\n# d3.merge(arrays) [<>](https://github.com/d3/d3-array/blob/master/src/merge.js \"Source\")\n\nMerges the specified *arrays* into a single array. This method is similar to the built-in array concat method; the only difference is that it is more convenient when you have an array of arrays.\n\n```js\nd3.merge([[1], [2, 3]]); // returns [1, 2, 3]\n```\n\n# d3.pairs(array[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/pairs.js \"Source\")\n\nFor each adjacent pair of elements in the specified *array*, in order, invokes the specified *reducer* function passing the element *i* and element *i* - 1. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.pairs([1, 2, 3, 4]); // returns [[1, 2], [2, 3], [3, 4]]\nd3.pairs([1, 2, 3, 4], (a, b) => b - a); // returns [1, 1, 1];\n```\n\nIf the specified array has fewer than two elements, returns the empty array.\n\n# d3.permute(array, indexes) [<>](https://github.com/d3/d3-array/blob/master/src/permute.js \"Source\")\n\nReturns a permutation of the specified *array* using the specified array of *indexes*. The returned array contains the corresponding element in array for each index in indexes, in order. For example, permute([\"a\", \"b\", \"c\"], [1, 2, 0])\nreturns [\"b\", \"c\", \"a\"]. It is acceptable for the array of indexes to be a different length from the array of elements, and for indexes to be duplicated or omitted.\n\nThis method can also be used to extract the values from an object into an array with a stable order. Extracting keyed values in order can be useful for generating data arrays in nested selections. For example:\n\n```js\nvar object = {yield: 27, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n fields = [\"site\", \"variety\", \"yield\"];\n\nd3.permute(object, fields); // returns [\"University Farm\", \"Manchuria\", 27]\n```\n\n# d3.shuffle(array[, start[, stop]]) [<>](https://github.com/d3/d3-array/blob/master/src/shuffle.js \"Source\")\n\nRandomizes the order of the specified *array* in-place using the [Fisher–Yates shuffle](https://bost.ocks.org/mike/shuffle/) and returns the *array*. If *start* is specified, it is the starting index (inclusive) of the *array* to shuffle; if *start* is not specified, it defaults to zero. If *stop* is specified, it is the ending index (exclusive) of the *array* to shuffle; if *stop* is not specified, it defaults to *array*.length. For example, to shuffle the first ten elements of the *array*: shuffle(*array*, 0, 10).\n\n# d3.ticks(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js \"Source\")\n\nReturns an array of approximately *count* + 1 uniformly-spaced, nicely-rounded values between *start* and *stop* (inclusive). Each value is a power of ten multiplied by 1, 2 or 5. See also [d3.tickIncrement](#tickIncrement), [d3.tickStep](#tickStep) and [*linear*.ticks](https://github.com/d3/d3-scale/blob/master/README.md#linear_ticks).\n\nTicks are inclusive in the sense that they may include the specified *start* and *stop* values if (and only if) they are exact, nicely-rounded values consistent with the inferred [step](#tickStep). More formally, each returned tick *t* satisfies *start* ≤ *t* and *t* ≤ *stop*.\n\n# d3.tickIncrement(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nLike [d3.tickStep](#tickStep), except requires that *start* is always less than or equal to *step*, and if the tick step for the given *start*, *stop* and *count* would be less than one, returns the negative inverse tick step instead. This method is always guaranteed to return an integer, and is used by [d3.ticks](#ticks) to avoid guarantee that the returned tick values are represented as precisely as possible in IEEE 754 floating point.\n\n# d3.tickStep(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nReturns the difference between adjacent tick values if the same arguments were passed to [d3.ticks](#ticks): a nicely-rounded value that is a power of ten multiplied by 1, 2 or 5. Note that due to the limited precision of IEEE 754 floating point, the returned value may not be exact decimals; use [d3-format](https://github.com/d3/d3-format) to format numbers for human consumption.\n\n# d3.range([start, ]stop[, step]) [<>](https://github.com/d3/d3-array/blob/master/src/range.js \"Source\")\n\nReturns an array containing an arithmetic progression, similar to the Python built-in [range](http://docs.python.org/library/functions.html#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.ticks](#ticks) for nicely-rounded values.)\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\nd3.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; see also [linear.tickFormat](https://github.com/d3/d3-scale/blob/master/README.md#linear_tickFormat) in [d3-scale](https://github.com/d3/d3-scale).\n\nLikewise, if the returned array should have a specific length, consider using [array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) on an integer range. For example:\n\n```js\nd3.range(0, 1, 1 / 49); // BAD: returns 50 elements!\nd3.range(49).map(function(d) { return d / 49; }); // GOOD: returns 49 elements.\n```\n\n# d3.transpose(matrix) [<>](https://github.com/d3/d3-array/blob/master/src/transpose.js \"Source\")\n\nUses the [zip](#zip) operator as a two-dimensional [matrix transpose](http://en.wikipedia.org/wiki/Transpose).\n\n# d3.zip(arrays…) [<>](https://github.com/d3/d3-array/blob/master/src/zip.js \"Source\")\n\nReturns an array of arrays, where the *i*th array contains the *i*th element from each of the argument *arrays*. The returned array is truncated in length to the shortest array in *arrays*. If *arrays* contains only a single array, the returned array contains one-element arrays. With no arguments, the returned array is empty.\n\n```js\nd3.zip([1, 2], [3, 4]); // returns [[1, 3], [2, 4]]\n```\n\n### Histograms\n\n[\"Histogram\"](http://bl.ocks.org/mbostock/3048450)\n\nHistograms bin many discrete samples into a smaller number of consecutive, non-overlapping intervals. They are often used to visualize the distribution of numerical data.\n\n# d3.histogram() [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js \"Source\")\n\nConstructs a new histogram generator with the default settings.\n\n# histogram(data) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L14 \"Source\")\n\nComputes the histogram for the given array of *data* samples. Returns an array of bins, where each bin is an array containing the associated elements from the input *data*. Thus, the `length` of the bin is the number of elements in that bin. Each bin has two additional attributes:\n\n* `x0` - the lower bound of the bin (inclusive).\n* `x1` - the upper bound of the bin (exclusive, except for the last bin).\n\n# histogram.value([value]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L58 \"Source\")\n\nIf *value* is specified, sets the value accessor to the specified function or constant and returns this histogram generator. If *value* is not specified, returns the current value accessor, which defaults to the identity function.\n\nWhen a histogram is [generated](#_histogram), the value accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default value accessor assumes that the input data are orderable (comparable), such as numbers or dates. If your data are not, then you should specify an accessor that returns the corresponding orderable value for a given datum.\n\nThis is similar to mapping your data to values before invoking the histogram generator, but has the benefit that the input data remains associated with the returned bins, thereby making it easier to access other fields of the data.\n\n# histogram.domain([domain]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L62 \"Source\")\n\nIf *domain* is specified, sets the domain accessor to the specified function or array and returns this histogram generator. If *domain* is not specified, returns the current domain accessor, which defaults to [extent](#extent). The histogram domain is defined as an array [*min*, *max*], where *min* is the minimum observable value and *max* is the maximum observable value; both values are inclusive. Any value outside of this domain will be ignored when the histogram is [generated](#_histogram).\n\nFor example, if you are using the the histogram in conjunction with a [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales) `x`, you might say:\n\n```js\nvar histogram = d3.histogram()\n .domain(x.domain())\n .thresholds(x.ticks(20));\n```\n\nYou can then compute the bins from an array of numbers like so:\n\n```js\nvar bins = histogram(numbers);\n```\n\nNote that the domain accessor is invoked on the materialized array of [values](#histogram_value), not on the input data array.\n\n# histogram.thresholds([count]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n
# histogram.thresholds([thresholds]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n\nIf *thresholds* is specified, sets the [threshold generator](#histogram-thresholds) to the specified function or array and returns this histogram generator. If *thresholds* is not specified, returns the current threshold generator, which by default implements [Sturges’ formula](#thresholdSturges). (Thus by default, the histogram values must be numbers!) Thresholds are defined as an array of values [*x0*, *x1*, …]. Any value less than *x0* will be placed in the first bin; any value greater than or equal to *x0* but less than *x1* will be placed in the second bin; and so on. Thus, the [generated histogram](#_histogram) will have *thresholds*.length + 1 bins. See [histogram thresholds](#histogram-thresholds) for more information.\n\nAny threshold values outside the [domain](#histogram_domain) are ignored. The first *bin*.x0 is always equal to the minimum domain value, and the last *bin*.x1 is always equal to the maximum domain value.\n\nIf a *count* is specified instead of an array of *thresholds*, then the [domain](#histogram_domain) will be uniformly divided into approximately *count* bins; see [ticks](#ticks).\n\n### Histogram Thresholds\n\nThese functions are typically not used directly; instead, pass them to [*histogram*.thresholds](#histogram_thresholds). You may also implement your own threshold generator taking three arguments: the array of input [*values*](#histogram_value) derived from the data, and the [observable domain](#histogram_domain) represented as *min* and *max*. The generator may then return either the array of numeric thresholds or the *count* of bins; in the latter case the domain is divided uniformly into approximately *count* bins; see [ticks](#ticks).\n\n# d3.thresholdFreedmanDiaconis(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/freedmanDiaconis.js \"Source\")\n\nReturns the number of bins according to the [Freedman–Diaconis rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdScott(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/scott.js \"Source\")\n\nReturns the number of bins according to [Scott’s normal reference rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdSturges(values) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/sturges.js \"Source\")\n\nReturns the number of bins according to [Sturges’ formula](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-array", "error": "[Circular]", "extraneous": false, "_deduped": "d3-array" } }, "deprecated": false, "description": "Shapes and calculators for spherical coordinates.", "devDependencies": { "canvas": "1", "d3-format": "1", "eslint": "6", "eslint-plugin-es5": "1", "esm": "3", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4", "topojson-client": "3", "world-atlas": "1" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-geo/", "jsdelivr": "dist/d3-geo.min.js", "keywords": [ "d3", "d3-module", "geo", "maps", "cartography" ], "license": "BSD-3-Clause", "main": "dist/d3-geo.js", "module": "src/index.js", "name": "d3-geo", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-geo.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test && mkdir -p test/output && test/compare-images", "pretest": "rollup -c", "test": "tape -r esm 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-geo.min.js", "version": "1.12.1", "readme": "# d3-geo\n\nMap projections are sometimes implemented as point transformations. For instance, spherical Mercator:\n\n```js\nfunction mercator(x, y) {\n return [x, Math.log(Math.tan(Math.PI / 4 + y / 2))];\n}\n```\n\nThis is a reasonable *mathematical* approach if your geometry consists of continuous, infinite point sets. Yet computers do not have infinite memory, so we must instead work with discrete geometry such as polygons and polylines!\n\nDiscrete geometry makes the challenge of projecting from the sphere to the plane much harder. The edges of a spherical polygon are [geodesics](https://en.wikipedia.org/wiki/Geodesic) (segments of great circles), not straight lines. Projected to the plane, geodesics are curves in all map projections except [gnomonic](#geoGnomonic), and thus accurate projection requires interpolation along each arc. D3 uses [adaptive sampling](https://bl.ocks.org/mbostock/3795544) inspired by a popular [line simplification method](https://bost.ocks.org/mike/simplify/) to balance accuracy and performance.\n\nThe projection of polygons and polylines must also deal with the topological differences between the sphere and the plane. Some projections require cutting geometry that [crosses the antimeridian](https://bl.ocks.org/mbostock/3788999), while others require [clipping geometry to a great circle](https://bl.ocks.org/mbostock/3021474).\n\nSpherical polygons also require a [winding order convention](https://bl.ocks.org/mbostock/a7bdfeb041e850799a8d3dce4d8c50c8) to determine which side of the polygon is the inside: the exterior ring for polygons smaller than a hemisphere must be clockwise, while the exterior ring for polygons [larger than a hemisphere](https://bl.ocks.org/mbostock/6713736) must be anticlockwise. Interior rings representing holes must use the opposite winding order of their exterior ring. This winding order convention is also used by [TopoJSON](https://github.com/topojson) and [ESRI shapefiles](https://github.com/mbostock/shapefile); however, it is the **opposite** convention of GeoJSON’s [RFC 7946](https://tools.ietf.org/html/rfc7946#section-3.1.6). (Also note that standard GeoJSON WGS84 uses planar equirectangular coordinates, not spherical coordinates, and thus may require [stitching](https://github.com/d3/d3-geo-projection/blob/master/README.md#geostitch) to remove antimeridian cuts.)\n\nD3’s approach affords great expressiveness: you can choose the right projection, and the right aspect, for your data. D3 supports a wide variety of common and [unusual map projections](https://github.com/d3/d3-geo-projection). For more, see Part 2 of [The Toolmaker’s Guide](https://vimeo.com/106198518#t=20m0s).\n\nD3 uses [GeoJSON](http://geojson.org/geojson-spec.html) to represent geographic features in JavaScript. (See also [TopoJSON](https://github.com/mbostock/topojson), an extension of GeoJSON that is significantly more compact and encodes topology.) To convert shapefiles to GeoJSON, use [shp2json](https://github.com/mbostock/shapefile/blob/master/README.md#shp2json), part of the [shapefile package](https://github.com/mbostock/shapefile). See [Command-Line Cartography](https://medium.com/@mbostock/command-line-cartography-part-1-897aa8f8ca2c) for an introduction to d3-geo and related tools.\n\n## Installing\n\nIf you use NPM, `npm install d3-geo`. Otherwise, download the [latest release](https://github.com/d3/d3-geo/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-geo.v1.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\n\n\n```\n\n[Try d3-geo in your browser.](https://observablehq.com/collection/@d3/d3-geo)\n\n## API Reference\n\n* [Paths](#paths)\n* [Projections](#projections) ([Azimuthal](#azimuthal-projections), [Composite](#composite-projections), [Conic](#conic-projections), [Cylindrical](#cylindrical-projections))\n* [Raw Projections](#raw-projections)\n* [Spherical Math](#spherical-math)\n* [Spherical Shapes](#spherical-shapes)\n* [Streams](#streams)\n* [Transforms](#transforms)\n* [Clipping](#clipping)\n\n### Paths\n\nThe geographic path generator, [d3.geoPath](#geoPath), is similar to the shape generators in [d3-shape](https://github.com/d3/d3-shape): given a GeoJSON geometry or feature object, it generates an SVG path data string or [renders the path to a Canvas](https://bl.ocks.org/mbostock/3783604). Canvas is recommended for dynamic or interactive projections to improve performance. Paths can be used with [projections](#projections) or [transforms](#transforms), or they can be used to render planar geometry directly to Canvas or SVG.\n\n# d3.geoPath([projection[, context]]) [<>](https://github.com/d3/d3-geo/blob/master/src/path/index.js \"Source\")\n\nCreates a new geographic path generator with the default settings. If *projection* is specified, sets the [current projection](#path_projection). If *context* is specified, sets the [current context](#path_context).\n\n# path(object[, arguments…]) [<>](https://github.com/d3/d3-geo/blob/master/src/path/index.js \"Source\")\n\nRenders the given *object*, which may be any GeoJSON feature or geometry object:\n\n* Point - a single position.\n* MultiPoint - an array of positions.\n* LineString - an array of positions forming a continuous line.\n* MultiLineString - an array of arrays of positions forming several lines.\n* Polygon - an array of arrays of positions forming a polygon (possibly with holes).\n* MultiPolygon - a multidimensional array of positions forming multiple polygons.\n* GeometryCollection - an array of geometry objects.\n* Feature - a feature containing one of the above geometry objects.\n* FeatureCollection - an array of feature objects.\n\nThe type *Sphere* is also supported, which is useful for rendering the outline of the globe; a sphere has no coordinates. Any additional *arguments* are passed along to the [pointRadius](#path_pointRadius) accessor.\n\nTo display multiple features, combine them into a feature collection:\n\n```js\nsvg.append(\"path\")\n .datum({type: \"FeatureCollection\", features: features})\n .attr(\"d\", d3.geoPath());\n```\n\nOr use multiple path elements:\n\n```js\nsvg.selectAll(\"path\")\n .data(features)\n .enter().append(\"path\")\n .attr(\"d\", d3.geoPath());\n```\n\nSeparate path elements are typically slower than a single path element. However, distinct path elements are useful for styling and interaction (e.g., click or mouseover). Canvas rendering (see [*path*.context](#path_context)) is typically faster than SVG, but requires more effort to implement styling and interaction.\n\n# path.area(object) [<>](https://github.com/d3/d3-geo/blob/master/src/path/area.js \"Source\")\n\nReturns the projected planar area (typically in square pixels) for the specified GeoJSON *object*. Point, MultiPoint, LineString and MultiLineString geometries have zero area. For Polygon and MultiPolygon geometries, this method first computes the area of the exterior ring, and then subtracts the area of any interior holes. This method observes any clipping performed by the [projection](#path_projection); see [*projection*.clipAngle](#projection_clipAngle) and [*projection*.clipExtent](#projection_clipExtent). This is the planar equivalent of [d3.geoArea](#geoArea).\n\n# path.bounds(object) [<>](https://github.com/d3/d3-geo/blob/master/src/path/bounds.js \"Source\")\n\nReturns the projected planar bounding box (typically in pixels) for the specified GeoJSON *object*. The bounding box is represented by a two-dimensional array: \\[\\[*x₀*, *y₀*\\], \\[*x₁*, *y₁*\\]\\], where *x₀* is the minimum *x*-coordinate, *y₀* is the minimum *y*-coordinate, *x₁* is maximum *x*-coordinate, and *y₁* is the maximum *y*-coordinate. This is handy for, say, zooming in to a particular feature. (Note that in projected planar coordinates, the minimum latitude is typically the maximum *y*-value, and the maximum latitude is typically the minimum *y*-value.) This method observes any clipping performed by the [projection](#path_projection); see [*projection*.clipAngle](#projection_clipAngle) and [*projection*.clipExtent](#projection_clipExtent). This is the planar equivalent of [d3.geoBounds](#geoBounds).\n\n# path.centroid(object) [<>](https://github.com/d3/d3-geo/blob/master/src/path/centroid.js \"Source\")\n\nReturns the projected planar centroid (typically in pixels) for the specified GeoJSON *object*. This is handy for, say, labeling state or county boundaries, or displaying a symbol map. For example, a [noncontiguous cartogram](https://bl.ocks.org/mbostock/4055908) might scale each state around its centroid. This method observes any clipping performed by the [projection](#path_projection); see [*projection*.clipAngle](#projection_clipAngle) and [*projection*.clipExtent](#projection_clipExtent). This is the planar equivalent of [d3.geoCentroid](#geoCentroid).\n\n# path.measure(object) [<>](https://github.com/d3/d3-geo/blob/master/src/path/measure.js \"Source\")\n\nReturns the projected planar length (typically in pixels) for the specified GeoJSON *object*. Point and MultiPoint geometries have zero length. For Polygon and MultiPolygon geometries, this method computes the summed length of all rings. This method observes any clipping performed by the [projection](#path_projection); see [*projection*.clipAngle](#projection_clipAngle) and [*projection*.clipExtent](#projection_clipExtent). This is the planar equivalent of [d3.geoLength](#geoLength).\n\n# path.projection([projection]) [<>](https://github.com/d3/d3-geo/blob/master/src/path/index.js \"Source\")\n\nIf a *projection* is specified, sets the current projection to the specified projection. If *projection* is not specified, returns the current projection, which defaults to null. The null projection represents the identity transformation: the input geometry is not projected and is instead rendered directly in raw coordinates. This can be useful for fast rendering of [pre-projected geometry](https://bl.ocks.org/mbostock/5557726), or for fast rendering of the equirectangular projection.\n\nThe given *projection* is typically one of D3’s built-in [geographic projections](#projections); however, any object that exposes a [*projection*.stream](#projection_stream) function can be used, enabling the use of [custom projections](https://bl.ocks.org/mbostock/5663666). See D3’s [transforms](#transforms) for more examples of arbitrary geometric transformations.\n\n# path.context([context]) [<>](https://github.com/d3/d3-geo/blob/master/src/path/index.js \"Source\")\n\nIf *context* is specified, sets the current render context and returns the path generator. If the *context* is null, then the [path generator](#_path) will return an SVG path string; if the context is non-null, the path generator will instead call methods on the specified context to render geometry. The context must implement the following subset of the [CanvasRenderingContext2D API](https://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d):\n\n* *context*.beginPath()\n* *context*.moveTo(*x*, *y*)\n* *context*.lineTo(*x*, *y*)\n* *context*.arc(*x*, *y*, *radius*, *startAngle*, *endAngle*)\n* *context*.closePath()\n\nIf a *context* is not specified, returns the current render context which defaults to null.\n\n# path.pointRadius([radius]) [<>](https://github.com/d3/d3-geo/blob/master/src/path/index.js \"Source\")\n\nIf *radius* is specified, sets the radius used to display Point and MultiPoint geometries to the specified number. If *radius* is not specified, returns the current radius accessor, which defaults to 4.5. While the radius is commonly specified as a number constant, it may also be specified as a function which is computed per feature, being passed the any arguments passed to the [path generator](#_path). For example, if your GeoJSON data has additional properties, you might access those properties inside the radius function to vary the point size; alternatively, you could [d3.symbol](https://github.com/d3/d3-shape#symbols) and a [projection](#geoProjection) for greater flexibility.\n\n### Projections\n\nProjections transform spherical polygonal geometry to planar polygonal geometry. D3 provides implementations of several classes of standard projections:\n\n* [Azimuthal](#azimuthal-projections)\n* [Composite](#composite-projections)\n* [Conic](#conic-projections)\n* [Cylindrical](#cylindrical-projections)\n\nFor many more projections, see [d3-geo-projection](https://github.com/d3/d3-geo-projection). You can implement [custom projections](#raw-projections) using [d3.geoProjection](#geoProjection) or [d3.geoProjectionMutator](#geoProjectionMutator).\n\n# projection(point) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nReturns a new array \\[*x*, *y*\\] (typically in pixels) representing the projected point of the given *point*. The point must be specified as a two-element array \\[*longitude*, *latitude*\\] in degrees. May return null if the specified *point* has no defined projected position, such as when the point is outside the clipping bounds of the projection.\n\n# projection.invert(point) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nReturns a new array \\[*longitude*, *latitude*\\] in degrees representing the unprojected point of the given projected *point*. The point must be specified as a two-element array \\[*x*, *y*\\] (typically in pixels). May return null if the specified *point* has no defined projected position, such as when the point is outside the clipping bounds of the projection.\n\nThis method is only defined on invertible projections.\n\n# projection.stream(stream) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nReturns a [projection stream](#streams) for the specified output *stream*. Any input geometry is projected before being streamed to the output stream. A typical projection involves several geometry transformations: the input geometry is first converted to radians, rotated on three axes, clipped to the small circle or cut along the antimeridian, and lastly projected to the plane with adaptive resampling, scale and translation.\n\n# projection.preclip([preclip])\n\nIf *preclip* is specified, sets the projection’s spherical clipping to the specified function and returns the projection. If *preclip* is not specified, returns the current spherical clipping function (see [preclip](#preclip)).\n\n# projection.postclip([postclip])\n\nIf *postclip* is specified, sets the projection’s cartesian clipping to the specified function and returns the projection. If *postclip* is not specified, returns the current cartesian clipping function (see [postclip](#postclip)).\n\n# projection.clipAngle([angle]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nIf *angle* is specified, sets the projection’s clipping circle radius to the specified angle in degrees and returns the projection. If *angle* is null, switches to [antimeridian cutting](https://bl.ocks.org/mbostock/3788999) rather than small-circle clipping. If *angle* is not specified, returns the current clip angle which defaults to null. Small-circle clipping is independent of viewport clipping via [*projection*.clipExtent](#projection_clipExtent).\n\nSee also [*projection*.preclip](#projection_preclip), [d3.geoClipAntimeridian](#geoClipAntimeridian), [d3.geoClipCircle](#geoClipCircle).\n\n# projection.clipExtent([extent]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nIf *extent* is specified, sets the projection’s viewport clip extent to the specified bounds in pixels and returns the projection. The *extent* bounds are specified as an array \\[\\[x₀, y₀\\], \\[x₁, y₁\\]\\], where x₀ is the left-side of the viewport, y₀ is the top, x₁ is the right and y₁ is the bottom. If *extent* is null, no viewport clipping is performed. If *extent* is not specified, returns the current viewport clip extent which defaults to null. Viewport clipping is independent of small-circle clipping via [*projection*.clipAngle](#projection_clipAngle).\n\nSee also [*projection*.postclip](#projection_postclip), [d3.geoClipRectangle](#geoClipRectangle).\n\n# projection.scale([scale]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nIf *scale* is specified, sets the projection’s scale factor to the specified value and returns the projection. If *scale* is not specified, returns the current scale factor; the default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, absolute scale factors are not equivalent across projections.\n\n# projection.translate([translate]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nIf *translate* is specified, sets the projection’s translation offset to the specified two-element array [tx, ty] and returns the projection. If *translate* is not specified, returns the current translation offset which defaults to [480, 250]. The translation offset determines the pixel coordinates of the projection’s [center](#projection_center). The default translation offset places ⟨0°,0°⟩ at the center of a 960×500 area.\n\n# projection.center([center]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nIf *center* is specified, sets the projection’s center to the specified *center*, a two-element array of [*longitude*, *latitude*] in degrees and returns the projection. If *center* is not specified, returns the current center, which defaults to ⟨0°,0°⟩.\n\n# projection.angle([angle]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nIf *angle* is specified, sets the projection’s post-projection planar rotation angle to the specified *angle* in degrees and returns the projection. If *angle* is not specified, returns the projection’s current angle, which defaults to 0°. Note that it may be faster to rotate during rendering (e.g., using [*context*.rotate](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/rotate)) rather than during projection.\n\n# projection.reflectX([reflect])\n\nIf *reflect* is specified, sets whether or not the *x*-dimension is reflected (negated) in the output. If *reflect* is not specified, returns true if *x*-reflection is enabled, which defaults to false. This can be useful to display sky and astronomical data with the orb seen from below: right ascension (eastern direction) will point to the left when North is pointing up.\n\n# projection.reflectY([reflect])\n\nIf *reflect* is specified, sets whether or not the *y*-dimension is reflected (negated) in the output. If *reflect* is not specified, returns true if *y*-reflection is enabled, which defaults to false. This is especially useful for transforming from standard [spatial reference systems](https://en.wikipedia.org/wiki/Spatial_reference_system), which treat positive *y* as pointing up, to display coordinate systems such as Canvas and SVG, which treat positive *y* as pointing down.\n\n# projection.rotate([angles]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nIf *rotation* is specified, sets the projection’s [three-axis spherical rotation](https://bl.ocks.org/mbostock/4282586) to the specified *angles*, which must be a two- or three-element array of numbers [*lambda*, *phi*, *gamma*] specifying the rotation angles in degrees about [each spherical axis](https://bl.ocks.org/mbostock/4282586). (These correspond to [yaw, pitch and roll](https://en.wikipedia.org/wiki/Aircraft_principal_axes).) If the rotation angle *gamma* is omitted, it defaults to 0. See also [d3.geoRotation](#geoRotation). If *rotation* is not specified, returns the current rotation which defaults [0, 0, 0].\n\n# projection.precision([precision]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nIf *precision* is specified, sets the threshold for the projection’s [adaptive resampling](https://bl.ocks.org/mbostock/3795544) to the specified value in pixels and returns the projection. This value corresponds to the [Douglas–Peucker](https://en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm) distance. If *precision* is not specified, returns the projection’s current resampling precision which defaults to √0.5 ≅ 0.70710…\n\n# projection.fitExtent(extent, object) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nSets the projection’s [scale](#projection_scale) and [translate](#projection_translate) to fit the specified GeoJSON *object* in the center of the given *extent*. The extent is specified as an array \\[\\[x₀, y₀\\], \\[x₁, y₁\\]\\], where x₀ is the left side of the bounding box, y₀ is the top, x₁ is the right and y₁ is the bottom. Returns the projection.\n\nFor example, to scale and translate the [New Jersey State Plane projection](https://bl.ocks.org/mbostock/5126418) to fit a GeoJSON object *nj* in the center of a 960×500 bounding box with 20 pixels of padding on each side:\n\n```js\nvar projection = d3.geoTransverseMercator()\n .rotate([74 + 30 / 60, -38 - 50 / 60])\n .fitExtent([[20, 20], [940, 480]], nj);\n```\n\nAny [clip extent](#projection_clipExtent) is ignored when determining the new scale and translate. The [precision](#projection_precision) used to compute the bounding box of the given *object* is computed at an effective scale of 150.\n\n# projection.fitSize(size, object) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nA convenience method for [*projection*.fitExtent](#projection_fitExtent) where the top-left corner of the extent is [0, 0]. The following two statements are equivalent:\n\n```js\nprojection.fitExtent([[0, 0], [width, height]], object);\nprojection.fitSize([width, height], object);\n```\n\n# projection.fitWidth(width, object) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nA convenience method for [*projection*.fitSize](#projection_fitSize) where the height is automatically chosen from the aspect ratio of *object* and the given constraint on *width*.\n\n# projection.fitHeight(height, object) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nA convenience method for [*projection*.fitSize](#projection_fitSize) where the width is automatically chosen from the aspect ratio of *object* and the given constraint on *height*.\n\n#### Azimuthal Projections\n\nAzimuthal projections project the sphere directly onto a plane.\n\n# d3.geoAzimuthalEqualArea() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/azimuthalEqualArea.js \"Source\")\n
# d3.geoAzimuthalEqualAreaRaw\n\n[](https://observablehq.com/@d3/azimuthal-equal-area)\n\nThe azimuthal equal-area projection.\n\n# d3.geoAzimuthalEquidistant() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/azimuthalEquidistant.js \"Source\")\n
# d3.geoAzimuthalEquidistantRaw\n\n[](https://observablehq.com/@d3/azimuthal-equidistant)\n\nThe azimuthal equidistant projection.\n\n# d3.geoGnomonic() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/gnomonic.js \"Source\")\n
# d3.geoGnomonicRaw\n\n[](https://observablehq.com/@d3/gnomonic)\n\nThe gnomonic projection.\n\n# d3.geoOrthographic() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/orthographic.js \"Source\")\n
# d3.geoOrthographicRaw\n\n[](https://observablehq.com/@d3/orthographic)\n\nThe orthographic projection.\n\n# d3.geoStereographic() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/stereographic.js \"Source\")\n
# d3.geoStereographicRaw\n\n[](https://observablehq.com/@d3/stereographic)\n\nThe stereographic projection.\n\n#### Equal-Earth\n\n# d3.geoEqualEarth() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/equalEarth.js \"Source\")\n
# d3.geoEqualEarthRaw\n\n[](https://observablehq.com/@d3/equal-earth)\n\nThe Equal Earth projection, by Bojan Šavrič _et al._, 2018.\n\n#### Composite Projections\n\nComposite consist of several projections that are composed into a single display. The constituent projections have fixed clip, center and rotation, and thus composite projections do not support [*projection*.center](#projection_center), [*projection*.rotate](#projection_rotate), [*projection*.clipAngle](#projection_clipAngle), or [*projection*.clipExtent](#projection_clipExtent).\n\n# d3.geoAlbersUsa() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/albersUsa.js \"Source\")\n\n[](https://observablehq.com/@d3/u-s-map)\n\nThis is a U.S.-centric composite projection of three [d3.geoConicEqualArea](#geoConicEqualArea) projections: [d3.geoAlbers](#geoAlbers) is used for the lower forty-eight states, and separate conic equal-area projections are used for Alaska and Hawaii. Note that the scale for Alaska is diminished: it is projected at 0.35× its true relative area. This diagram by Philippe Rivière illustrates how this projection uses two rectangular insets for Alaska and Hawaii:\n\n[](https://bl.ocks.org/Fil/7723167596af40d9159be34ffbf8d36b)\n\nSee [d3-composite-projections](http://geoexamples.com/d3-composite-projections/) for more examples.\n\n#### Conic Projections\n\nConic projections project the sphere onto a cone, and then unroll the cone onto the plane. Conic projections have [two standard parallels](#conic_parallels).\n\n# conic.parallels([parallels]) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/conic.js \"Source\")\n\nThe [two standard parallels](https://en.wikipedia.org/wiki/Map_projection#Conic) that define the map layout in conic projections.\n\n# d3.geoAlbers() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/albers.js \"Source\")\n\n[](https://observablehq.com/@d3/u-s-map)\n\nThe Albers’ equal area-conic projection. This is a U.S.-centric configuration of [d3.geoConicEqualArea](#geoConicEqualArea).\n\n# d3.geoConicConformal() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/conicConformal.js \"Source\")\n
# d3.geoConicConformalRaw(phi0, phi1) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/conicConformal.js \"Source\")\n\n[](https://observablehq.com/@d3/conic-conformal)\n\nThe conic conformal projection. The parallels default to [30°, 30°] resulting in flat top. See also [*conic*.parallels](#conic_parallels).\n\n# d3.geoConicEqualArea() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/conicEqualArea.js \"Source\")\n
# d3.geoConicEqualAreaRaw(phi0, phi1) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/conicEqualArea.js \"Source\")\n\n[](https://observablehq.com/@d3/conic-equal-area)\n\nThe Albers’ equal-area conic projection. See also [*conic*.parallels](#conic_parallels).\n\n# d3.geoConicEquidistant() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/conicEquidistant.js \"Source\")\n
# d3.geoConicEquidistantRaw(phi0, phi1) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/conicEquidistant.js \"Source\")\n\n[](https://observablehq.com/@d3/conic-equidistant)\n\nThe conic equidistant projection. See also [*conic*.parallels](#conic_parallels).\n\n#### Cylindrical Projections\n\nCylindrical projections project the sphere onto a containing cylinder, and then unroll the cylinder onto the plane. [Pseudocylindrical projections](https://web.archive.org/web/20150928042327/http://www.progonos.com/furuti/MapProj/Normal/ProjPCyl/projPCyl.html) are a generalization of cylindrical projections.\n\n# d3.geoEquirectangular() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/equirectangular.js \"Source\")\n
# d3.geoEquirectangularRaw\n\n[](https://observablehq.com/@d3/equirectangular)\n\nThe equirectangular (plate carrée) projection.\n\n# d3.geoMercator() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/mercator.js \"Source\")\n
# d3.geoMercatorRaw\n\n[](https://observablehq.com/@d3/mercator)\n\nThe spherical Mercator projection. Defines a default [*projection*.clipExtent](#projection_clipExtent) such that the world is projected to a square, clipped to approximately ±85° latitude.\n\n# d3.geoTransverseMercator() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/transverseMercator.js \"Source\")\n
# d3.geoTransverseMercatorRaw\n\n[](https://observablehq.com/@d3/transverse-mercator)\n\nThe transverse spherical Mercator projection. Defines a default [*projection*.clipExtent](#projection_clipExtent) such that the world is projected to a square, clipped to approximately ±85° latitude.\n\n# d3.geoNaturalEarth1() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/naturalEarth1.js \"Source\")\n
# d3.geoNaturalEarth1Raw\n\n[](https://observablehq.com/@d3/natural-earth)\n\nThe [Natural Earth projection](http://www.shadedrelief.com/NE_proj/) is a pseudocylindrical projection designed by Tom Patterson. It is neither conformal nor equal-area, but appealing to the eye for small-scale maps of the whole world.\n\n### Raw Projections\n\nRaw projections are point transformation functions that are used to implement custom projections; they typically passed to [d3.geoProjection](#geoProjection) or [d3.geoProjectionMutator](#geoProjectionMutator). They are exposed here to facilitate the derivation of related projections. Raw projections take spherical coordinates \\[*lambda*, *phi*\\] in radians (not degrees!) and return a point \\[*x*, *y*\\], typically in the unit square centered around the origin.\n\n# project(lambda, phi)\n\nProjects the specified point [lambda, phi] in radians, returning a new point \\[*x*, *y*\\] in unitless coordinates.\n\n# project.invert(x, y)\n\nThe inverse of [*project*](#_project).\n\n# d3.geoProjection(project) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nConstructs a new projection from the specified [raw projection](#_project), *project*. The *project* function takes the *longitude* and *latitude* of a given point in [radians](http://mathworld.wolfram.com/Radian.html), often referred to as *lambda* (λ) and *phi* (φ), and returns a two-element array \\[*x*, *y*\\] representing its unit projection. The *project* function does not need to scale or translate the point, as these are applied automatically by [*projection*.scale](#projection_scale), [*projection*.translate](#projection_translate), and [*projection*.center](#projection_center). Likewise, the *project* function does not need to perform any spherical rotation, as [*projection*.rotate](#projection_rotate) is applied prior to projection.\n\nFor example, a spherical Mercator projection can be implemented as:\n\n```js\nvar mercator = d3.geoProjection(function(x, y) {\n return [x, Math.log(Math.tan(Math.PI / 4 + y / 2))];\n});\n```\n\nIf the *project* function exposes an *invert* method, the returned projection will also expose [*projection*.invert](#projection_invert).\n\n# d3.geoProjectionMutator(factory) [<>](https://github.com/d3/d3-geo/blob/master/src/projection/index.js \"Source\")\n\nConstructs a new projection from the specified [raw projection](#_project) *factory* and returns a *mutate* function to call whenever the raw projection changes. The *factory* must return a raw projection. The returned *mutate* function returns the wrapped projection. For example, a conic projection typically has two configurable parallels. A suitable *factory* function, such as [d3.geoConicEqualAreaRaw](#geoConicEqualAreaRaw), would have the form:\n\n```js\n// y0 and y1 represent two parallels\nfunction conicFactory(phi0, phi1) {\n return function conicRaw(lambda, phi) {\n return […, …];\n };\n}\n```\n\nUsing d3.geoProjectionMutator, you can implement a standard projection that allows the parallels to be changed, reassigning the raw projection used internally by [d3.geoProjection](#geoProjection):\n\n```js\nfunction conicCustom() {\n var phi0 = 29.5,\n phi1 = 45.5,\n mutate = d3.geoProjectionMutator(conicFactory),\n projection = mutate(phi0, phi1);\n\n projection.parallels = function(_) {\n return arguments.length ? mutate(phi0 = +_[0], phi1 = +_[1]) : [phi0, phi1];\n };\n\n return projection;\n}\n```\n\nWhen creating a mutable projection, the *mutate* function is typically not exposed.\n\n### Spherical Math\n\n# d3.geoArea(object) [<>](https://github.com/d3/d3-geo/blob/master/src/area.js \"Source\")\n\nReturns the spherical area of the specified GeoJSON *object* in [steradians](http://mathworld.wolfram.com/Steradian.html). This is the spherical equivalent of [*path*.area](#path_area).\n\n# d3.geoBounds(object) [<>](https://github.com/d3/d3-geo/blob/master/src/bounds.js \"Source\")\n\nReturns the [spherical bounding box](https://www.jasondavies.com/maps/bounds/) for the specified GeoJSON *object*. The bounding box is represented by a two-dimensional array: \\[\\[*left*, *bottom*], \\[*right*, *top*\\]\\], where *left* is the minimum longitude, *bottom* is the minimum latitude, *right* is maximum longitude, and *top* is the maximum latitude. All coordinates are given in degrees. (Note that in projected planar coordinates, the minimum latitude is typically the maximum *y*-value, and the maximum latitude is typically the minimum *y*-value.) This is the spherical equivalent of [*path*.bounds](#path_bounds).\n\n# d3.geoCentroid(object) [<>](https://github.com/d3/d3-geo/blob/master/src/centroid.js \"Source\")\n\nReturns the spherical centroid of the specified GeoJSON *object*. This is the spherical equivalent of [*path*.centroid](#path_centroid).\n\n# d3.geoDistance(a, b) [<>](https://github.com/d3/d3-geo/blob/master/src/distance.js \"Source\")\n\nReturns the great-arc distance in [radians](http://mathworld.wolfram.com/Radian.html) between the two points *a* and *b*. Each point must be specified as a two-element array \\[*longitude*, *latitude*\\] in degrees. This is the spherical equivalent of [*path*.measure](#path_measure) given a LineString of two points.\n\n# d3.geoLength(object) [<>](https://github.com/d3/d3-geo/blob/master/src/length.js \"Source\")\n\nReturns the great-arc length of the specified GeoJSON *object* in [radians](http://mathworld.wolfram.com/Radian.html). For polygons, returns the perimeter of the exterior ring plus that of any interior rings. This is the spherical equivalent of [*path*.measure](#path_measure).\n\n# d3.geoInterpolate(a, b) [<>](https://github.com/d3/d3-geo/blob/master/src/interpolate.js \"Source\")\n\nReturns an interpolator function given two points *a* and *b*. Each point must be specified as a two-element array \\[*longitude*, *latitude*\\] in degrees. The returned interpolator function takes a single argument *t*, where *t* is a number ranging from 0 to 1; a value of 0 returns the point *a*, while a value of 1 returns the point *b*. Intermediate values interpolate from *a* to *b* along the great arc that passes through both *a* and *b*. If *a* and *b* are antipodes, an arbitrary great arc is chosen.\n\n# d3.geoContains(object, point) [<>](https://github.com/d3/d3-geo/blob/master/src/contains.js \"Source\")\n\nReturns true if and only if the specified GeoJSON *object* contains the specified *point*, or false if the *object* does not contain the *point*. The point must be specified as a two-element array \\[*longitude*, *latitude*\\] in degrees. For Point and MultiPoint geometries, an exact test is used; for a Sphere, true is always returned; for other geometries, an epsilon threshold is applied.\n\n# d3.geoRotation(angles) [<>](https://github.com/d3/d3-geo/blob/master/src/rotation.js \"Source\")\n\nReturns a [rotation function](#_rotation) for the given *angles*, which must be a two- or three-element array of numbers [*lambda*, *phi*, *gamma*] specifying the rotation angles in degrees about [each spherical axis](https://bl.ocks.org/mbostock/4282586). (These correspond to [yaw, pitch and roll](https://en.wikipedia.org/wiki/Aircraft_principal_axes).) If the rotation angle *gamma* is omitted, it defaults to 0. See also [*projection*.rotate](#projection_rotate).\n\n# rotation(point) [<>](https://github.com/d3/d3-geo/blob/master/src/rotation.js \"Source\")\n\nReturns a new array \\[*longitude*, *latitude*\\] in degrees representing the rotated point of the given *point*. The point must be specified as a two-element array \\[*longitude*, *latitude*\\] in degrees.\n\n# rotation.invert(point) [<>](https://github.com/d3/d3-geo/blob/master/src/rotation.js \"Source\")\n\nReturns a new array \\[*longitude*, *latitude*\\] in degrees representing the point of the given rotated *point*; the inverse of [*rotation*](#_rotation). The point must be specified as a two-element array \\[*longitude*, *latitude*\\] in degrees.\n\n### Spherical Shapes\n\nTo generate a [great arc](https://en.wikipedia.org/wiki/Great-circle_distance) (a segment of a great circle), simply pass a GeoJSON LineString geometry object to a [d3.geoPath](#geoPath). D3’s projections use great-arc interpolation for intermediate points, so there’s no need for a great arc shape generator.\n\n# d3.geoCircle() [<>](https://github.com/d3/d3-geo/blob/master/src/circle.js \"Source\")\n\nReturns a new circle generator.\n\n# circle(arguments…) [<>](https://github.com/d3/d3-geo/blob/master/src/circle.js \"Source\")\n\nReturns a new GeoJSON geometry object of type “Polygon” approximating a circle on the surface of a sphere, with the current [center](#circle_center), [radius](#circle_radius) and [precision](#circle_precision). Any *arguments* are passed to the accessors.\n\n# circle.center([center]) [<>](https://github.com/d3/d3-geo/blob/master/src/circle.js \"Source\")\n\nIf *center* is specified, sets the circle center to the specified point \\[*longitude*, *latitude*\\] in degrees, and returns this circle generator. The center may also be specified as a function; this function will be invoked whenever a circle is [generated](#_circle), being passed any arguments passed to the circle generator. If *center* is not specified, returns the current center accessor, which defaults to:\n\n```js\nfunction center() {\n return [0, 0];\n}\n```\n\n# circle.radius([radius]) [<>](https://github.com/d3/d3-geo/blob/master/src/circle.js \"Source\")\n\nIf *radius* is specified, sets the circle radius to the specified angle in degrees, and returns this circle generator. The radius may also be specified as a function; this function will be invoked whenever a circle is [generated](#_circle), being passed any arguments passed to the circle generator. If *radius* is not specified, returns the current radius accessor, which defaults to:\n\n```js\nfunction radius() {\n return 90;\n}\n```\n\n# circle.precision([angle]) [<>](https://github.com/d3/d3-geo/blob/master/src/circle.js \"Source\")\n\nIf *precision* is specified, sets the circle precision to the specified angle in degrees, and returns this circle generator. The precision may also be specified as a function; this function will be invoked whenever a circle is [generated](#_circle), being passed any arguments passed to the circle generator. If *precision* is not specified, returns the current precision accessor, which defaults to:\n\n```js\nfunction precision() {\n return 6;\n}\n```\n\nSmall circles do not follow great arcs and thus the generated polygon is only an approximation. Specifying a smaller precision angle improves the accuracy of the approximate polygon, but also increase the cost to generate and render it.\n\n# d3.geoGraticule() [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nConstructs a geometry generator for creating graticules: a uniform grid of [meridians](https://en.wikipedia.org/wiki/Meridian_\\(geography\\)) and [parallels](https://en.wikipedia.org/wiki/Circle_of_latitude) for showing projection distortion. The default graticule has meridians and parallels every 10° between ±80° latitude; for the polar regions, there are meridians every 90°.\n\n\n\n# graticule() [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nReturns a GeoJSON MultiLineString geometry object representing all meridians and parallels for this graticule.\n\n# graticule.lines() [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nReturns an array of GeoJSON LineString geometry objects, one for each meridian or parallel for this graticule.\n\n# graticule.outline() [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nReturns a GeoJSON Polygon geometry object representing the outline of this graticule, i.e. along the meridians and parallels defining its extent.\n\n# graticule.extent([extent]) [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nIf *extent* is specified, sets the major and minor extents of this graticule. If *extent* is not specified, returns the current minor extent, which defaults to ⟨⟨-180°, -80° - ε⟩, ⟨180°, 80° + ε⟩⟩.\n\n# graticule.extentMajor([extent]) [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nIf *extent* is specified, sets the major extent of this graticule. If *extent* is not specified, returns the current major extent, which defaults to ⟨⟨-180°, -90° + ε⟩, ⟨180°, 90° - ε⟩⟩.\n\n# graticule.extentMinor([extent]) [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nIf *extent* is specified, sets the minor extent of this graticule. If *extent* is not specified, returns the current minor extent, which defaults to ⟨⟨-180°, -80° - ε⟩, ⟨180°, 80° + ε⟩⟩.\n\n# graticule.step([step]) [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nIf *step* is specified, sets the major and minor step for this graticule. If *step* is not specified, returns the current minor step, which defaults to ⟨10°, 10°⟩.\n\n# graticule.stepMajor([step]) [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nIf *step* is specified, sets the major step for this graticule. If *step* is not specified, returns the current major step, which defaults to ⟨90°, 360°⟩.\n\n# graticule.stepMinor([step]) [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nIf *step* is specified, sets the minor step for this graticule. If *step* is not specified, returns the current minor step, which defaults to ⟨10°, 10°⟩.\n\n# graticule.precision([angle]) [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nIf *precision* is specified, sets the precision for this graticule, in degrees. If *precision* is not specified, returns the current precision, which defaults to 2.5°.\n\n# d3.geoGraticule10() [<>](https://github.com/d3/d3-geo/blob/master/src/graticule.js \"Source\")\n\nA convenience method for directly generating the default 10° global graticule as a GeoJSON MultiLineString geometry object. Equivalent to:\n\n```js\nfunction geoGraticule10() {\n return d3.geoGraticule()();\n}\n```\n\n### Streams\n\nD3 transforms geometry using a sequence of function calls, rather than materializing intermediate representations, to minimize overhead. Streams must implement several methods to receive input geometry. Streams are inherently stateful; the meaning of a [point](#point) depends on whether the point is inside of a [line](#lineStart), and likewise a line is distinguished from a ring by a [polygon](#polygonStart). Despite the name “stream”, these method calls are currently synchronous.\n\n# d3.geoStream(object, stream) [<>](https://github.com/d3/d3-geo/blob/master/src/stream.js \"Source\")\n\nStreams the specified [GeoJSON](http://geojson.org) *object* to the specified [projection *stream*](#projection-streams). While both features and geometry objects are supported as input, the stream interface only describes the geometry, and thus additional feature properties are not visible to streams.\n\n# stream.point(x, y[, z])\n\nIndicates a point with the specified coordinates *x* and *y* (and optionally *z*). The coordinate system is unspecified and implementation-dependent; for example, [projection streams](https://github.com/d3/d3-geo-projection) require spherical coordinates in degrees as input. Outside the context of a polygon or line, a point indicates a point geometry object ([Point](http://www.geojson.org/geojson-spec.html#point) or [MultiPoint](http://www.geojson.org/geojson-spec.html#multipoint)). Within a line or polygon ring, the point indicates a control point.\n\n# stream.lineStart()\n\nIndicates the start of a line or ring. Within a polygon, indicates the start of a ring. The first ring of a polygon is the exterior ring, and is typically clockwise. Any subsequent rings indicate holes in the polygon, and are typically counterclockwise.\n\n# stream.lineEnd()\n\nIndicates the end of a line or ring. Within a polygon, indicates the end of a ring. Unlike GeoJSON, the redundant closing coordinate of a ring is *not* indicated via [point](#point), and instead is implied via lineEnd within a polygon. Thus, the given polygon input:\n\n```json\n{\n \"type\": \"Polygon\",\n \"coordinates\": [\n [[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]]\n ]\n}\n```\n\nWill produce the following series of method calls on the stream:\n\n```js\nstream.polygonStart();\nstream.lineStart();\nstream.point(0, 0);\nstream.point(0, 1);\nstream.point(1, 1);\nstream.point(1, 0);\nstream.lineEnd();\nstream.polygonEnd();\n```\n\n# stream.polygonStart()\n\nIndicates the start of a polygon. The first line of a polygon indicates the exterior ring, and any subsequent lines indicate interior holes.\n\n# stream.polygonEnd()\n\nIndicates the end of a polygon.\n\n# stream.sphere()\n\nIndicates the sphere (the globe; the unit sphere centered at ⟨0,0,0⟩).\n\n### Transforms\n\nTransforms are a generalization of projections. Transform implement [*projection*.stream](#projection_stream) and can be passed to [*path*.projection](#path_projection). However, they only implement a subset of the other projection methods, and represent arbitrary geometric transformations rather than projections from spherical to planar coordinates.\n\n# d3.geoTransform(methods) [<>](https://github.com/d3/d3-geo/blob/master/src/transform.js \"Source\")\n\nDefines an arbitrary transform using the methods defined on the specified *methods* object. Any undefined methods will use pass-through methods that propagate inputs to the output stream. For example, to reflect the *y*-dimension (see also [*identity*.reflectY](#identity_reflectY)):\n\n```js\nvar reflectY = d3.geoTransform({\n point: function(x, y) {\n this.stream.point(x, -y);\n }\n});\n```\n\nOr to define an affine matrix transformation:\n\n```js\nfunction matrix(a, b, c, d, tx, ty) {\n return d3.geoTransform({\n point: function(x, y) {\n this.stream.point(a * x + b * y + tx, c * x + d * y + ty);\n }\n });\n}\n```\n\n# d3.geoIdentity() [<>](https://github.com/d3/d3-geo/blob/master/src/projection/identity.js \"Source\")\n\nThe identity transform can be used to scale, translate and clip planar geometry. It implements [*projection*.scale](#projection_scale), [*projection*.translate](#projection_translate), [*projection*.fitExtent](#projection_fitExtent), [*projection*.fitSize](#projection_fitSize), [*projection*.fitWidth](#projection_fitWidth), [*projection*.fitHeight](#projection_fitHeight), [*projection*.clipExtent](#projection_clipExtent), [*projection*.angle](#projection_angle), [*projection*.reflectX](#projection_reflectX) and [*projection*.reflectY](#projection_reflectY).\n\n### Clipping\n\nProjections perform cutting or clipping of geometries in two stages.\n\n# preclip(stream)\n\nPre-clipping occurs in geographic coordinates. Cutting along the antimeridian line, or clipping along a small circle are the most common strategies.\n\nSee [*projection*.preclip](#projection_preclip).\n\n# postclip(stream)\n\nPost-clipping occurs on the plane, when a projection is bounded to a certain extent such as a rectangle.\n\nSee [*projection*.postclip](#projection_postclip).\n\nClipping functions are implemented as transformations of a [projection stream](#streams). Pre-clipping operates on spherical coordinates, in radians. Post-clipping operates on planar coordinates, in pixels.\n\n# d3.geoClipAntimeridian\n\nA clipping function which transforms a stream such that geometries (lines or polygons) that cross the antimeridian line are cut in two, one on each side. Typically used for pre-clipping.\n\n# d3.geoClipCircle(angle)\n\nGenerates a clipping function which transforms a stream such that geometries are bounded by a small circle of radius *angle* around the projection’s [center](#projection_center). Typically used for pre-clipping.\n\n# d3.geoClipRectangle(x0, y0, x1, y1)\n\nGenerates a clipping function which transforms a stream such that geometries are bounded by a rectangle of coordinates [[x0, y0], [x1, y1]]. Typically used for post-clipping.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-array": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-geo", "error": "[Circular]", "extraneous": false }, "d3-hierarchy": { "_from": "d3-hierarchy@1", "_id": "d3-hierarchy@1.1.9", "_inBundle": false, "_integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", "_location": "/d3-hierarchy", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-hierarchy@1", "name": "d3-hierarchy", "escapedName": "d3-hierarchy", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", "_shasum": "2f6bee24caaea43f8dc37545fa01628559647a83", "_spec": "d3-hierarchy@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-hierarchy/issues" }, "deprecated": false, "description": "Layout algorithms for visualizing hierarchical data.", "devDependencies": { "benchmark": "^2.1.4", "d3-array": "1.2.0 - 2", "d3-dsv": "1", "d3-queue": "3", "d3-random": "1.1.0 - 2", "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-hierarchy/", "jsdelivr": "dist/d3-hierarchy.min.js", "keywords": [ "d3", "d3-module", "layout", "tree", "treemap", "hierarchy", "infovis" ], "license": "BSD-3-Clause", "main": "dist/d3-hierarchy.js", "module": "src/index.js", "name": "d3-hierarchy", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-hierarchy.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": false, "unpkg": "dist/d3-hierarchy.min.js", "version": "1.1.9", "readme": "# d3-hierarchy\n\nMany datasets are intrinsically hierarchical. Consider [geographic entities](https://www.census.gov/geo/reference/hierarchy.html), such as census blocks, census tracts, counties and states; the command structure of businesses and governments; file systems and software packages. And even non-hierarchical data may be arranged empirically into a hierarchy, as with [*k*-means clustering](https://en.wikipedia.org/wiki/K-means_clustering) or [phylogenetic trees](https://observablehq.com/@mbostock/tree-of-life).\n\nThis module implements several popular techniques for visualizing hierarchical data:\n\n**Node-link diagrams** show topology using discrete marks for nodes and links, such as a circle for each node and a line connecting each parent and child. The [“tidy” tree](#tree) is delightfully compact, while the [dendrogram](#cluster) places leaves at the same level. (These have both polar and Cartesian forms.) [Indented trees](https://bl.ocks.org/mbostock/1093025) are useful for interactive browsing.\n\n**Adjacency diagrams** show topology through the relative placement of nodes. They may also encode a quantitative dimension in the area of each node, for example to show revenue or file size. The [“icicle” diagram](#partition) uses rectangles, while the “sunburst” uses annular segments.\n\n**Enclosure diagrams** also use an area encoding, but show topology through containment. A [treemap](#treemap) recursively subdivides area into rectangles. [Circle-packing](#pack) tightly nests circles; this is not as space-efficient as a treemap, but perhaps more readily shows topology.\n\nA good hierarchical visualization facilitates rapid multiscale inference: micro-observations of individual elements and macro-observations of large groups.\n\n## Installing\n\nIf you use NPM, `npm install d3-hierarchy`. Otherwise, download the [latest release](https://github.com/d3/d3-hierarchy/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-hierarchy.v1.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\n\n```\n\n## API Reference\n\n* [Hierarchy](#hierarchy) ([Stratify](#stratify))\n* [Cluster](#cluster)\n* [Tree](#tree)\n* [Treemap](#treemap) ([Treemap Tiling](#treemap-tiling))\n* [Partition](#partition)\n* [Pack](#pack)\n\n### Hierarchy\n\nBefore you can compute a hierarchical layout, you need a root node. If your data is already in a hierarchical format, such as JSON, you can pass it directly to [d3.hierarchy](#hierarchy); otherwise, you can rearrange tabular data, such as comma-separated values (CSV), into a hierarchy using [d3.stratify](#stratify).\n\n# d3.hierarchy(data[, children]) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/index.js), [Examples](https://observablehq.com/@d3/d3-hierarchy)\n\nConstructs a root node from the specified hierarchical *data*. The specified *data* must be an object representing the root node. For example:\n\n```json\n{\n \"name\": \"Eve\",\n \"children\": [\n {\n \"name\": \"Cain\"\n },\n {\n \"name\": \"Seth\",\n \"children\": [\n {\n \"name\": \"Enos\"\n },\n {\n \"name\": \"Noam\"\n }\n ]\n },\n {\n \"name\": \"Abel\"\n },\n {\n \"name\": \"Awan\",\n \"children\": [\n {\n \"name\": \"Enoch\"\n }\n ]\n },\n {\n \"name\": \"Azura\"\n }\n ]\n}\n```\n\nThe specified *children* accessor function is invoked for each datum, starting with the root *data*, and must return an array of data representing the children, or null if the current datum has no children. If *children* is not specified, it defaults to:\n\n```js\nfunction children(d) {\n return d.children;\n}\n```\n\nThe returned node and each descendant has the following properties:\n\n* *node*.data - the associated data, as specified to the [constructor](#hierarchy).\n* *node*.depth - zero for the root node, and increasing by one for each descendant generation.\n* *node*.height - zero for leaf nodes, and the greatest distance from any descendant leaf for internal nodes.\n* *node*.parent - the parent node, or null for the root node.\n* *node*.children - an array of child nodes, if any; undefined for leaf nodes.\n* *node*.value - the summed value of the node and its [descendants](#node_descendants); optional, see [*node*.sum](#node_sum) and [*node*.count](#node_count).\n\nThis method can also be used to test if a node is an `instanceof d3.hierarchy` and to extend the node prototype.\n\n# node.ancestors() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/ancestors.js), [Examples](https://observablehq.com/@d3/d3-hierarchy)\n\nReturns the array of ancestors nodes, starting with this node, then followed by each parent up to the root.\n\n# node.descendants() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/descendants.js), [Examples](https://observablehq.com/@d3/d3-hierarchy)\n\nReturns the array of descendant nodes, starting with this node, then followed by each child in topological order.\n\n# node.leaves() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/leaves.js), [Examples](https://observablehq.com/@d3/d3-hierarchy)\n\nReturns the array of leaf nodes in traversal order; leaves are nodes with no children.\n\n# node.path(target) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/path.js), [Examples](https://observablehq.com/@d3/d3-hierarchy)\n\nReturns the shortest path through the hierarchy from this *node* to the specified *target* node. The path starts at this *node*, ascends to the least common ancestor of this *node* and the *target* node, and then descends to the *target* node. This is particularly useful for [hierarchical edge bundling](https://observablehq.com/@d3/hierarchical-edge-bundling).\n\n# node.links() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/links.js), [Examples](https://observablehq.com/@d3/d3-hierarchy)\n\nReturns an array of links for this *node*, where each *link* is an object that defines source and target properties. The source of each link is the parent node, and the target is a child node.\n\n# node.sum(value) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/sum.js), [Examples](https://observablehq.com/@d3/visiting-a-d3-hierarchy)\n\nEvaluates the specified *value* function for this *node* and each descendant in [post-order traversal](#node_eachAfter), and returns this *node*. The *node*.value property of each node is set to the numeric value returned by the specified function plus the combined value of all children. The function is passed the node’s data, and must return a non-negative number. The *value* accessor is evaluated for *node* and every descendant, including internal nodes; if you only want leaf nodes to have internal value, then return zero for any node with children. [For example](https://observablehq.com/@d3/treemap-by-count), as an alternative to [*node*.count](#node_count):\n\n```js\nroot.sum(function(d) { return d.value ? 1 : 0; });\n```\n\nYou must call *node*.sum or [*node*.count](#node_count) before invoking a hierarchical layout that requires *node*.value, such as [d3.treemap](#treemap). Since the API supports [method chaining](https://en.wikipedia.org/wiki/Method_chaining), you can invoke *node*.sum and [*node*.sort](#node_sort) before computing the layout, and then subsequently generate an array of all [descendant nodes](#node_descendants) like so:\n\n```js\nvar treemap = d3.treemap()\n .size([width, height])\n .padding(2);\n\nvar nodes = treemap(root\n .sum(function(d) { return d.value; })\n .sort(function(a, b) { return b.height - a.height || b.value - a.value; }))\n .descendants();\n```\n\nThis example assumes that the node data has a value field.\n\n# node.count() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/count.js), [Examples](https://observablehq.com/@d3/visiting-a-d3-hierarchy)\n\nComputes the number of leaves under this *node* and assigns it to *node*.value, and similarly for every descendant of *node*. If this *node* is a leaf, its count is one. Returns this *node*. See also [*node*.sum](#node_sum).\n\n# node.sort(compare) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/sort.js), [Examples](https://observablehq.com/@d3/visiting-a-d3-hierarchy)\n\nSorts the children of this *node*, if any, and each of this *node*’s descendants’ children, in [pre-order traversal](#node_eachBefore) using the specified *compare* function, and returns this *node*. The specified function is passed two nodes *a* and *b* to compare. If *a* should be before *b*, the function must return a value less than zero; if *b* should be before *a*, the function must return a value greater than zero; otherwise, the relative order of *a* and *b* are not specified. See [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) for more.\n\nUnlike [*node*.sum](#node_sum), the *compare* function is passed two [nodes](#hierarchy) rather than two nodes’ data. For example, if the data has a value property, this sorts nodes by the descending aggregate value of the node and all its descendants, as is recommended for [circle-packing](#pack):\n\n```js\nroot\n .sum(function(d) { return d.value; })\n .sort(function(a, b) { return b.value - a.value; });\n``````\n\nSimilarly, to sort nodes by descending height (greatest distance from any descendant leaf) and then descending value, as is recommended for [treemaps](#treemap) and [icicles](#partition):\n\n```js\nroot\n .sum(function(d) { return d.value; })\n .sort(function(a, b) { return b.height - a.height || b.value - a.value; });\n```\n\nTo sort nodes by descending height and then ascending id, as is recommended for [trees](#tree) and [dendrograms](#cluster):\n\n```js\nroot\n .sum(function(d) { return d.value; })\n .sort(function(a, b) { return b.height - a.height || a.id.localeCompare(b.id); });\n```\n\nYou must call *node*.sort before invoking a hierarchical layout if you want the new sort order to affect the layout; see [*node*.sum](#node_sum) for an example.\n\n# node.each(function) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/each.js), [Examples](https://observablehq.com/@d3/visiting-a-d3-hierarchy)\n\nInvokes the specified *function* for *node* and each descendant in [breadth-first order](https://en.wikipedia.org/wiki/Breadth-first_search), such that a given *node* is only visited if all nodes of lesser depth have already been visited, as well as all preceding nodes of the same depth. The specified function is passed the current *node*.\n\n# node.eachAfter(function) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/eachAfter.js), [Examples](https://observablehq.com/@d3/visiting-a-d3-hierarchy)\n\nInvokes the specified *function* for *node* and each descendant in [post-order traversal](https://en.wikipedia.org/wiki/Tree_traversal#Post-order), such that a given *node* is only visited after all of its descendants have already been visited. The specified function is passed the current *node*.\n\n# node.eachBefore(function) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/eachBefore.js), [Examples](https://observablehq.com/@d3/visiting-a-d3-hierarchy)\n\nInvokes the specified *function* for *node* and each descendant in [pre-order traversal](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order), such that a given *node* is only visited after all of its ancestors have already been visited. The specified function is passed the current *node*.\n\n# node.copy() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/index.js), [Examples](https://observablehq.com/@d3/d3-hierarchy)\n\nReturn a deep copy of the subtree starting at this *node*. (The returned deep copy shares the same data, however.) The returned node is the root of a new tree; the returned node’s parent is always null and its depth is always zero.\n\n#### Stratify\n\nConsider the following table of relationships:\n\nName | Parent\n------|--------\nEve |\nCain | Eve\nSeth | Eve\nEnos | Seth\nNoam | Seth\nAbel | Eve\nAwan | Eve\nEnoch | Awan\nAzura | Eve\n\nThese names are conveniently unique, so we can unambiguously represent the hierarchy as a CSV file:\n\n```\nname,parent\nEve,\nCain,Eve\nSeth,Eve\nEnos,Seth\nNoam,Seth\nAbel,Eve\nAwan,Eve\nEnoch,Awan\nAzura,Eve\n```\n\nTo parse the CSV using [d3.csvParse](https://github.com/d3/d3-dsv#csvParse):\n\n```js\nvar table = d3.csvParse(text);\n```\n\nThis returns:\n\n```json\n[\n {\"name\": \"Eve\", \"parent\": \"\"},\n {\"name\": \"Cain\", \"parent\": \"Eve\"},\n {\"name\": \"Seth\", \"parent\": \"Eve\"},\n {\"name\": \"Enos\", \"parent\": \"Seth\"},\n {\"name\": \"Noam\", \"parent\": \"Seth\"},\n {\"name\": \"Abel\", \"parent\": \"Eve\"},\n {\"name\": \"Awan\", \"parent\": \"Eve\"},\n {\"name\": \"Enoch\", \"parent\": \"Awan\"},\n {\"name\": \"Azura\", \"parent\": \"Eve\"}\n]\n```\n\nTo convert to a hierarchy:\n\n```js\nvar root = d3.stratify()\n .id(function(d) { return d.name; })\n .parentId(function(d) { return d.parent; })\n (table);\n```\n\nThis returns:\n\n[\"Stratify\"](https://runkit.com/mbostock/56fed33d8630b01300f72daa)\n\nThis hierarchy can now be passed to a hierarchical layout, such as [d3.tree](#_tree), for visualization.\n\n# d3.stratify() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/stratify.js), [Examples](https://observablehq.com/@d3/d3-stratify)\n\nConstructs a new stratify operator with the default settings.\n\n# stratify(data) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/stratify.js), [Examples](https://observablehq.com/@d3/d3-stratify)\n\nGenerates a new hierarchy from the specified tabular *data*.\n\n# stratify.id([id]) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/stratify.js), [Examples](https://observablehq.com/@d3/d3-stratify)\n\nIf *id* is specified, sets the id accessor to the given function and returns this stratify operator. Otherwise, returns the current id accessor, which defaults to:\n\n```js\nfunction id(d) {\n return d.id;\n}\n```\n\nThe id accessor is invoked for each element in the input data passed to the [stratify operator](#_stratify), being passed the current datum (*d*) and the current index (*i*). The returned string is then used to identify the node’s relationships in conjunction with the [parent id](#stratify_parentId). For leaf nodes, the id may be undefined; otherwise, the id must be unique. (Null and the empty string are equivalent to undefined.)\n\n# stratify.parentId([parentId]) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/stratify.js), [Examples](https://observablehq.com/@d3/d3-stratify)\n\nIf *parentId* is specified, sets the parent id accessor to the given function and returns this stratify operator. Otherwise, returns the current parent id accessor, which defaults to:\n\n```js\nfunction parentId(d) {\n return d.parentId;\n}\n```\n\nThe parent id accessor is invoked for each element in the input data passed to the [stratify operator](#_stratify), being passed the current datum (*d*) and the current index (*i*). The returned string is then used to identify the node’s relationships in conjunction with the [id](#stratify_id). For the root node, the parent id should be undefined. (Null and the empty string are equivalent to undefined.) There must be exactly one root node in the input data, and no circular relationships.\n\n### Cluster\n\n[\"Dendrogram\"](https://observablehq.com/@d3/cluster-dendrogram)\n\nThe **cluster layout** produces [dendrograms](http://en.wikipedia.org/wiki/Dendrogram): node-link diagrams that place leaf nodes of the tree at the same depth. Dendrograms are typically less compact than [tidy trees](#tree), but are useful when all the leaves should be at the same level, such as for hierarchical clustering or [phylogenetic tree diagrams](https://observablehq.com/@mbostock/tree-of-life).\n\n# d3.cluster() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/cluster.js), [Examples](https://observablehq.com/@d3/cluster-dendrogram)\n\nCreates a new cluster layout with default settings.\n\n# cluster(root)\n\nLays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants:\n\n* *node*.x - the *x*-coordinate of the node\n* *node*.y - the *y*-coordinate of the node\n\nThe coordinates *x* and *y* represent an arbitrary coordinate system; for example, you can treat *x* as an angle and *y* as a radius to produce a [radial layout](https://observablehq.com/@d3/radial-dendrogram). You may want to call [*root*.sort](#node_sort) before passing the hierarchy to the cluster layout.\n\n# cluster.size([size])\n\nIf *size* is specified, sets this cluster layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this cluster layout. If *size* is not specified, returns the current layout size, which defaults to [1, 1]. A layout size of null indicates that a [node size](#cluster_nodeSize) will be used instead. The coordinates *x* and *y* represent an arbitrary coordinate system; for example, to produce a [radial layout](https://observablehq.com/@d3/radial-dendrogram), a size of [360, *radius*] corresponds to a breadth of 360° and a depth of *radius*.\n\n# cluster.nodeSize([size])\n\nIf *size* is specified, sets this cluster layout’s node size to the specified two-element array of numbers [*width*, *height*] and returns this cluster layout. If *size* is not specified, returns the current node size, which defaults to null. A node size of null indicates that a [layout size](#cluster_size) will be used instead. When a node size is specified, the root node is always positioned at ⟨0, 0⟩.\n\n# cluster.separation([separation])\n\nIf *separation* is specified, sets the separation accessor to the specified function and returns this cluster layout. If *separation* is not specified, returns the current separation accessor, which defaults to:\n\n```js\nfunction separation(a, b) {\n return a.parent == b.parent ? 1 : 2;\n}\n```\n\nThe separation accessor is used to separate neighboring leaves. The separation function is passed two leaves *a* and *b*, and must return the desired separation. The nodes are typically siblings, though the nodes may be more distantly related if the layout decides to place such nodes adjacent.\n\n### Tree\n\n[\"Tidy](https://observablehq.com/@d3/tidy-tree)\n\nThe **tree** layout produces tidy node-link diagrams of trees using the [Reingold–Tilford “tidy” algorithm](http://reingold.co/tidier-drawings.pdf), improved to run in linear time by [Buchheim *et al.*](http://dirk.jivas.de/papers/buchheim02improving.pdf) Tidy trees are typically more compact than [dendrograms](#cluster).\n\n# d3.tree() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/tree.js), [Examples](https://observablehq.com/@d3/tidy-tree)\n\nCreates a new tree layout with default settings.\n\n# tree(root)\n\nLays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants:\n\n* *node*.x - the *x*-coordinate of the node\n* *node*.y - the *y*-coordinate of the node\n\nThe coordinates *x* and *y* represent an arbitrary coordinate system; for example, you can treat *x* as an angle and *y* as a radius to produce a [radial layout](https://observablehq.com/@d3/radial-tidy-tree). You may want to call [*root*.sort](#node_sort) before passing the hierarchy to the tree layout.\n\n# tree.size([size])\n\nIf *size* is specified, sets this tree layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this tree layout. If *size* is not specified, returns the current layout size, which defaults to [1, 1]. A layout size of null indicates that a [node size](#tree_nodeSize) will be used instead. The coordinates *x* and *y* represent an arbitrary coordinate system; for example, to produce a [radial layout](https://observablehq.com/@d3/radial-tidy-tree), a size of [360, *radius*] corresponds to a breadth of 360° and a depth of *radius*.\n\n# tree.nodeSize([size])\n\nIf *size* is specified, sets this tree layout’s node size to the specified two-element array of numbers [*width*, *height*] and returns this tree layout. If *size* is not specified, returns the current node size, which defaults to null. A node size of null indicates that a [layout size](#tree_size) will be used instead. When a node size is specified, the root node is always positioned at ⟨0, 0⟩.\n\n# tree.separation([separation])\n\nIf *separation* is specified, sets the separation accessor to the specified function and returns this tree layout. If *separation* is not specified, returns the current separation accessor, which defaults to:\n\n```js\nfunction separation(a, b) {\n return a.parent == b.parent ? 1 : 2;\n}\n```\n\nA variation that is more appropriate for radial layouts reduces the separation gap proportionally to the radius:\n\n```js\nfunction separation(a, b) {\n return (a.parent == b.parent ? 1 : 2) / a.depth;\n}\n```\n\nThe separation accessor is used to separate neighboring nodes. The separation function is passed two nodes *a* and *b*, and must return the desired separation. The nodes are typically siblings, though the nodes may be more distantly related if the layout decides to place such nodes adjacent.\n\n### Treemap\n\n[\"Treemap\"](https://observablehq.com/@d3/treemap)\n\nIntroduced by [Ben Shneiderman](http://www.cs.umd.edu/hcil/treemap-history/) in 1991, a **treemap** recursively subdivides area into rectangles according to each node’s associated value. D3’s treemap implementation supports an extensible [tiling method](#treemap_tile): the default [squarified](#treemapSquarify) method seeks to generate rectangles with a [golden](https://en.wikipedia.org/wiki/Golden_ratio) aspect ratio; this offers better readability and size estimation than [slice-and-dice](#treemapSliceDice), which simply alternates between horizontal and vertical subdivision by depth.\n\n# d3.treemap() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js), [Examples](https://observablehq.com/@d3/treemap)\n\nCreates a new treemap layout with default settings.\n\n# treemap(root)\n\nLays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants:\n\n* *node*.x0 - the left edge of the rectangle\n* *node*.y0 - the top edge of the rectangle\n* *node*.x1 - the right edge of the rectangle\n* *node*.y1 - the bottom edge of the rectangle\n\nYou must call [*root*.sum](#node_sum) before passing the hierarchy to the treemap layout. You probably also want to call [*root*.sort](#node_sort) to order the hierarchy before computing the layout.\n\n# treemap.tile([tile])\n\nIf *tile* is specified, sets the [tiling method](#treemap-tiling) to the specified function and returns this treemap layout. If *tile* is not specified, returns the current tiling method, which defaults to [d3.treemapSquarify](#treemapSquarify) with the golden ratio.\n\n# treemap.size([size])\n\nIf *size* is specified, sets this treemap layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this treemap layout. If *size* is not specified, returns the current size, which defaults to [1, 1].\n\n# treemap.round([round])\n\nIf *round* is specified, enables or disables rounding according to the given boolean and returns this treemap layout. If *round* is not specified, returns the current rounding state, which defaults to false.\n\n# treemap.padding([padding])\n\nIf *padding* is specified, sets the [inner](#treemap_paddingInner) and [outer](#treemap_paddingOuter) padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current inner padding function.\n\n# treemap.paddingInner([padding])\n\nIf *padding* is specified, sets the inner padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current inner padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The inner padding is used to separate a node’s adjacent children.\n\n# treemap.paddingOuter([padding])\n\nIf *padding* is specified, sets the [top](#treemap_paddingTop), [right](#treemap_paddingRight), [bottom](#treemap_paddingBottom) and [left](#treemap_paddingLeft) padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current top padding function.\n\n# treemap.paddingTop([padding])\n\nIf *padding* is specified, sets the top padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current top padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The top padding is used to separate the top edge of a node from its children.\n\n# treemap.paddingRight([padding])\n\nIf *padding* is specified, sets the right padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current right padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The right padding is used to separate the right edge of a node from its children.\n\n# treemap.paddingBottom([padding])\n\nIf *padding* is specified, sets the bottom padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current bottom padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The bottom padding is used to separate the bottom edge of a node from its children.\n\n# treemap.paddingLeft([padding])\n\nIf *padding* is specified, sets the left padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current left padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The left padding is used to separate the left edge of a node from its children.\n\n#### Treemap Tiling\n\nSeveral built-in tiling methods are provided for use with [*treemap*.tile](#treemap_tile).\n\n# d3.treemapBinary(node, x0, y0, x1, y1) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/binary.js), [Examples](https://observablehq.com/@d3/treemap)\n\nRecursively partitions the specified *nodes* into an approximately-balanced binary tree, choosing horizontal partitioning for wide rectangles and vertical partitioning for tall rectangles.\n\n# d3.treemapDice(node, x0, y0, x1, y1) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/dice.js), [Examples](https://observablehq.com/@d3/treemap)\n\nDivides the rectangular area specified by *x0*, *y0*, *x1*, *y1* horizontally according the value of each of the specified *node*’s children. The children are positioned in order, starting with the left edge (*x0*) of the given rectangle. If the sum of the children’s values is less than the specified *node*’s value (*i.e.*, if the specified *node* has a non-zero internal value), the remaining empty space will be positioned on the right edge (*x1*) of the given rectangle.\n\n# d3.treemapSlice(node, x0, y0, x1, y1) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/slice.js), [Examples](https://observablehq.com/@d3/treemap)\n\nDivides the rectangular area specified by *x0*, *y0*, *x1*, *y1* vertically according the value of each of the specified *node*’s children. The children are positioned in order, starting with the top edge (*y0*) of the given rectangle. If the sum of the children’s values is less than the specified *node*’s value (*i.e.*, if the specified *node* has a non-zero internal value), the remaining empty space will be positioned on the bottom edge (*y1*) of the given rectangle.\n\n# d3.treemapSliceDice(node, x0, y0, x1, y1) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/sliceDice.js), [Examples](https://observablehq.com/@d3/treemap)\n\nIf the specified *node* has odd depth, delegates to [treemapSlice](#treemapSlice); otherwise delegates to [treemapDice](#treemapDice).\n\n# d3.treemapSquarify(node, x0, y0, x1, y1) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/squarify.js), [Examples](https://observablehq.com/@d3/treemap)\n\nImplements the [squarified treemap](https://www.win.tue.nl/~vanwijk/stm.pdf) algorithm by Bruls *et al.*, which seeks to produce rectangles of a given [aspect ratio](#squarify_ratio).\n\n# d3.treemapResquarify(node, x0, y0, x1, y1) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/resquarify.js), [Examples](https://observablehq.com/@d3/animated-treemap)\n\nLike [d3.treemapSquarify](#treemapSquarify), except preserves the topology (node adjacencies) of the previous layout computed by d3.treemapResquarify, if there is one and it used the same [target aspect ratio](#squarify_ratio). This tiling method is good for animating changes to treemaps because it only changes node sizes and not their relative positions, thus avoiding distracting shuffling and occlusion. The downside of a stable update, however, is a suboptimal layout for subsequent updates: only the first layout uses the Bruls *et al.* squarified algorithm.\n\n# squarify.ratio(ratio) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/squarify.js), [Examples](https://observablehq.com/@d3/treemap)\n\nSpecifies the desired aspect ratio of the generated rectangles. The *ratio* must be specified as a number greater than or equal to one. Note that the orientation of the generated rectangles (tall or wide) is not implied by the ratio; for example, a ratio of two will attempt to produce a mixture of rectangles whose *width*:*height* ratio is either 2:1 or 1:2. (However, you can approximately achieve this result by generating a square treemap at different dimensions, and then [stretching the treemap](https://observablehq.com/@d3/stretched-treemap) to the desired aspect ratio.) Furthermore, the specified *ratio* is merely a hint to the tiling algorithm; the rectangles are not guaranteed to have the specified aspect ratio. If not specified, the aspect ratio defaults to the golden ratio, φ = (1 + sqrt(5)) / 2, per [Kong *et al.*](http://vis.stanford.edu/papers/perception-treemaps)\n\n### Partition\n\n[\"Partition\"](https://observablehq.com/@d3/icicle)\n\nThe **partition layout** produces adjacency diagrams: a space-filling variant of a node-link tree diagram. Rather than drawing a link between parent and child in the hierarchy, nodes are drawn as solid areas (either arcs or rectangles), and their placement relative to other nodes reveals their position in the hierarchy. The size of the nodes encodes a quantitative dimension that would be difficult to show in a node-link diagram.\n\n# d3.partition() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/partition.js), [Examples](https://observablehq.com/@d3/icicle)\n\nCreates a new partition layout with the default settings.\n\n# partition(root)\n\nLays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants:\n\n* *node*.x0 - the left edge of the rectangle\n* *node*.y0 - the top edge of the rectangle\n* *node*.x1 - the right edge of the rectangle\n* *node*.y1 - the bottom edge of the rectangle\n\nYou must call [*root*.sum](#node_sum) before passing the hierarchy to the partition layout. You probably also want to call [*root*.sort](#node_sort) to order the hierarchy before computing the layout.\n\n# partition.size([size])\n\nIf *size* is specified, sets this partition layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this partition layout. If *size* is not specified, returns the current size, which defaults to [1, 1].\n\n# partition.round([round])\n\nIf *round* is specified, enables or disables rounding according to the given boolean and returns this partition layout. If *round* is not specified, returns the current rounding state, which defaults to false.\n\n# partition.padding([padding])\n\nIf *padding* is specified, sets the padding to the specified number and returns this partition layout. If *padding* is not specified, returns the current padding, which defaults to zero. The padding is used to separate a node’s adjacent children.\n\n### Pack\n\n[\"Circle-Packing\"](https://observablehq.com/@d3/circle-packing)\n\nEnclosure diagrams use containment (nesting) to represent a hierarchy. The size of the leaf circles encodes a quantitative dimension of the data. The enclosing circles show the approximate cumulative size of each subtree, but due to wasted space there is some distortion; only the leaf nodes can be compared accurately. Although [circle packing](http://en.wikipedia.org/wiki/Circle_packing) does not use space as efficiently as a [treemap](#treemap), the “wasted” space more prominently reveals the hierarchical structure.\n\n# d3.pack() · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/pack/index.js), [Examples](https://observablehq.com/@d3/circle-packing)\n\nCreates a new pack layout with the default settings.\n\n# pack(root)\n\nLays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants:\n\n* *node*.x - the *x*-coordinate of the circle’s center\n* *node*.y - the *y*-coordinate of the circle’s center\n* *node*.r - the radius of the circle\n\nYou must call [*root*.sum](#node_sum) before passing the hierarchy to the pack layout. You probably also want to call [*root*.sort](#node_sort) to order the hierarchy before computing the layout.\n\n# pack.radius([radius])\n\nIf *radius* is specified, sets the pack layout’s radius accessor to the specified function and returns this pack layout. If *radius* is not specified, returns the current radius accessor, which defaults to null. If the radius accessor is null, the radius of each leaf circle is derived from the leaf *node*.value (computed by [*node*.sum](#node_sum)); the radii are then scaled proportionally to fit the [layout size](#pack_size). If the radius accessor is not null, the radius of each leaf circle is specified exactly by the function.\n\n# pack.size([size])\n\nIf *size* is specified, sets this pack layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this pack layout. If *size* is not specified, returns the current size, which defaults to [1, 1].\n\n# pack.padding([padding])\n\nIf *padding* is specified, sets this pack layout’s padding accessor to the specified number or function and returns this pack layout. If *padding* is not specified, returns the current padding accessor, which defaults to the constant zero. When siblings are packed, tangent siblings will be separated by approximately the specified padding; the enclosing parent circle will also be separated from its children by approximately the specified padding. If an [explicit radius](#pack_radius) is not specified, the padding is approximate because a two-pass algorithm is needed to fit within the [layout size](#pack_size): the circles are first packed without padding; a scaling factor is computed and applied to the specified padding; and lastly the circles are re-packed with padding.\n\n# d3.packSiblings(circles) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/pack/siblings.js)\n\nPacks the specified array of *circles*, each of which must have a *circle*.r property specifying the circle’s radius. Assigns the following properties to each circle:\n\n* *circle*.x - the *x*-coordinate of the circle’s center\n* *circle*.y - the *y*-coordinate of the circle’s center\n\nThe circles are positioned according to the front-chain packing algorithm by [Wang *et al.*](https://dl.acm.org/citation.cfm?id=1124851)\n\n# d3.packEnclose(circles) · [Source](https://github.com/d3/d3-hierarchy/blob/master/src/pack/enclose.js), [Examples](https://observablehq.com/@d3/d3-packenclose)\n\nComputes the [smallest circle](https://en.wikipedia.org/wiki/Smallest-circle_problem) that encloses the specified array of *circles*, each of which must have a *circle*.r property specifying the circle’s radius, and *circle*.x and *circle*.y properties specifying the circle’s center. The enclosing circle is computed using the [Matoušek-Sharir-Welzl algorithm](http://www.inf.ethz.ch/personal/emo/PublFiles/SubexLinProg_ALG16_96.pdf). (See also [Apollonius’ Problem](https://bl.ocks.org/mbostock/751fdd637f4bc2e3f08b).)\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-hierarchy", "error": "[Circular]", "extraneous": false }, "d3-interpolate": { "_from": "d3-interpolate@1", "_id": "d3-interpolate@1.4.0", "_inBundle": false, "_integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "_location": "/d3-interpolate", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", "_shasum": "526e79e2d80daa383f9e0c1c1c7dcc0f0583e987", "_spec": "d3-interpolate@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": { "d3-color": { "_from": "d3-color@1", "_id": "d3-color@1.4.1", "_inBundle": false, "_integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", "_location": "/d3-color", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", "_shasum": "c52002bf8846ada4424d55d97982fef26eb3bc8a", "_spec": "d3-color@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Color spaces! RGB, HSL, Cubehelix, Lab and HCL (Lch).", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-color/", "jsdelivr": "dist/d3-color.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-color.js", "module": "src/index.js", "name": "d3-color", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-color.min.js", "version": "1.4.1", "readme": "# d3-color\n\nEven though your browser understands a lot about colors, it doesn’t offer much help in manipulating colors through JavaScript. The d3-color module therefore provides representations for various color spaces, allowing specification, conversion and manipulation. (Also see [d3-interpolate](https://github.com/d3/d3-interpolate) for color interpolation.)\n\nFor example, take the color named “steelblue”:\n\n```js\nvar c = d3.color(\"steelblue\"); // {r: 70, g: 130, b: 180, opacity: 1}\n```\n\nLet’s try converting it to HSL:\n\n```js\nvar c = d3.hsl(\"steelblue\"); // {h: 207.27…, s: 0.44, l: 0.4902…, opacity: 1}\n```\n\nNow rotate the hue by 90°, bump up the saturation, and format as a string for CSS:\n\n```js\nc.h += 90;\nc.s += 0.2;\nc + \"\"; // rgb(198, 45, 205)\n```\n\nTo fade the color slightly:\n\n```js\nc.opacity = 0.8;\nc + \"\"; // rgba(198, 45, 205, 0.8)\n```\n\nIn addition to the ubiquitous and machine-friendly [RGB](#rgb) and [HSL](#hsl) color space, d3-color supports color spaces that are designed for humans:\n\n* [CIELAB](#lab) (*a.k.a.* “Lab”)\n* [CIELChab](#lch) (*a.k.a.* “LCh” or “HCL”)\n* Dave Green’s [Cubehelix](#cubehelix)\n\nCubehelix features monotonic lightness, while CIELAB and its polar form CIELChab are perceptually uniform.\n\nFor additional color spaces, see:\n\n* [d3-cam16](https://github.com/d3/d3-cam16)\n* [d3-cam02](https://github.com/connorgr/d3-cam02)\n* [d3-hsv](https://github.com/d3/d3-hsv)\n* [d3-hcg](https://github.com/d3/d3-hcg)\n* [d3-hsluv](https://github.com/petulla/d3-hsluv)\n\n## Installing\n\nIf you use NPM, `npm install d3-color`. Otherwise, download the [latest release](https://github.com/d3/d3-color/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-color.v1.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\n\n```\n\n[Try d3-color in your browser.](https://observablehq.com/collection/@d3/d3-color)\n\n## API Reference\n\n# d3.color(specifier) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nParses the specified [CSS Color Module Level 3](http://www.w3.org/TR/css3-color/#colorunits) *specifier* string, returning an [RGB](#rgb) or [HSL](#hsl) color, along with [CSS Color Module Level 4 hex](https://www.w3.org/TR/css-color-4/#hex-notation) *specifier* strings. If the specifier was not valid, null is returned. Some examples:\n\n* `rgb(255, 255, 255)`\n* `rgb(10%, 20%, 30%)`\n* `rgba(255, 255, 255, 0.4)`\n* `rgba(10%, 20%, 30%, 0.4)`\n* `hsl(120, 50%, 20%)`\n* `hsla(120, 50%, 20%, 0.4)`\n* `#ffeeaa`\n* `#fea`\n* `#ffeeaa22`\n* `#fea2`\n* `steelblue`\n\nThe list of supported [named colors](http://www.w3.org/TR/SVG/types.html#ColorKeywords) is specified by CSS.\n\nNote: this function may also be used with `instanceof` to test if an object is a color instance. The same is true of color subclasses, allowing you to test whether a color is in a particular color space.\n\n# *color*.opacity\n\nThis color’s opacity, typically in the range [0, 1].\n\n# *color*.rgb() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns the [RGB equivalent](#rgb) of this color. For RGB colors, that’s `this`.\n\n# color.copy([values]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a copy of this color. If *values* is specified, any enumerable own properties of *values* are assigned to the new returned color. For example, to derive a copy of a *color* with opacity 0.5, say\n\n```js\ncolor.copy({opacity: 0.5})\n```\n\n# *color*.brighter([k]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a brighter copy of this color. If *k* is specified, it controls how much brighter the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.\n\n# *color*.darker([k]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a darker copy of this color. If *k* is specified, it controls how much darker the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.\n\n# *color*.displayable() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns true if and only if the color is displayable on standard hardware. For example, this returns false for an RGB color if any channel value is less than zero or greater than 255 when rounded, or if the opacity is not in the range [0, 1].\n\n# *color*.formatHex() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a hexadecimal string representing this color in RGB space, such as `#f7eaba`. If this color is not displayable, a suitable displayable color is returned instead. For example, RGB channel values greater than 255 are clamped to 255.\n\n# *color*.formatHsl() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a string representing this color according to the [CSS Color Module Level 3 specification](https://www.w3.org/TR/css-color-3/#hsl-color), such as `hsl(257, 50%, 80%)` or `hsla(257, 50%, 80%, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping S and L channel values to the interval [0, 100].\n\n# *color*.formatRgb() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a string representing this color according to the [CSS Object Model specification](https://drafts.csswg.org/cssom/#serialize-a-css-component-value), such as `rgb(247, 234, 186)` or `rgba(247, 234, 186, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping RGB channel values to the interval [0, 255].\n\n# *color*.toString() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nAn alias for [*color*.formatRgb](#color_formatRgb).\n\n# d3.rgb(r, g, b[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")
\n# d3.rgb(specifier)
\n# d3.rgb(color)
\n\nConstructs a new [RGB](https://en.wikipedia.org/wiki/RGB_color_model) color. The channel values are exposed as `r`, `g` and `b` properties on the returned instance. Use the [RGB color picker](http://bl.ocks.org/mbostock/78d64ca7ef013b4dcf8f) to explore this color space.\n\nIf *r*, *g* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the RGB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb). Note that unlike [*color*.rgb](#color_rgb) this method *always* returns a new instance, even if *color* is already an RGB color.\n\n# d3.hsl(h, s, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")
\n# d3.hsl(specifier)
\n# d3.hsl(color)
\n\nConstructs a new [HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [HSL color picker](http://bl.ocks.org/mbostock/debaad4fcce9bcee14cf) to explore this color space.\n\nIf *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the HSL color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to HSL. (Colors already in the HSL color space skip the conversion to RGB.)\n\n# d3.lab(l, a, b[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.lab(specifier)
\n# d3.lab(color)
\n\nConstructs a new [CIELAB](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) color. The channel values are exposed as `l`, `a` and `b` properties on the returned instance. Use the [CIELAB color picker](http://bl.ocks.org/mbostock/9f37cc207c0cb166921b) to explore this color space. The value of *l* is typically in the range [0, 100], while *a* and *b* are typically in [-160, +160].\n\nIf *l*, *a* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the CIELAB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELAB. (Colors already in the CIELAB color space skip the conversion to RGB, and colors in the HCL color space are converted directly to CIELAB.)\n\n# d3.gray(l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n\nConstructs a new [CIELAB](#lab) color with the specified *l* value and *a* = *b* = 0.\n\n# d3.hcl(h, c, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.hcl(specifier)
\n# d3.hcl(color)
\n\nEquivalent to [d3.lch](#lch), but with reversed argument order.\n\n# d3.lch(l, c, h[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.lch(specifier)
\n# d3.lch(color)
\n\nConstructs a new [CIELChab](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) color. The channel values are exposed as `l`, `c` and `h` properties on the returned instance. Use the [CIELChab color picker](http://bl.ocks.org/mbostock/3e115519a1b495e0bd95) to explore this color space. The value of *l* is typically in the range [0, 100], *c* is typically in [0, 230], and *h* is typically in [0, 360).\n\nIf *l*, *c*, and *h* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to CIELChab color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELChab. (Colors already in CIELChab color space skip the conversion to RGB, and colors in CIELAB color space are converted directly to CIELChab.)\n\n# d3.cubehelix(h, s, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/cubehelix.js \"Source\")
\n# d3.cubehelix(specifier)
\n# d3.cubehelix(color)
\n\nConstructs a new [Cubehelix](http://www.mrao.cam.ac.uk/~dag/CUBEHELIX/) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [Cubehelix color picker](http://bl.ocks.org/mbostock/ba8d75e45794c27168b5) to explore this color space.\n\nIf *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the Cubehelix color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to Cubehelix. (Colors already in the Cubehelix color space skip the conversion to RGB.)\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-color", "error": "[Circular]", "extraneous": false, "_deduped": "d3-color" } }, "deprecated": false, "description": "Interpolate numbers, colors, strings, arrays, objects, whatever!", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-interpolate/", "jsdelivr": "dist/d3-interpolate.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-interpolate.js", "module": "src/index.js", "name": "d3-interpolate", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-interpolate.min.js", "version": "1.4.0", "readme": "# d3-interpolate\n\nThis module provides a variety of interpolation methods for blending between two values. Values may be numbers, colors, strings, arrays, or even deeply-nested objects. For example:\n\n```js\nvar i = d3.interpolateNumber(10, 20);\ni(0.0); // 10\ni(0.2); // 12\ni(0.5); // 15\ni(1.0); // 20\n```\n\nThe returned function `i` is called an *interpolator*. Given a starting value *a* and an ending value *b*, it takes a parameter *t* in the domain [0, 1] and returns the corresponding interpolated value between *a* and *b*. An interpolator typically returns a value equivalent to *a* at *t* = 0 and a value equivalent to *b* at *t* = 1.\n\nYou can interpolate more than just numbers. To find the perceptual midpoint between steelblue and brown:\n\n```js\nd3.interpolateLab(\"steelblue\", \"brown\")(0.5); // \"rgb(142, 92, 109)\"\n```\n\nHere’s a more elaborate example demonstrating type inference used by [interpolate](#interpolate):\n\n```js\nvar i = d3.interpolate({colors: [\"red\", \"blue\"]}, {colors: [\"white\", \"black\"]});\ni(0.0); // {colors: [\"rgb(255, 0, 0)\", \"rgb(0, 0, 255)\"]}\ni(0.5); // {colors: [\"rgb(255, 128, 128)\", \"rgb(0, 0, 128)\"]}\ni(1.0); // {colors: [\"rgb(255, 255, 255)\", \"rgb(0, 0, 0)\"]}\n```\n\nNote that the generic value interpolator detects not only nested objects and arrays, but also color strings and numbers embedded in strings!\n\n## Installing\n\nIf you use NPM, `npm install d3-interpolate`. Otherwise, download the [latest release](https://github.com/d3/d3-interpolate/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-interpolate.v1.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\n\n\n```\n\n## API Reference\n\n# d3.interpolate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/value.js), [Examples](https://observablehq.com/@d3/d3-interpolate)\n\nReturns an interpolator between the two arbitrary values *a* and *b*. The interpolator implementation is based on the type of the end value *b*, using the following algorithm:\n\n1. If *b* is null, undefined or a boolean, use the constant *b*.\n2. If *b* is a number, use [interpolateNumber](#interpolateNumber).\n3. If *b* is a [color](https://github.com/d3/d3-color/blob/master/README.md#color) or a string coercible to a color, use [interpolateRgb](#interpolateRgb).\n4. If *b* is a [date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), use [interpolateDate](#interpolateDate).\n5. If *b* is a string, use [interpolateString](#interpolateString).\n6. If *b* is a [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) of numbers, use [interpolateNumberArray](#interpolateNumberArray).\n7. If *b* is a generic [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray), use [interpolateArray](#interpolateArray).\n8. If *b* is coercible to a number, use [interpolateNumber](#interpolateNumber).\n9. Use [interpolateObject](#interpolateObject).\n\nBased on the chosen interpolator, *a* is coerced to the suitable corresponding type.\n\n# d3.interpolateNumber(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/number.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*. The returned interpolator is equivalent to:\n\n```js\nfunction interpolator(t) {\n return a * (1 - t) + b * t;\n}\n```\n\nCaution: avoid interpolating to or from the number zero when the interpolator is used to generate a string. When very small values are stringified, they may be converted to scientific notation, which is an invalid attribute or style property value in older browsers. For example, the number `0.0000001` is converted to the string `\"1e-7\"`. This is particularly noticeable with interpolating opacity. To avoid scientific notation, start or end the transition at 1e-6: the smallest value that is not stringified in scientific notation.\n\n# d3.interpolateRound(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/round.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*; the interpolator is similar to [interpolateNumber](#interpolateNumber), except it will round the resulting value to the nearest integer.\n\n# d3.interpolateString(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/string.js), [Examples](https://observablehq.com/@d3/d3-interpolatestring)\n\nReturns an interpolator between the two strings *a* and *b*. The string interpolator finds numbers embedded in *a* and *b*, where each number is of the form understood by JavaScript. A few examples of numbers that will be detected within a string: `-1`, `42`, `3.14159`, and `6.0221413e+23`.\n\nFor each number embedded in *b*, the interpolator will attempt to find a corresponding number in *a*. If a corresponding number is found, a numeric interpolator is created using [interpolateNumber](#interpolateNumber). The remaining parts of the string *b* are used as a template: the static parts of the string *b* remain constant for the interpolation, with the interpolated numeric values embedded in the template.\n\nFor example, if *a* is `\"300 12px sans-serif\"`, and *b* is `\"500 36px Comic-Sans\"`, two embedded numbers are found. The remaining static parts (of string *b*) are a space between the two numbers (`\" \"`), and the suffix (`\"px Comic-Sans\"`). The result of the interpolator at *t* = 0.5 is `\"400 24px Comic-Sans\"`.\n\n# d3.interpolateDate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/date.js), [Examples](https://observablehq.com/@d3/d3-interpolatedate)\n\nReturns an interpolator between the two [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) *a* and *b*.\n\nNote: **no defensive copy** of the returned date is created; the same Date instance is returned for every evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/array.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two arrays *a* and *b*. If *b* is a typed array (e.g., Float64Array), [interpolateNumberArray](#interpolateNumberArray) is called instead.\n\nInternally, an array template is created that is the same length as *b*. For each element in *b*, if there exists a corresponding element in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such element, the static value from *b* is used in the template. Then, for the given parameter *t*, the template’s embedded interpolators are evaluated. The updated array template is then returned.\n\nFor example, if *a* is the array `[0, 1]` and *b* is the array `[1, 10, 100]`, then the result of the interpolator for *t* = 0.5 is the array `[0.5, 5.5, 100]`.\n\nNote: **no defensive copy** of the template array is created; modifications of the returned array may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateNumberArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/numberArray.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumberarray)\n\nReturns an interpolator between the two arrays of numbers *a* and *b*. Internally, an array template is created that is the same type and length as *b*. For each element in *b*, if there exists a corresponding element in *a*, the values are directly interpolated in the array template. If there is no such element, the static value from *b* is copied. The updated array template is then returned.\n\nNote: For performance reasons, **no defensive copy** is made of the template array and the arguments *a* and *b*; modifications of these arrays may affect subsequent evaluation of the interpolator.\n\n# d3.interpolateObject(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/object.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two objects *a* and *b*. Internally, an object template is created that has the same properties as *b*. For each property in *b*, if there exists a corresponding property in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such property, the static value from *b* is used in the template. Then, for the given parameter *t*, the template's embedded interpolators are evaluated and the updated object template is then returned.\n\nFor example, if *a* is the object `{x: 0, y: 1}` and *b* is the object `{x: 1, y: 10, z: 100}`, the result of the interpolator for *t* = 0.5 is the object `{x: 0.5, y: 5.5, z: 100}`.\n\nObject interpolation is particularly useful for *dataspace interpolation*, where data is interpolated rather than attribute values. For example, you can interpolate an object which describes an arc in a pie chart, and then use [d3.arc](https://github.com/d3/d3-shape/blob/master/README.md#arc) to compute the new SVG path data.\n\nNote: **no defensive copy** of the template object is created; modifications of the returned object may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateTransformCss(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L62), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D CSS transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateTransformSvg(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L63), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D SVG transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateZoom(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/zoom.js), [Examples](https://observablehq.com/@d3/d3-interpolatezoom)\n\nReturns an interpolator between the two views *a* and *b* of a two-dimensional plane, based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf) by Jarke J. van Wijk and Wim A.A. Nuij. Each view is defined as an array of three numbers: *cx*, *cy* and *width*. The first two coordinates *cx*, *cy* represent the center of the viewport; the last coordinate *width* represents the size of the viewport.\n\nThe returned interpolator exposes a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *x,y* space. If you want a slower or faster transition, multiply this by an arbitrary scale factor (V as described in the original paper).\n\n# d3.interpolateDiscrete(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/discrete.js), [Examples](https://observablehq.com/@d3/d3-interpolatediscrete)\n\nReturns a discrete interpolator for the given array of *values*. The returned interpolator maps *t* in [0, 1 / *n*) to *values*[0], *t* in [1 / *n*, 2 / *n*) to *values*[1], and so on, where *n* = *values*.length. In effect, this is a lightweight [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) with a fixed domain of [0, 1].\n\n### Sampling\n\n# d3.quantize(interpolator, n) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/d3-quantize)\n\nReturns *n* uniformly-spaced samples from the specified *interpolator*, where *n* is an integer greater than one. The first sample is always at *t* = 0, and the last sample is always at *t* = 1. This can be useful in generating a fixed number of samples from a given interpolator, such as to derive the range of a [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) from a [continuous interpolator](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateWarm).\n\nCaution: this method will not work with interpolators that do not return defensive copies of their output, such as [d3.interpolateArray](#interpolateArray), [d3.interpolateDate](#interpolateDate) and [d3.interpolateObject](#interpolateObject). For those interpolators, you must wrap the interpolator and create a copy for each returned value.\n\n### Color Spaces\n\n# d3.interpolateRgb(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"rgb\"\n\nOr, with a corrected [gamma](#interpolate_gamma) of 2.2:\n\n\"rgbGamma\"\n\nReturns an RGB color space interpolator between the two colors *a* and *b* with a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in RGB; they will be converted to RGB using [d3.rgb](https://github.com/d3/d3-color/blob/master/README.md#rgb). The return value of the interpolator is an RGB string.\n\n# d3.interpolateRgbBasis(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L54), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). Implicit control points are generated such that the interpolator returns *colors*[0] at *t* = 0 and *colors*[*colors*.length - 1] at *t* = 1. Opacity interpolation is not currently supported. See also [d3.interpolateBasis](#interpolateBasis), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateRgbBasisClosed(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L55), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). The control points are implicitly repeated such that the resulting spline has cyclical C² continuity when repeated around *t* in [0,1]; this is useful, for example, to create cyclical color scales. Opacity interpolation is not currently supported. See also [d3.interpolateBasisClosed](#interpolateBasisClosed), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateHsl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hsl\"\n\nReturns an HSL color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in HSL; they will be converted to HSL using [d3.hsl](https://github.com/d3/d3-color/blob/master/README.md#hsl). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHslLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hslLong\"\n\nLike [interpolateHsl](#interpolateHsl), but does not use the shortest path between hues.\n\n# d3.interpolateLab(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/lab.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"lab\"\n\nReturns a [CIELAB color space](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELAB; they will be converted to CIELAB using [d3.lab](https://github.com/d3/d3-color/blob/master/README.md#lab). The return value of the interpolator is an RGB string.\n\n# d3.interpolateHcl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hcl\"\n\nReturns a [CIELChab color space](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELChab; they will be converted to CIELChab using [d3.hcl](https://github.com/d3/d3-color/blob/master/README.md#hcl). If either color’s hue or chroma is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHclLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hclLong\"\n\nLike [interpolateHcl](#interpolateHcl), but does not use the shortest path between hues.\n\n# d3.interpolateCubehelix(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelix\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGamma\"\n\nReturns a Cubehelix color space interpolator between the two colors *a* and *b* using a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in Cubehelix; they will be converted to Cubehelix using [d3.cubehelix](https://github.com/d3/d3-color/blob/master/README.md#cubehelix). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateCubehelixLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js#L29), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelixLong\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGammaLong\"\n\nLike [interpolateCubehelix](#interpolateCubehelix), but does not use the shortest path between hues.\n\n# interpolate.gamma(gamma)\n\nGiven that *interpolate* is one of [interpolateRgb](#interpolateRgb), [interpolateCubehelix](#interpolateCubehelix) or [interpolateCubehelixLong](#interpolateCubehelixLong), returns a new interpolator factory of the same type using the specified *gamma*. For example, to interpolate from purple to orange with a gamma of 2.2 in RGB space:\n\n```js\nvar interpolator = d3.interpolateRgb.gamma(2.2)(\"purple\", \"orange\");\n```\n\nSee Eric Brasseur’s article, [Gamma error in picture scaling](https://web.archive.org/web/20160112115812/http://www.4p8.com/eric.brasseur/gamma.html), for more on gamma correction.\n\n# d3.interpolateHue(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hue.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns an interpolator between the two hue angles *a* and *b*. If either hue is NaN, the opposing value is used. The shortest path between hues is used. The return value of the interpolator is a number in [0, 360).\n\n### Splines\n\nWhereas standard interpolators blend from a starting value *a* at *t* = 0 to an ending value *b* at *t* = 1, spline interpolators smoothly blend multiple input values for *t* in [0,1] using piecewise polynomial functions. Only cubic uniform nonrational [B-splines](https://en.wikipedia.org/wiki/B-spline) are currently supported, also known as basis splines.\n\n# d3.interpolateBasis(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basis.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. Implicit control points are generated such that the interpolator returns *values*[0] at *t* = 0 and *values*[*values*.length - 1] at *t* = 1. See also [d3.curveBasis](https://github.com/d3/d3-shape/blob/master/README.md#curveBasis).\n\n# d3.interpolateBasisClosed(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basisClosed.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. The control points are implicitly repeated such that the resulting one-dimensional spline has cyclical C² continuity when repeated around *t* in [0,1]. See also [d3.curveBasisClosed](https://github.com/d3/d3-shape/blob/master/README.md#curveBasisClosed).\n\n### Piecewise\n\n# d3.piecewise(interpolate, values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/piecewise.js), [Examples](https://observablehq.com/@d3/d3-piecewise)\n\nReturns a piecewise interpolator, composing interpolators for each adjacent pair of *values*. The returned interpolator maps *t* in [0, 1 / (*n* - 1)] to *interpolate*(*values*[0], *values*[1]), *t* in [1 / (*n* - 1), 2 / (*n* - 1)] to *interpolate*(*values*[1], *values*[2]), and so on, where *n* = *values*.length. In effect, this is a lightweight [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales). For example, to blend through red, green and blue:\n\n```js\nvar interpolate = d3.piecewise(d3.interpolateRgb.gamma(2.2), [\"red\", \"green\", \"blue\"]);\n```\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-interpolate", "error": "[Circular]", "extraneous": false }, "d3-path": { "_from": "d3-path@1", "_id": "d3-path@1.0.9", "_inBundle": false, "_integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", "_location": "/d3-path", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", "_shasum": "48c050bb1fe8c262493a8caf5524e3e9591701cf", "_spec": "d3-path@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Serialize Canvas path commands to SVG.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-path/", "jsdelivr": "dist/d3-path.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-path.js", "module": "src/index.js", "name": "d3-path", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-path.min.js", "version": "1.0.9", "readme": "# d3-path\n\nSay you have some code that draws to a 2D canvas:\n\n```js\nfunction drawCircle(context, radius) {\n context.moveTo(radius, 0);\n context.arc(0, 0, radius, 0, 2 * Math.PI);\n}\n```\n\nThe d3-path module lets you take this exact code and additionally render to [SVG](http://www.w3.org/TR/SVG/paths.html). It works by [serializing](#path_toString) [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls to [SVG path data](http://www.w3.org/TR/SVG/paths.html#PathData). For example:\n\n```js\nvar context = d3.path();\ndrawCircle(context, 40);\npathElement.setAttribute(\"d\", context.toString());\n```\n\nNow code you write once can be used with both Canvas (for performance) and SVG (for convenience). For a practical example, see [d3-shape](https://github.com/d3/d3-shape).\n\n## Installing\n\nIf you use NPM, `npm install d3-path`. Otherwise, download the [latest release](https://github.com/d3/d3-path/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-path.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n## API Reference\n\n# d3.path() · [Source](https://github.com/d3/d3-path/blob/master/src/path.js), [Examples](https://observablehq.com/@d3/d3-path)\n\nConstructs a new path serializer that implements [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods).\n\n# path.moveTo(x, y)\n\nMove to the specified point ⟨*x*, *y*⟩. Equivalent to [*context*.moveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-moveto) and SVG’s [“moveto” command](http://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands).\n\n# path.closePath()\n\nEnds the current subpath and causes an automatic straight line to be drawn from the current point to the initial point of the current subpath. Equivalent to [*context*.closePath](http://www.w3.org/TR/2dcontext/#dom-context-2d-closepath) and SVG’s [“closepath” command](http://www.w3.org/TR/SVG/paths.html#PathDataClosePathCommand).\n\n# path.lineTo(x, y)\n\nDraws a straight line from the current point to the specified point ⟨*x*, *y*⟩. Equivalent to [*context*.lineTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-lineto) and SVG’s [“lineto” command](http://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands).\n\n# path.quadraticCurveTo(cpx, cpy, x, y)\n\nDraws a quadratic Bézier segment from the current point to the specified point ⟨*x*, *y*⟩, with the specified control point ⟨*cpx*, *cpy*⟩. Equivalent to [*context*.quadraticCurveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-quadraticcurveto) and SVG’s [quadratic Bézier curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataQuadraticBezierCommands).\n\n# path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x, y)\n\nDraws a cubic Bézier segment from the current point to the specified point ⟨*x*, *y*⟩, with the specified control points ⟨*cpx1*, *cpy1*⟩ and ⟨*cpx2*, *cpy2*⟩. Equivalent to [*context*.bezierCurveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-beziercurveto) and SVG’s [cubic Bézier curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataCubicBezierCommands).\n\n# path.arcTo(x1, y1, x2, y2, radius)\n\nDraws a circular arc segment with the specified *radius* that starts tangent to the line between the current point and the specified point ⟨*x1*, *y1*⟩ and ends tangent to the line between the specified points ⟨*x1*, *y1*⟩ and ⟨*x2*, *y2*⟩. If the first tangent point is not equal to the current point, a straight line is drawn between the current point and the first tangent point. Equivalent to [*context*.arcTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-arcto) and uses SVG’s [elliptical arc curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands).\n\n# path.arc(x, y, radius, startAngle, endAngle[, anticlockwise])\n\nDraws a circular arc segment with the specified center ⟨*x*, *y*⟩, *radius*, *startAngle* and *endAngle*. If *anticlockwise* is true, the arc is drawn in the anticlockwise direction; otherwise, it is drawn in the clockwise direction. If the current point is not equal to the starting point of the arc, a straight line is drawn from the current point to the start of the arc. Equivalent to [*context*.arc](http://www.w3.org/TR/2dcontext/#dom-context-2d-arc) and uses SVG’s [elliptical arc curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands).\n\n# path.rect(x, y, w, h)\n\nCreates a new subpath containing just the four points ⟨*x*, *y*⟩, ⟨*x* + *w*, *y*⟩, ⟨*x* + *w*, *y* + *h*⟩, ⟨*x*, *y* + *h*⟩, with those four points connected by straight lines, and then marks the subpath as closed. Equivalent to [*context*.rect](http://www.w3.org/TR/2dcontext/#dom-context-2d-rect) and uses SVG’s [“lineto” commands](http://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands).\n\n# path.toString()\n\nReturns the string representation of this *path* according to SVG’s [path data specification](http://www.w3.org/TR/SVG/paths.html#PathData).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-path", "error": "[Circular]", "extraneous": false }, "d3-polygon": { "_from": "d3-polygon@1", "_id": "d3-polygon@1.0.6", "_inBundle": false, "_integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==", "_location": "/d3-polygon", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-polygon@1", "name": "d3-polygon", "escapedName": "d3-polygon", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", "_shasum": "0bf8cb8180a6dc107f518ddf7975e12abbfbd38e", "_spec": "d3-polygon@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-polygon/issues" }, "deprecated": false, "description": "Operations for two-dimensional polygons.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-polygon/", "jsdelivr": "dist/d3-polygon.min.js", "keywords": [ "d3", "d3-module", "polygon", "hull", "geometry", "graphics" ], "license": "BSD-3-Clause", "main": "dist/d3-polygon.js", "module": "src/index.js", "name": "d3-polygon", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-polygon.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "sideEffects": false, "unpkg": "dist/d3-polygon.min.js", "version": "1.0.6", "readme": "# d3-polygon\n\nThis module provides a few basic geometric operations for two-dimensional polygons. Each polygon is represented as an array of two-element arrays [​[x1, y1], [x2, y2], …], and may either be closed (wherein the first and last point are the same) or open (wherein they are not). Typically polygons are in counterclockwise order, assuming a coordinate system where the origin ⟨0,0⟩ is in the top-left corner.\n\n## Installing\n\nIf you use NPM, `npm install d3-polygon`. Otherwise, download the [latest release](https://github.com/d3/d3-polygon/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-polygon.v1.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\n\n```\n\n## API Reference\n\n# d3.polygonArea(polygon) [<>](https://github.com/d3/d3-polygon/blob/master/src/area.js#L1 \"Source Code\")\n\nReturns the signed area of the specified *polygon*. If the vertices of the polygon are in counterclockwise order (assuming a coordinate system where the origin ⟨0,0⟩ is in the top-left corner), the returned area is positive; otherwise it is negative, or zero.\n\n# d3.polygonCentroid(polygon) [<>](https://github.com/d3/d3-polygon/blob/master/src/centroid.js#L1 \"Source Code\")\n\nReturns the [centroid](https://en.wikipedia.org/wiki/Centroid) of the specified *polygon*.\n\n# d3.polygonHull(points) [<>](https://github.com/d3/d3-polygon/blob/master/src/hull.js#L23 \"Source Code\")\n\n\n\nReturns the [convex hull](https://en.wikipedia.org/wiki/Convex_hull) of the specified *points* using [Andrew’s monotone chain algorithm](http://en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/Convex_hull/Monotone_chain). The returned hull is represented as an array containing a subset of the input *points* arranged in counterclockwise order. Returns null if *points* has fewer than three elements.\n\n# d3.polygonContains(polygon, point) [<>](https://github.com/d3/d3-polygon/blob/master/src/contains.js#L1 \"Source Code\")\n\nReturns true if and only if the specified *point* is inside the specified *polygon*.\n\n# d3.polygonLength(polygon) [<>](https://github.com/d3/d3-polygon/blob/master/src/length.js#L1 \"Source Code\")\n\nReturns the length of the perimeter of the specified *polygon*.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-polygon", "error": "[Circular]", "extraneous": false }, "d3-quadtree": { "_from": "d3-quadtree@1", "_id": "d3-quadtree@1.0.7", "_inBundle": false, "_integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", "_location": "/d3-quadtree", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", "_shasum": "ca8b84df7bb53763fe3c2f24bd435137f4e53135", "_spec": "d3-quadtree@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Two-dimensional recursive spatial subdivision.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-quadtree/", "jsdelivr": "dist/d3-quadtree.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-quadtree.js", "module": "src/index.js", "name": "d3-quadtree", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-quadtree.min.js", "version": "1.0.7", "readme": "# d3-quadtree\n\nA [quadtree](https://en.wikipedia.org/wiki/Quadtree) recursively partitions two-dimensional space into squares, dividing each square into four equally-sized squares. Each distinct point exists in a unique leaf [node](#nodes); coincident points are represented by a linked list. Quadtrees can accelerate various spatial operations, such as the [Barnes–Hut approximation](https://en.wikipedia.org/wiki/Barnes–Hut_simulation) for computing many-body forces, collision detection, and searching for nearby points.\n\n\n\n\n## Installing\n\nIf you use NPM, `npm install d3-quadtree`. Otherwise, download the [latest release](https://github.com/d3/d3-quadtree/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-quadtree.v1.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\n\n```\n\n## API Reference\n\n# d3.quadtree([data[, x, y]])\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/quadtree.js \"Source\")\n\nCreates a new, empty quadtree with an empty [extent](#quadtree_extent) and the default [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors. If *data* is specified, [adds](#quadtree_addAll) the specified array of data to the quadtree. This is equivalent to:\n\n```js\nvar tree = d3.quadtree()\n .addAll(data);\n```\n\nIf *x* and *y* are also specified, sets the [*x*-](#quadtree_x) and [*y*-](#quadtree_y) accessors to the specified functions before adding the specified array of data to the quadtree, equivalent to:\n\n```js\nvar tree = d3.quadtree()\n .x(x)\n .y(y)\n .addAll(data);\n```\n\n# quadtree.x([x]) [<>](https://github.com/d3/d3-quadtree/blob/master/src/x.js \"Source\")\n\nIf *x* is specified, sets the current *x*-coordinate accessor and returns the quadtree. If *x* is not specified, returns the current *x*-accessor, which defaults to:\n\n```js\nfunction x(d) {\n return d[0];\n}\n```\n\nThe *x*-acccessor is used to derive the *x*-coordinate of data when [adding](#quadtree_add) to and [removing](#quadtree_remove) from the tree. It is also used when [finding](#quadtree_find) to re-access the coordinates of data previously added to the tree; therefore, the *x*- and *y*-accessors must be consistent, returning the same value given the same input.\n\n# quadtree.y([y])\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/y.js \"Source\")\n\nIf *y* is specified, sets the current *y*-coordinate accessor and returns the quadtree. If *y* is not specified, returns the current *y*-accessor, which defaults to:\n\n```js\nfunction y(d) {\n return d[1];\n}\n```\n\nThe *y*-acccessor is used to derive the *y*-coordinate of data when [adding](#quadtree_add) to and [removing](#quadtree_remove) from the tree. It is also used when [finding](#quadtree_find) to re-access the coordinates of data previously added to the tree; therefore, the *x*- and *y*-accessors must be consistent, returning the same value given the same input.\n\n# quadtree.extent([*extent*])\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/extent.js \"Source\")\n\nIf *extent* is specified, expands the quadtree to [cover](#quadtree_cover) the specified points [[*x0*, *y0*], [*x1*, *y1*]] and returns the quadtree. If *extent* is not specified, returns the quadtree’s current extent [[*x0*, *y0*], [*x1*, *y1*]], where *x0* and *y0* are the inclusive lower bounds and *x1* and *y1* are the inclusive upper bounds, or undefined if the quadtree has no extent. The extent may also be expanded by calling [*quadtree*.cover](#quadtree_cover) or [*quadtree*.add](#quadtree_add).\n\n# quadtree.cover(x, y)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/cover.js \"Source\")\n\nExpands the quadtree to cover the specified point ⟨*x*,*y*⟩, and returns the quadtree. If the quadtree’s extent already covers the specified point, this method does nothing. If the quadtree has an extent, the extent is repeatedly doubled to cover the specified point, wrapping the [root](#quadtree_root) [node](#nodes) as necessary; if the quadtree is empty, the extent is initialized to the extent [[⌊*x*⌋, ⌊*y*⌋], [⌈*x*⌉, ⌈*y*⌉]]. (Rounding is necessary such that if the extent is later doubled, the boundaries of existing quadrants do not change due to floating point error.)\n\n# quadtree.add(datum)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/add.js \"Source\")\n\nAdds the specified *datum* to the quadtree, deriving its coordinates ⟨*x*,*y*⟩ using the current [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors, and returns the quadtree. If the new point is outside the current [extent](#quadtree_extent) of the quadtree, the quadtree is automatically expanded to [cover](#quadtree_cover) the new point.\n\n# quadtree.addAll(data)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/add.js \"Source\")\n\nAdds the specified array of *data* to the quadtree, deriving each element’s coordinates ⟨*x*,*y*⟩ using the current [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors, and return this quadtree. This is approximately equivalent to calling [*quadtree*.add](#quadtree_add) repeatedly:\n\n```js\nfor (var i = 0, n = data.length; i < n; ++i) {\n quadtree.add(data[i]);\n}\n```\n\nHowever, this method results in a more compact quadtree because the extent of the *data* is computed first before adding the data.\n\n# quadtree.remove(datum)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/remove.js \"Source\")\n\nRemoves the specified *datum* from the quadtree, deriving its coordinates ⟨*x*,*y*⟩ using the current [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors, and returns the quadtree. If the specified *datum* does not exist in this quadtree, this method does nothing.\n\n# quadtree.removeAll(data)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/remove.js \"Source\")\n\nRemoves the specified *data* from the quadtree, deriving their coordinates ⟨*x*,*y*⟩ using the current [*x*-](#quadtree_x) and [*y*-](#quadtree_y)accessors, and returns the quadtree. If a specified datum does not exist in this quadtree, it is ignored.\n\n# quadtree.copy()\n\nReturns a copy of the quadtree. All [nodes](#nodes) in the returned quadtree are identical copies of the corresponding node in the quadtree; however, any data in the quadtree is shared by reference and not copied.\n\n# quadtree.root()\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/root.js \"Source\")\n\nReturns the root [node](#nodes) of the quadtree.\n\n# quadtree.data()\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/data.js \"Source\")\n\nReturns an array of all data in the quadtree.\n\n# quadtree.size()\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/size.js \"Source\")\n\nReturns the total number of data in the quadtree.\n\n# quadtree.find(x, y[, radius])\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/find.js \"Source\")\n\nReturns the datum closest to the position ⟨*x*,*y*⟩ with the given search *radius*. If *radius* is not specified, it defaults to infinity. If there is no datum within the search area, returns undefined.\n\n# quadtree.visit(callback)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/visit.js \"Source\")\n\nVisits each [node](#nodes) in the quadtree in pre-order traversal, invoking the specified *callback* with arguments *node*, *x0*, *y0*, *x1*, *y1* for each node, where *node* is the node being visited, ⟨*x0*, *y0*⟩ are the lower bounds of the node, and ⟨*x1*, *y1*⟩ are the upper bounds, and returns the quadtree. (Assuming that positive *x* is right and positive *y* is down, as is typically the case in Canvas and SVG, ⟨*x0*, *y0*⟩ is the top-left corner and ⟨*x1*, *y1*⟩ is the lower-right corner; however, the coordinate system is arbitrary, so more formally *x0* <= *x1* and *y0* <= *y1*.)\n\nIf the *callback* returns true for a given node, then the children of that node are not visited; otherwise, all child nodes are visited. This can be used to quickly visit only parts of the tree, for example when using the [Barnes–Hut approximation](https://en.wikipedia.org/wiki/Barnes–Hut_simulation). Note, however, that child quadrants are always visited in sibling order: top-left, top-right, bottom-left, bottom-right. In cases such as [search](#quadtree_find), visiting siblings in a specific order may be faster.\n\n# quadtree.visitAfter(callback)\n [<>](https://github.com/d3/d3-quadtree/blob/master/src/visitAfter.js \"Source\")\n\nVisits each [node](#nodes) in the quadtree in post-order traversal, invoking the specified *callback* with arguments *node*, *x0*, *y0*, *x1*, *y1* for each node, where *node* is the node being visited, ⟨*x0*, *y0*⟩ are the lower bounds of the node, and ⟨*x1*, *y1*⟩ are the upper bounds, and returns the quadtree. (Assuming that positive *x* is right and positive *y* is down, as is typically the case in Canvas and SVG, ⟨*x0*, *y0*⟩ is the top-left corner and ⟨*x1*, *y1*⟩ is the lower-right corner; however, the coordinate system is arbitrary, so more formally *x0* <= *x1* and *y0* <= *y1*.) Returns *root*.\n\n### Nodes\n\nInternal nodes of the quadtree are represented as four-element arrays in left-to-right, top-to-bottom order:\n\n* `0` - the top-left quadrant, if any.\n* `1` - the top-right quadrant, if any.\n* `2` - the bottom-left quadrant, if any.\n* `3` - the bottom-right quadrant, if any.\n\nA child quadrant may be undefined if it is empty.\n\nLeaf nodes are represented as objects with the following properties:\n\n* `data` - the data associated with this point, as passed to [*quadtree*.add](#quadtree_add).\n* `next` - the next datum in this leaf, if any.\n\nThe `length` property may be used to distinguish leaf nodes from internal nodes: it is undefined for leaf nodes, and 4 for internal nodes. For example, to iterate over all data in a leaf node:\n\n```js\nif (!node.length) do console.log(node.data); while (node = node.next);\n```\n\nThe point’s *x*- and *y*-coordinates **must not be modified** while the point is in the quadtree. To update a point’s position, [remove](#quadtree_remove) the point and then re-[add](#quadtree_add) it to the quadtree at the new position. Alternatively, you may discard the existing quadtree entirely and create a new one from scratch; this may be more efficient if many of the points have moved.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-quadtree", "error": "[Circular]", "extraneous": false }, "d3-random": { "_from": "d3-random@1", "_id": "d3-random@1.1.2", "_inBundle": false, "_integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", "_location": "/d3-random", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-random@1", "name": "d3-random", "escapedName": "d3-random", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", "_shasum": "2833be7c124360bf9e2d3fd4f33847cfe6cab291", "_spec": "d3-random@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-random/issues" }, "deprecated": false, "description": "Generate random numbers from various distributions.", "devDependencies": { "d3-array": "1", "eslint": "5", "rollup": "0.64", "rollup-plugin-terser": "1", "seedrandom": "2", "tape": "4" }, "homepage": "https://d3js.org/d3-random/", "jsdelivr": "dist/d3-random.min.js", "keywords": [ "d3", "d3-module", "random", "rng" ], "license": "BSD-3-Clause", "main": "dist/d3-random.js", "module": "src/index.js", "name": "d3-random", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-random.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src test" }, "unpkg": "dist/d3-random.min.js", "version": "1.1.2", "readme": "# d3-random\n\nGenerate random numbers from various distributions.\n\n## Installing\n\nIf you use NPM, `npm install d3-random`. Otherwise, download the [latest release](https://github.com/d3/d3-random/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-random.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-random in your browser.](https://runkit.com/npm/d3-random)\n\n## API Reference\n\n# d3.randomUniform([min, ][max]) [<>](https://github.com/d3/d3-random/blob/master/src/uniform.js \"Source\")\n\nReturns a function for generating random numbers with a [uniform distribution](https://en.wikipedia.org/wiki/Uniform_distribution_\\(continuous\\)). The minimum allowed value of a returned number is *min*, and the maximum is *max*. If *min* is not specified, it defaults to 0; if *max* is not specified, it defaults to 1. For example:\n\n```js\nd3.randomUniform(6)(); // Returns a number greater than or equal to 0 and less than 6.\nd3.randomUniform(1, 5)(); // Returns a number greater than or equal to 1 and less than 5.\n```\n\nNote that you can also use the built-in [Math.random](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/random) to generate uniform distributions directly. For example, to generate a random integer between 0 and 99 (inclusive), you can say `Math.random() * 100 | 0`.\n\n# d3.randomNormal([mu][, sigma]) [<>](https://github.com/d3/d3-random/blob/master/src/normal.js \"Source\")\n\nReturns a function for generating random numbers with a [normal (Gaussian) distribution](https://en.wikipedia.org/wiki/Normal_distribution). The expected value of the generated numbers is *mu*, with the given standard deviation *sigma*. If *mu* is not specified, it defaults to 0; if *sigma* is not specified, it defaults to 1.\n\n# d3.randomLogNormal([mu][, sigma]) [<>](https://github.com/d3/d3-random/blob/master/src/logNormal.js \"Source\")\n\nReturns a function for generating random numbers with a [log-normal distribution](https://en.wikipedia.org/wiki/Log-normal_distribution). The expected value of the random variable’s natural logarithm is *mu*, with the given standard deviation *sigma*. If *mu* is not specified, it defaults to 0; if *sigma* is not specified, it defaults to 1.\n\n# d3.randomBates(n) [<>](https://github.com/d3/d3-random/blob/master/src/bates.js \"Source\")\n\nReturns a function for generating random numbers with a [Bates distribution](https://en.wikipedia.org/wiki/Bates_distribution) with *n* independent variables.\n\n# d3.randomIrwinHall(n) [<>](https://github.com/d3/d3-random/blob/master/src/irwinHall.js \"Source\")\n\nReturns a function for generating random numbers with an [Irwin–Hall distribution](https://en.wikipedia.org/wiki/Irwin–Hall_distribution) with *n* independent variables.\n\n# d3.randomExponential(lambda) [<>](https://github.com/d3/d3-random/blob/master/src/exponential.js \"Source\")\n\nReturns a function for generating random numbers with an [exponential distribution](https://en.wikipedia.org/wiki/Exponential_distribution) with the rate *lambda*; equivalent to time between events in a [Poisson process](https://en.wikipedia.org/wiki/Poisson_point_process) with a mean of 1 / *lambda*. For example, exponential(1/40) generates random times between events where, on average, one event occurs every 40 units of time.\n\n# random.source(source)\n\nReturns the same type of function for generating random numbers but where the given random number generator *source* is used as the source of randomness instead of Math.random. The given random number generator must implement the same interface as Math.random and only return values in the range [0, 1). This is useful when a seeded random number generator is preferable to Math.random. For example:\n\n```js\nvar d3 = require(\"d3-random\"),\n seedrandom = require(\"seedrandom\"),\n random = d3.randomNormal.source(seedrandom(\"a22ebc7c488a3a47\"))(0, 1);\n\nrandom(); // 0.9744193494813501\n```\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-random", "error": "[Circular]", "extraneous": false }, "d3-scale": { "_from": "d3-scale@2", "_id": "d3-scale@2.2.2", "_inBundle": false, "_integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", "_location": "/d3-scale", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-scale@2", "name": "d3-scale", "escapedName": "d3-scale", "rawSpec": "2", "saveSpec": "[Circular]", "fetchSpec": "2" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", "_shasum": "4e880e0b2745acaaddd3ede26a9e908a9e17b81f", "_spec": "d3-scale@2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-scale/issues" }, "dependencies": { "d3-array": { "_from": "d3-array@1", "_id": "d3-array@1.2.4", "_inBundle": false, "_integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", "_location": "/d3-array", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "_shasum": "635ce4d5eea759f6f605863dbcfc30edc737f71f", "_spec": "d3-array@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Array manipulation, ordering, searching, summarizing, etc.", "devDependencies": "[Circular]", "homepage": "https://d3js.org/d3-array/", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-array.js", "module": "src/index.js", "name": "d3-array", "repository": "[Circular]", "scripts": "[Circular]", "unpkg": "dist/d3-array.min.js", "version": "1.2.4", "readme": "# d3-array\n\nData in JavaScript is often represented by an array, and so one tends to manipulate arrays when visualizing or analyzing data. Some common forms of manipulation include taking a contiguous slice (subset) of an array, filtering an array using a predicate function, and mapping an array to a parallel set of values using a transform function. Before looking at the set of utilities that this module provides, familiarize yourself with the powerful [array methods built-in to JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype).\n\nJavaScript includes **mutation methods** that modify the array:\n\n* [*array*.pop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop) - Remove the last element from the array.\n* [*array*.push](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) - Add one or more elements to the end of the array.\n* [*array*.reverse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse) - Reverse the order of the elements of the array.\n* [*array*.shift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift) - Remove the first element from the array.\n* [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) - Sort the elements of the array.\n* [*array*.splice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) - Add or remove elements from the array.\n* [*array*.unshift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift) - Add one or more elements to the front of the array.\n\nThere are also **access methods** that return some representation of the array:\n\n* [*array*.concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) - Join the array with other array(s) or value(s).\n* [*array*.join](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join) - Join all elements of the array into a string.\n* [*array*.slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) - Extract a section of the array.\n* [*array*.indexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) - Find the first occurrence of a value within the array.\n* [*array*.lastIndexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - Find the last occurrence of a value within the array.\n\nAnd finally **iteration methods** that apply functions to elements in the array:\n\n* [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) - Create a new array with only the elements for which a predicate is true.\n* [*array*.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) - Call a function for each element in the array.\n* [*array*.every](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every) - See if every element in the array satisfies a predicate.\n* [*array*.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) - Create a new array with the result of calling a function on every element in the array.\n* [*array*.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some) - See if at least one element in the array satisfies a predicate.\n* [*array*.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) - Apply a function to reduce the array to a single value (from left-to-right).\n* [*array*.reduceRight](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight) - Apply a function to reduce the array to a single value (from right-to-left).\n\n## Installing\n\nIf you use NPM, `npm install d3-array`. Otherwise, download the [latest release](https://github.com/d3/d3-array/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-array.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-array in your browser.](https://tonicdev.com/npm/d3-array)\n\n## API Reference\n\n* [Statistics](#statistics)\n* [Search](#search)\n* [Transformations](#transformations)\n* [Histograms](#histograms)\n* [Histogram Thresholds](#histogram-thresholds)\n\n### Statistics\n\nMethods for computing basic summary statistics.\n\n# d3.min(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/min.js \"Source\")\n\nReturns the minimum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the minimum value.\n\nUnlike the built-in [Math.min](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/min), this method ignores undefined, null and NaN values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the minimum of the strings [“20”, “3”] is “20”, while the minimum of the numbers [20, 3] is 3.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.max(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/max.js \"Source\")\n\nReturns the maximum value in the given *array* using natural order. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the maximum value.\n\nUnlike the built-in [Math.max](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/max), this method ignores undefined values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the maximum of the strings [“20”, “3”] is “3”, while the maximum of the numbers [20, 3] is 20.\n\nSee also [scan](#scan) and [extent](#extent).\n\n# d3.extent(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/extent.js \"Source\")\n\nReturns the [minimum](#min) and [maximum](#max) value in the given *array* using natural order. If the array is empty, returns [undefined, undefined]. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the extent.\n\n# d3.sum(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/sum.js \"Source\")\n\nReturns the sum of the given *array* of numbers. If the array is empty, returns 0. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the sum. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.mean(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/mean.js \"Source\")\n\nReturns the mean of the given *array* of numbers. If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the mean. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.median(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/median.js \"Source\")\n\nReturns the median of the given *array* of numbers using the [R-7 method](https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample). If the array is empty, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the median. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.quantile(array, p[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/quantile.js \"Source\")\n\nReturns the *p*-quantile of the given **sorted** *array* of numbers, where *p* is a number in the range [0, 1]. For example, the median can be computed using *p* = 0.5, the first quartile at *p* = 0.25, and the third quartile at *p* = 0.75. This particular implementation uses the [R-7 method](http://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population), which is the default for the R programming language and Excel. For example:\n\n```js\nvar a = [0, 10, 30];\nd3.quantile(a, 0); // 0\nd3.quantile(a, 0.5); // 10\nd3.quantile(a, 1); // 30\nd3.quantile(a, 0.25); // 5\nd3.quantile(a, 0.75); // 20\nd3.quantile(a, 0.1); // 2\n```\n\nAn optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the quantile.\n\n# d3.variance(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/variance.js \"Source\")\n\nReturns an [unbiased estimator of the population variance](http://mathworld.wolfram.com/SampleVariance.html) of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the variance. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n# d3.deviation(array[, accessor]) [<>](https://github.com/d3/d3-array/blob/master/src/deviation.js \"Source\")\n\nReturns the standard deviation, defined as the square root of the [bias-corrected variance](#variance), of the given *array* of numbers. If the array has fewer than two values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the standard deviation. This method ignores undefined and NaN values; this is useful for ignoring missing data.\n\n### Search\n\nMethods for searching arrays for a specific element.\n\n# d3.scan(array[, comparator]) [<>](https://github.com/d3/d3-array/blob/master/src/scan.js \"Source\")\n\nPerforms a linear scan of the specified *array*, returning the index of the least element according to the specified *comparator*. If the given *array* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns undefined. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:\n\n```js\nvar array = [{foo: 42}, {foo: 91}];\nd3.scan(array, function(a, b) { return a.foo - b.foo; }); // 0\nd3.scan(array, function(a, b) { return b.foo - a.foo; }); // 1\n```\n\nThis function is similar to [min](#min), except it allows the use of a comparator rather than an accessor and it returns the index instead of the accessed value. See also [bisect](#bisect).\n\n# d3.bisectLeft(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nReturns the insertion point for *x* in *array* to maintain sorted order. The arguments *lo* and *hi* may be used to specify a subset of the array which should be considered; by default the entire array is used. If *x* is already present in *array*, the insertion point will be before (to the left of) any existing entries. The return value is suitable for use as the first argument to [splice](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice) assuming that *array* is already sorted. The returned insertion point *i* partitions the *array* into two halves so that all *v* < *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* >= *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisect(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js \"Source\")
\n# d3.bisectRight(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisect.js#L6 \"Source\")\n\nSimilar to [bisectLeft](#bisectLeft), but returns an insertion point which comes after (to the right of) any existing entries of *x* in *array*. The returned insertion point *i* partitions the *array* into two halves so that all *v* <= *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* > *x* for *v* in *array*.slice(*i*, *hi*) for the right side.\n\n# d3.bisector(accessor) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n
# d3.bisector(comparator) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js \"Source\")\n\nReturns a new bisector using the specified *accessor* or *comparator* function. This method can be used to bisect arrays of objects instead of being limited to simple arrays of primitives. For example, given the following array of objects:\n\n```js\nvar data = [\n {date: new Date(2011, 1, 1), value: 0.5},\n {date: new Date(2011, 2, 1), value: 0.6},\n {date: new Date(2011, 3, 1), value: 0.7},\n {date: new Date(2011, 4, 1), value: 0.8}\n];\n```\n\nA suitable bisect function could be constructed as:\n\n```js\nvar bisectDate = d3.bisector(function(d) { return d.date; }).right;\n```\n\nThis is equivalent to specifying a comparator:\n\n```js\nvar bisectDate = d3.bisector(function(d, x) { return d.date - x; }).right;\n```\n\nAnd then applied as *bisectDate*(*array*, *date*), returning an index. Note that the comparator is always passed the search value *x* as the second argument. Use a comparator rather than an accessor if you want values to be sorted in an order different than natural order, such as in descending rather than ascending order.\n\n# bisector.left(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L6 \"Source\")\n\nEquivalent to [bisectLeft](#bisectLeft), but uses this bisector’s associated comparator.\n\n# bisector.right(array, x[, lo[, hi]]) [<>](https://github.com/d3/d3-array/blob/master/src/bisector.js#L16 \"Source\")\n\nEquivalent to [bisectRight](#bisectRight), but uses this bisector’s associated comparator.\n\n# d3.ascending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/ascending.js \"Source\")\n\nReturns -1 if *a* is less than *b*, or 1 if *a* is greater than *b*, or 0. This is the comparator function for natural order, and can be used in conjunction with the built-in [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) method to arrange elements in ascending order. It is implemented as:\n\n```js\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n# d3.descending(a, b) [<>](https://github.com/d3/d3-array/blob/master/src/descending.js \"Source\")\n\nReturns -1 if *a* is greater than *b*, or 1 if *a* is less than *b*, or 0. This is the comparator function for reverse natural order, and can be used in conjunction with the built-in array sort method to arrange elements in descending order. It is implemented as:\n\n```js\nfunction descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n```\n\nNote that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.\n\n### Transformations\n\nMethods for transforming arrays and for generating new arrays.\n\n# d3.cross(a, b[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/cross.js \"Source\")\n\nReturns the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) of the two arrays *a* and *b*. For each element *i* in the specified array *a* and each element *j* in the specified array *b*, in order, invokes the specified *reducer* function passing the element *i* and element *j*. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.cross([1, 2], [\"x\", \"y\"]); // returns [[1, \"x\"], [1, \"y\"], [2, \"x\"], [2, \"y\"]]\nd3.cross([1, 2], [\"x\", \"y\"], (a, b) => a + b); // returns [\"1x\", \"1y\", \"2x\", \"2y\"]\n```\n\n# d3.merge(arrays) [<>](https://github.com/d3/d3-array/blob/master/src/merge.js \"Source\")\n\nMerges the specified *arrays* into a single array. This method is similar to the built-in array concat method; the only difference is that it is more convenient when you have an array of arrays.\n\n```js\nd3.merge([[1], [2, 3]]); // returns [1, 2, 3]\n```\n\n# d3.pairs(array[, reducer]) [<>](https://github.com/d3/d3-array/blob/master/src/pairs.js \"Source\")\n\nFor each adjacent pair of elements in the specified *array*, in order, invokes the specified *reducer* function passing the element *i* and element *i* - 1. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:\n\n```js\nfunction pair(a, b) {\n return [a, b];\n}\n```\n\nFor example:\n\n```js\nd3.pairs([1, 2, 3, 4]); // returns [[1, 2], [2, 3], [3, 4]]\nd3.pairs([1, 2, 3, 4], (a, b) => b - a); // returns [1, 1, 1];\n```\n\nIf the specified array has fewer than two elements, returns the empty array.\n\n# d3.permute(array, indexes) [<>](https://github.com/d3/d3-array/blob/master/src/permute.js \"Source\")\n\nReturns a permutation of the specified *array* using the specified array of *indexes*. The returned array contains the corresponding element in array for each index in indexes, in order. For example, permute([\"a\", \"b\", \"c\"], [1, 2, 0])\nreturns [\"b\", \"c\", \"a\"]. It is acceptable for the array of indexes to be a different length from the array of elements, and for indexes to be duplicated or omitted.\n\nThis method can also be used to extract the values from an object into an array with a stable order. Extracting keyed values in order can be useful for generating data arrays in nested selections. For example:\n\n```js\nvar object = {yield: 27, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n fields = [\"site\", \"variety\", \"yield\"];\n\nd3.permute(object, fields); // returns [\"University Farm\", \"Manchuria\", 27]\n```\n\n# d3.shuffle(array[, start[, stop]]) [<>](https://github.com/d3/d3-array/blob/master/src/shuffle.js \"Source\")\n\nRandomizes the order of the specified *array* in-place using the [Fisher–Yates shuffle](https://bost.ocks.org/mike/shuffle/) and returns the *array*. If *start* is specified, it is the starting index (inclusive) of the *array* to shuffle; if *start* is not specified, it defaults to zero. If *stop* is specified, it is the ending index (exclusive) of the *array* to shuffle; if *stop* is not specified, it defaults to *array*.length. For example, to shuffle the first ten elements of the *array*: shuffle(*array*, 0, 10).\n\n# d3.ticks(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js \"Source\")\n\nReturns an array of approximately *count* + 1 uniformly-spaced, nicely-rounded values between *start* and *stop* (inclusive). Each value is a power of ten multiplied by 1, 2 or 5. See also [d3.tickIncrement](#tickIncrement), [d3.tickStep](#tickStep) and [*linear*.ticks](https://github.com/d3/d3-scale/blob/master/README.md#linear_ticks).\n\nTicks are inclusive in the sense that they may include the specified *start* and *stop* values if (and only if) they are exact, nicely-rounded values consistent with the inferred [step](#tickStep). More formally, each returned tick *t* satisfies *start* ≤ *t* and *t* ≤ *stop*.\n\n# d3.tickIncrement(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nLike [d3.tickStep](#tickStep), except requires that *start* is always less than or equal to *step*, and if the tick step for the given *start*, *stop* and *count* would be less than one, returns the negative inverse tick step instead. This method is always guaranteed to return an integer, and is used by [d3.ticks](#ticks) to avoid guarantee that the returned tick values are represented as precisely as possible in IEEE 754 floating point.\n\n# d3.tickStep(start, stop, count) [<>](https://github.com/d3/d3-array/blob/master/src/ticks.js#L16 \"Source\")\n\nReturns the difference between adjacent tick values if the same arguments were passed to [d3.ticks](#ticks): a nicely-rounded value that is a power of ten multiplied by 1, 2 or 5. Note that due to the limited precision of IEEE 754 floating point, the returned value may not be exact decimals; use [d3-format](https://github.com/d3/d3-format) to format numbers for human consumption.\n\n# d3.range([start, ]stop[, step]) [<>](https://github.com/d3/d3-array/blob/master/src/range.js \"Source\")\n\nReturns an array containing an arithmetic progression, similar to the Python built-in [range](http://docs.python.org/library/functions.html#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.ticks](#ticks) for nicely-rounded values.)\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\nd3.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; see also [linear.tickFormat](https://github.com/d3/d3-scale/blob/master/README.md#linear_tickFormat) in [d3-scale](https://github.com/d3/d3-scale).\n\nLikewise, if the returned array should have a specific length, consider using [array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) on an integer range. For example:\n\n```js\nd3.range(0, 1, 1 / 49); // BAD: returns 50 elements!\nd3.range(49).map(function(d) { return d / 49; }); // GOOD: returns 49 elements.\n```\n\n# d3.transpose(matrix) [<>](https://github.com/d3/d3-array/blob/master/src/transpose.js \"Source\")\n\nUses the [zip](#zip) operator as a two-dimensional [matrix transpose](http://en.wikipedia.org/wiki/Transpose).\n\n# d3.zip(arrays…) [<>](https://github.com/d3/d3-array/blob/master/src/zip.js \"Source\")\n\nReturns an array of arrays, where the *i*th array contains the *i*th element from each of the argument *arrays*. The returned array is truncated in length to the shortest array in *arrays*. If *arrays* contains only a single array, the returned array contains one-element arrays. With no arguments, the returned array is empty.\n\n```js\nd3.zip([1, 2], [3, 4]); // returns [[1, 3], [2, 4]]\n```\n\n### Histograms\n\n[\"Histogram\"](http://bl.ocks.org/mbostock/3048450)\n\nHistograms bin many discrete samples into a smaller number of consecutive, non-overlapping intervals. They are often used to visualize the distribution of numerical data.\n\n# d3.histogram() [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js \"Source\")\n\nConstructs a new histogram generator with the default settings.\n\n# histogram(data) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L14 \"Source\")\n\nComputes the histogram for the given array of *data* samples. Returns an array of bins, where each bin is an array containing the associated elements from the input *data*. Thus, the `length` of the bin is the number of elements in that bin. Each bin has two additional attributes:\n\n* `x0` - the lower bound of the bin (inclusive).\n* `x1` - the upper bound of the bin (exclusive, except for the last bin).\n\n# histogram.value([value]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L58 \"Source\")\n\nIf *value* is specified, sets the value accessor to the specified function or constant and returns this histogram generator. If *value* is not specified, returns the current value accessor, which defaults to the identity function.\n\nWhen a histogram is [generated](#_histogram), the value accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default value accessor assumes that the input data are orderable (comparable), such as numbers or dates. If your data are not, then you should specify an accessor that returns the corresponding orderable value for a given datum.\n\nThis is similar to mapping your data to values before invoking the histogram generator, but has the benefit that the input data remains associated with the returned bins, thereby making it easier to access other fields of the data.\n\n# histogram.domain([domain]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L62 \"Source\")\n\nIf *domain* is specified, sets the domain accessor to the specified function or array and returns this histogram generator. If *domain* is not specified, returns the current domain accessor, which defaults to [extent](#extent). The histogram domain is defined as an array [*min*, *max*], where *min* is the minimum observable value and *max* is the maximum observable value; both values are inclusive. Any value outside of this domain will be ignored when the histogram is [generated](#_histogram).\n\nFor example, if you are using the the histogram in conjunction with a [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales) `x`, you might say:\n\n```js\nvar histogram = d3.histogram()\n .domain(x.domain())\n .thresholds(x.ticks(20));\n```\n\nYou can then compute the bins from an array of numbers like so:\n\n```js\nvar bins = histogram(numbers);\n```\n\nNote that the domain accessor is invoked on the materialized array of [values](#histogram_value), not on the input data array.\n\n# histogram.thresholds([count]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n
# histogram.thresholds([thresholds]) [<>](https://github.com/d3/d3-array/blob/master/src/histogram.js#L66 \"Source\")\n\nIf *thresholds* is specified, sets the [threshold generator](#histogram-thresholds) to the specified function or array and returns this histogram generator. If *thresholds* is not specified, returns the current threshold generator, which by default implements [Sturges’ formula](#thresholdSturges). (Thus by default, the histogram values must be numbers!) Thresholds are defined as an array of values [*x0*, *x1*, …]. Any value less than *x0* will be placed in the first bin; any value greater than or equal to *x0* but less than *x1* will be placed in the second bin; and so on. Thus, the [generated histogram](#_histogram) will have *thresholds*.length + 1 bins. See [histogram thresholds](#histogram-thresholds) for more information.\n\nAny threshold values outside the [domain](#histogram_domain) are ignored. The first *bin*.x0 is always equal to the minimum domain value, and the last *bin*.x1 is always equal to the maximum domain value.\n\nIf a *count* is specified instead of an array of *thresholds*, then the [domain](#histogram_domain) will be uniformly divided into approximately *count* bins; see [ticks](#ticks).\n\n### Histogram Thresholds\n\nThese functions are typically not used directly; instead, pass them to [*histogram*.thresholds](#histogram_thresholds). You may also implement your own threshold generator taking three arguments: the array of input [*values*](#histogram_value) derived from the data, and the [observable domain](#histogram_domain) represented as *min* and *max*. The generator may then return either the array of numeric thresholds or the *count* of bins; in the latter case the domain is divided uniformly into approximately *count* bins; see [ticks](#ticks).\n\n# d3.thresholdFreedmanDiaconis(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/freedmanDiaconis.js \"Source\")\n\nReturns the number of bins according to the [Freedman–Diaconis rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdScott(values, min, max) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/scott.js \"Source\")\n\nReturns the number of bins according to [Scott’s normal reference rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n\n# d3.thresholdSturges(values) [<>](https://github.com/d3/d3-array/blob/master/src/threshold/sturges.js \"Source\")\n\nReturns the number of bins according to [Sturges’ formula](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-array", "error": "[Circular]", "extraneous": false, "_deduped": "d3-array" }, "d3-collection": { "_from": "d3-collection@1", "_id": "d3-collection@1.0.7", "_inBundle": false, "_integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", "_location": "/d3-collection", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", "_shasum": "349bd2aa9977db071091c13144d5e4f16b5b310e", "_spec": "d3-collection@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Handy data structures for elements keyed by string.", "devDependencies": "[Circular]", "homepage": "https://d3js.org/d3-collection/", "jsdelivr": "dist/d3-collection.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-collection.js", "module": "src/index.js", "name": "d3-collection", "repository": "[Circular]", "scripts": "[Circular]", "unpkg": "dist/d3-collection.min.js", "version": "1.0.7", "readme": "# d3-collection\n\nHandy data structures for elements keyed by string.\n\n## Installing\n\nIf you use NPM, `npm install d3-collection`. Otherwise, download the [latest release](https://github.com/d3/d3-collection/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-collection.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-collection in your browser.](https://tonicdev.com/npm/d3-collection)\n\n## API Reference\n\n* [Objects](#objects)\n* [Maps](#maps)\n* [Sets](#sets)\n* [Nests](#nests)\n\n### Objects\n\nA common data type in JavaScript is the *associative array*, or more simply the *object*, which has a set of named properties. The standard mechanism for iterating over the keys (or property names) in an associative array is the [for…in loop](https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in). However, note that the iteration order is undefined. D3 provides several methods for converting associative arrays to standard arrays with numeric indexes.\n\nA word of caution: it is tempting to use plain objects as maps, but this causes [unexpected behavior](http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/) when built-in property names are used as keys, such as `object[\"__proto__\"] = 42` and `\"hasOwnProperty\" in object`. If you cannot guarantee that map keys and set values will be safe, use [maps](#maps) and [sets](#sets) (or their ES6 equivalents) instead of plain objects.\n\n# d3.keys(object) [<>](https://github.com/d3/d3-collection/blob/master/src/keys.js \"Source\")\n\nReturns an array containing the property names of the specified object (an associative array). The order of the returned array is undefined.\n\n# d3.values(object) [<>](https://github.com/d3/d3-collection/blob/master/src/values.js \"Source\")\n\nReturns an array containing the property values of the specified object (an associative array). The order of the returned array is undefined.\n\n# d3.entries(object) [<>](https://github.com/d3/d3-collection/blob/master/src/entries.js \"Source\")\n\nReturns an array containing the property keys and values of the specified object (an associative array). Each entry is an object with a key and value attribute, such as `{key: \"foo\", value: 42}`. The order of the returned array is undefined.\n\n```js\nd3.entries({foo: 42, bar: true}); // [{key: \"foo\", value: 42}, {key: \"bar\", value: true}]\n```\n\n### Maps\n\nLike [ES6 Maps](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), but with a few differences:\n\n* Keys are coerced to strings.\n* [map.each](#map_each), not [map.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach). (Also, no *thisArg*.)\n* [map.remove](#map_remove), not [map.delete](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete).\n* [map.entries](#map_entries) returns an array of {key, value} objects, not an iterator of [key, value].\n* [map.size](#map_size) is a method, not a [property](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size); also, there’s [map.empty](#map_empty).\n\n# d3.map([object[, key]]) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js \"Source\")\n\nConstructs a new map. If *object* is specified, copies all enumerable properties from the specified object into this map. The specified object may also be an array or another map. An optional *key* function may be specified to compute the key for each value in the array. For example:\n\n```js\nvar map = d3.map([{name: \"foo\"}, {name: \"bar\"}], function(d) { return d.name; });\nmap.get(\"foo\"); // {\"name\": \"foo\"}\nmap.get(\"bar\"); // {\"name\": \"bar\"}\nmap.get(\"baz\"); // undefined\n```\n\nSee also [nests](#nests).\n\n# map.has(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L7 \"Source\")\n\nReturns true if and only if this map has an entry for the specified *key* string. Note: the value may be `null` or `undefined`.\n\n# map.get(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L10 \"Source\")\n\nReturns the value for the specified *key* string. If the map does not have an entry for the specified *key*, returns `undefined`.\n\n# map.set(key, value) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L13 \"Source\")\n\nSets the *value* for the specified *key* string. If the map previously had an entry for the same *key* string, the old entry is replaced with the new value. Returns the map, allowing chaining. For example:\n\n```js\nvar map = d3.map()\n .set(\"foo\", 1)\n .set(\"bar\", 2)\n .set(\"baz\", 3);\n\nmap.get(\"foo\"); // 1\n```\n\n# map.remove(key) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L17 \"Source\")\n\nIf the map has an entry for the specified *key* string, removes the entry and returns true. Otherwise, this method does nothing and returns false.\n\n# map.clear() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L21 \"Source\")\n\nRemoves all entries from this map.\n\n# map.keys() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L24 \"Source\")\n\nReturns an array of string keys for every entry in this map. The order of the returned keys is arbitrary.\n\n# map.values() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L29 \"Source\")\n\nReturns an array of values for every entry in this map. The order of the returned values is arbitrary.\n\n# map.entries() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L34 \"Source\")\n\nReturns an array of key-value objects for each entry in this map. The order of the returned entries is arbitrary. Each entry’s key is a string, but the value has arbitrary type.\n\n# map.each(function) [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L48 \"Source\")\n\nCalls the specified *function* for each entry in this map, passing the entry’s value and key as arguments, followed by the map itself. Returns undefined. The iteration order is arbitrary.\n\n# map.empty() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L44 \"Source\")\n\nReturns true if and only if this map has zero entries.\n\n# map.size() [<>](https://github.com/d3/d3-collection/blob/master/src/map.js#L39 \"Source\")\n\nReturns the number of entries in this map.\n\n### Sets\n\nLike [ES6 Sets](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set), but with a few differences:\n\n* Values are coerced to strings.\n* [set.each](#set_each), not [set.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/forEach). (Also, no *thisArg*.)\n* [set.remove](#set_remove), not [set.delete](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete).\n* [set.size](#set_size) is a method, not a [property](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/size); also, there’s [set.empty](#set_empty).\n\n# d3.set([array[, accessor]]) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js \"Source\")\n\nConstructs a new set. If *array* is specified, adds the given *array* of string values to the returned set. The specified array may also be another set. An optional *accessor* function may be specified, which is equivalent to calling *array.map(accessor)* before constructing the set.\n\n# set.has(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L9 \"Source\")\n\nReturns true if and only if this set has an entry for the specified *value* string.\n\n# set.add(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L10 \"Source\")\n\nAdds the specified *value* string to this set. Returns the set, allowing chaining. For example:\n\n```js\nvar set = d3.set()\n .add(\"foo\")\n .add(\"bar\")\n .add(\"baz\");\n\nset.has(\"foo\"); // true\n```\n\n# set.remove(value) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L15 \"Source\")\n\nIf the set contains the specified *value* string, removes it and returns true. Otherwise, this method does nothing and returns false.\n\n# set.clear() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L16 \"Source\")\n\nRemoves all values from this set.\n\n# set.values() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L17 \"Source\")\n\nReturns an array of the string values in this set. The order of the returned values is arbitrary. Can be used as a convenient way of computing the unique values for a set of strings. For example:\n\n```js\nd3.set([\"foo\", \"bar\", \"foo\", \"baz\"]).values(); // \"foo\", \"bar\", \"baz\"\n```\n\n# set.each(function) [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L20 \"Source\")\n\nCalls the specified *function* for each value in this set, passing the value as the first two arguments (for symmetry with [*map*.each](#map_each)), followed by the set itself. Returns undefined. The iteration order is arbitrary.\n\n# set.empty() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L19 \"Source\")\n\nReturns true if and only if this set has zero values.\n\n# set.size() [<>](https://github.com/d3/d3-collection/blob/master/src/set.js#L18 \"Source\")\n\nReturns the number of values in this set.\n\n### Nests\n\nNesting allows elements in an array to be grouped into a hierarchical tree structure; think of it like the GROUP BY operator in SQL, except you can have multiple levels of grouping, and the resulting output is a tree rather than a flat table. The levels in the tree are specified by key functions. The leaf nodes of the tree can be sorted by value, while the internal nodes can be sorted by key. An optional rollup function will collapse the elements in each leaf node using a summary function. The nest operator (the object returned by [nest](#nest)) is reusable, and does not retain any references to the data that is nested.\n\nFor example, consider the following tabular data structure of Barley yields, from various sites in Minnesota during 1931-2:\n\n```js\nvar yields = [\n {yield: 27.00, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n {yield: 48.87, variety: \"Manchuria\", year: 1931, site: \"Waseca\"},\n {yield: 27.43, variety: \"Manchuria\", year: 1931, site: \"Morris\"},\n ...\n];\n```\n\nTo facilitate visualization, it may be useful to nest the elements first by year, and then by variety, as follows:\n\n```js\nvar entries = d3.nest()\n .key(function(d) { return d.year; })\n .key(function(d) { return d.variety; })\n .entries(yields);\n```\n\nThis returns a nested array. Each element of the outer array is a key-values pair, listing the values for each distinct key:\n\n```js\n[{key: \"1931\", values: [\n {key: \"Manchuria\", values: [\n {yield: 27.00, variety: \"Manchuria\", year: 1931, site: \"University Farm\"},\n {yield: 48.87, variety: \"Manchuria\", year: 1931, site: \"Waseca\"},\n {yield: 27.43, variety: \"Manchuria\", year: 1931, site: \"Morris\"}, ...]},\n {key: \"Glabron\", values: [\n {yield: 43.07, variety: \"Glabron\", year: 1931, site: \"University Farm\"},\n {yield: 55.20, variety: \"Glabron\", year: 1931, site: \"Waseca\"}, ...]}, ...]},\n {key: \"1932\", values: ...}]\n```\n\nThe nested form allows easy iteration and generation of hierarchical structures in SVG or HTML.\n\nFor a longer introduction to nesting, see:\n\n* Phoebe Bright’s [D3 Nest Tutorial and examples](http://bl.ocks.org/phoebebright/raw/3176159/)\n* Shan Carter’s [Mister Nester](http://bl.ocks.org/shancarter/raw/4748131/)\n\n# d3.nest() [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js \"Source\")\n\nCreates a new nest operator. The set of keys is initially empty.\n\n# nest.key(key) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L4 \"Source\")\n\nRegisters a new *key* function. The *key* function will be invoked for each element in the input array and must return a string identifier to assign the element to its group. Most often, the function is a simple accessor, such as the year and variety accessors above. (Keys functions are *not* passed the input array index.) Each time a key is registered, it is pushed onto the end of the internal array of keys, and the nest operator applies an additional level of nesting.\n\n# nest.sortKeys(comparator) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L5 \"Source\")\n\nSorts key values for the [current key](#nest_key) using the specified *comparator* function, such as [d3.ascending](https://github.com/d3/d3-array#ascending) or [d3.descending](https://github.com/d3/d3-array#descending). If no comparator is specified for the current key, the order in which keys will be returned is undefined. For example, to sort years in ascending order and varieties in descending order:\n\n```js\nvar entries = d3.nest()\n .key(function(d) { return d.year; }).sortKeys(d3.ascending)\n .key(function(d) { return d.variety; }).sortKeys(d3.descending)\n .entries(yields);\n```\n\nNote that this only affects the result of [*nest*.entries](#nest_entries); the order of keys returned by [*nest*.map](#nest_map) and [*nest*.object](#nest_object) is always undefined, regardless of comparator.\n\n# nest.sortValues(comparator) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L6 \"Source\")\n\nSorts leaf elements using the specified *comparator* function, such as [d3.ascending](https://github.com/d3/d3-array#ascending) or [d3.descending](https://github.com/d3/d3-array#descending). This is roughly equivalent to sorting the input array before applying the nest operator; however it is typically more efficient as the size of each group is smaller. If no value comparator is specified, elements will be returned in the order they appeared in the input array. This applies to [*nest*.map](#nest_map), [*nest*.entries](#nest_entries) and [*nest*.object](#nest_object).\n\n# nest.rollup(function) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L7 \"Source\")\n\nSpecifies a rollup *function* to be applied on each group of leaf elements. The return value of the rollup function will replace the array of leaf values in either the associative array returned by [*nest*.map](#nest_map) or [*nest*.object](#nest_object); for [*nest*.entries](#nest_entries), it replaces the leaf *entry*.values with *entry*.value. If a [leaf comparator](#nest_sortValues) is specified, the leaf elements are sorted prior to invoking the rollup function.\n\n# nest.map(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L50 \"Source\")\n\nApplies the nest operator to the specified *array*, returning a nested [map](#map). Each entry in the returned map corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another map; otherwise, the value is the array of elements filtered from the input *array* that have the given key value. If no keys are defined, returns the input *array*.\n\n# nest.object(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L49 \"Source\")\n\nApplies the nest operator to the specified *array*, returning a nested object. Each entry in the returned associative array corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another associative array; otherwise, the value is the array of elements filtered from the input *array* that have the given key value.\n\nNote: this method is unsafe if any of the keys conflict with built-in JavaScript properties, such as `__proto__`. If you cannot guarantee that the keys will be safe, you should use [nest.map](#nest_map) instead.\n\n# nest.entries(array) [<>](https://github.com/d3/d3-collection/blob/master/src/nest.js#L51 \"Source\")\n\nApplies the nest operator to the specified *array*, returning an array of key-values entries. Conceptually, this is similar to applying [*map*.entries](#map_entries) to the associative array returned by [*nest*.map](#nest_map), but it applies to every level of the hierarchy rather than just the first (outermost) level. Each entry in the returned array corresponds to a distinct key value returned by the first key function. The entry value depends on the number of registered key functions: if there is an additional key, the value is another nested array of entries; otherwise, the value is the array of elements filtered from the input *array* that have the given key value.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-collection", "error": "[Circular]", "extraneous": false, "_deduped": "d3-collection" }, "d3-format": { "_from": "d3-format@1", "_id": "d3-format@1.4.5", "_inBundle": false, "_integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", "_location": "/d3-format", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", "_shasum": "374f2ba1320e3717eb74a9356c67daee17a7edb4", "_spec": "d3-format@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Format numbers for human consumption.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-format/", "jsdelivr": "dist/d3-format.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-format.js", "module": "src/index.js", "name": "d3-format", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": "[Circular]", "unpkg": "dist/d3-format.min.js", "version": "1.4.5", "readme": "# d3-format\n\nEver noticed how sometimes JavaScript doesn’t display numbers the way you expect? Like, you tried to print tenths with a simple loop:\n\n```js\nfor (var i = 0; i < 10; i++) {\n console.log(0.1 * i);\n}\n```\n\nAnd you got this:\n\n```js\n0\n0.1\n0.2\n0.30000000000000004\n0.4\n0.5\n0.6000000000000001\n0.7000000000000001\n0.8\n0.9\n```\n\nWelcome to [binary floating point](https://en.wikipedia.org/wiki/Double-precision_floating-point_format)! ಠ_ಠ\n\nYet rounding error is not the only reason to customize number formatting. A table of numbers should be formatted consistently for comparison; above, 0.0 would be better than 0. Large numbers should have grouped digits (e.g., 42,000) or be in scientific or metric notation (4.2e+4, 42k). Currencies should have fixed precision ($3.50). Reported numerical results should be rounded to significant digits (4021 becomes 4000). Number formats should appropriate to the reader’s locale (42.000,00 or 42,000.00). The list goes on.\n\nFormatting numbers for human consumption is the purpose of d3-format, which is modeled after Python 3’s [format specification mini-language](https://docs.python.org/3/library/string.html#format-specification-mini-language) ([PEP 3101](https://www.python.org/dev/peps/pep-3101/)). Revisiting the example above:\n\n```js\nvar f = d3.format(\".1f\");\nfor (var i = 0; i < 10; i++) {\n console.log(f(0.1 * i));\n}\n```\n\nNow you get this:\n\n```js\n0.0\n0.1\n0.2\n0.3\n0.4\n0.5\n0.6\n0.7\n0.8\n0.9\n```\n\nBut d3-format is much more than an alias for [number.toFixed](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed)! A few more examples:\n\n```js\nd3.format(\".0%\")(0.123); // rounded percentage, \"12%\"\nd3.format(\"($.2f\")(-3.5); // localized fixed-point currency, \"(£3.50)\"\nd3.format(\"+20\")(42); // space-filled and signed, \" +42\"\nd3.format(\".^20\")(42); // dot-filled and centered, \".........42.........\"\nd3.format(\".2s\")(42e6); // SI-prefix with two significant digits, \"42M\"\nd3.format(\"#x\")(48879); // prefixed lowercase hexadecimal, \"0xbeef\"\nd3.format(\",.2r\")(4223); // grouped thousands with two significant digits, \"4,200\"\n```\n\nSee [*locale*.format](#locale_format) for a detailed specification, and try running [d3.formatSpecifier](#formatSpecifier) on the above formats to decode their meaning.\n\n## Installing\n\nIf you use NPM, `npm install d3-format`. Otherwise, download the [latest release](https://github.com/d3/d3-format/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-format.v1.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\n\n```\n\nLocale files are published to npm and can be loaded using [d3.json](https://github.com/d3/d3-request/blob/master/README.md#json). For example, to set Russian as the default locale:\n\n```js\nd3.json(\"https://cdn.jsdelivr.net/npm/d3-format@1/locale/ru-RU.json\", function(error, locale) {\n if (error) throw error;\n\n d3.formatDefaultLocale(locale);\n\n var format = d3.format(\"$,\");\n\n console.log(format(1234.56)); // 1 234,56 руб.\n});\n```\n\n[Try d3-format in your browser.](https://observablehq.com/@d3/d3-format)\n\n## API Reference\n\n# d3.format(specifier) [<>](https://github.com/d3/d3-format/blob/master/src/defaultLocale.js#L4 \"Source\")\n\nAn alias for [*locale*.format](#locale_format) on the [default locale](#formatDefaultLocale).\n\n# d3.formatPrefix(specifier, value) [<>](https://github.com/d3/d3-format/blob/master/src/defaultLocale.js#L5 \"Source\")\n\nAn alias for [*locale*.formatPrefix](#locale_formatPrefix) on the [default locale](#formatDefaultLocale).\n\n# locale.format(specifier) [<>](https://github.com/d3/d3-format/blob/master/src/locale.js#L18 \"Source\")\n\nReturns a new format function for the given string *specifier*. The returned function takes a number as the only argument, and returns a string representing the formatted number. The general form of a specifier is:\n\n```\n[​[fill]align][sign][symbol][0][width][,][.precision][~][type]\n```\n\nThe *fill* can be any character. The presence of a fill character is signaled by the *align* character following it, which must be one of the following:\n\n* `>` - Forces the field to be right-aligned within the available space. (Default behavior).\n* `<` - Forces the field to be left-aligned within the available space.\n* `^` - Forces the field to be centered within the available space.\n* `=` - like `>`, but with any sign and symbol to the left of any padding.\n\nThe *sign* can be:\n\n* `-` - nothing for zero or positive and a minus sign for negative. (Default behavior.)\n* `+` - a plus sign for zero or positive and a minus sign for negative.\n* `(` - nothing for zero or positive and parentheses for negative.\n* ` ` (space) - a space for zero or positive and a minus sign for negative.\n\nThe *symbol* can be:\n\n* `$` - apply currency symbols per the locale definition.\n* `#` - for binary, octal, or hexadecimal notation, prefix by `0b`, `0o`, or `0x`, respectively.\n\nThe *zero* (`0`) option enables zero-padding; this implicitly sets *fill* to `0` and *align* to `=`. The *width* defines the minimum field width; if not specified, then the width will be determined by the content. The *comma* (`,`) option enables the use of a group separator, such as a comma for thousands.\n\nDepending on the *type*, the *precision* either indicates the number of digits that follow the decimal point (types `f` and `%`), or the number of significant digits (types `​`, `e`, `g`, `r`, `s` and `p`). If the precision is not specified, it defaults to 6 for all types except `​` (none), which defaults to 12. Precision is ignored for integer formats (types `b`, `o`, `d`, `x`, `X` and `c`). See [precisionFixed](#precisionFixed) and [precisionRound](#precisionRound) for help picking an appropriate precision.\n\nThe `~` option trims insignificant trailing zeros across all format types. This is most commonly used in conjunction with types `r`, `e`, `s` and `%`. For example:\n\n```js\nd3.format(\"s\")(1500); // \"1.50000k\"\nd3.format(\"~s\")(1500); // \"1.5k\"\n```\n\nThe available *type* values are:\n\n* `e` - exponent notation.\n* `f` - fixed point notation.\n* `g` - either decimal or exponent notation, rounded to significant digits.\n* `r` - decimal notation, rounded to significant digits.\n* `s` - decimal notation with an [SI prefix](#locale_formatPrefix), rounded to significant digits.\n* `%` - multiply by 100, and then decimal notation with a percent sign.\n* `p` - multiply by 100, round to significant digits, and then decimal notation with a percent sign.\n* `b` - binary notation, rounded to integer.\n* `o` - octal notation, rounded to integer.\n* `d` - decimal notation, rounded to integer.\n* `x` - hexadecimal notation, using lower-case letters, rounded to integer.\n* `X` - hexadecimal notation, using upper-case letters, rounded to integer.\n* `c` - converts the integer to the corresponding unicode character before printing.\n\nThe type `​` (none) is also supported as shorthand for `~g` (with a default precision of 12 instead of 6), and the type `n` is shorthand for `,g`. For the `g`, `n` and `​` (none) types, decimal notation is used if the resulting string would have *precision* or fewer digits; otherwise, exponent notation is used. For example:\n\n```js\nd3.format(\".2\")(42); // \"42\"\nd3.format(\".2\")(4.2); // \"4.2\"\nd3.format(\".1\")(42); // \"4e+1\"\nd3.format(\".1\")(4.2); // \"4\"\n```\n\n# locale.formatPrefix(specifier, value) [<>](https://github.com/d3/d3-format/blob/master/src/locale.js#L127 \"Source\")\n\nEquivalent to [*locale*.format](#locale_format), except the returned function will convert values to the units of the appropriate [SI prefix](https://en.wikipedia.org/wiki/Metric_prefix#List_of_SI_prefixes) for the specified numeric reference *value* before formatting in fixed point notation. The following prefixes are supported:\n\n* `y` - yocto, 10⁻²⁴\n* `z` - zepto, 10⁻²¹\n* `a` - atto, 10⁻¹⁸\n* `f` - femto, 10⁻¹⁵\n* `p` - pico, 10⁻¹²\n* `n` - nano, 10⁻⁹\n* `µ` - micro, 10⁻⁶\n* `m` - milli, 10⁻³\n* `​` (none) - 10⁰\n* `k` - kilo, 10³\n* `M` - mega, 10⁶\n* `G` - giga, 10⁹\n* `T` - tera, 10¹²\n* `P` - peta, 10¹⁵\n* `E` - exa, 10¹⁸\n* `Z` - zetta, 10²¹\n* `Y` - yotta, 10²⁴\n\nUnlike [*locale*.format](#locale_format) with the `s` format type, this method returns a formatter with a consistent SI prefix, rather than computing the prefix dynamically for each number. In addition, the *precision* for the given *specifier* represents the number of digits past the decimal point (as with `f` fixed point notation), not the number of significant digits. For example:\n\n```js\nvar f = d3.formatPrefix(\",.0\", 1e-6);\nf(0.00042); // \"420µ\"\nf(0.0042); // \"4,200µ\"\n```\n\nThis method is useful when formatting multiple numbers in the same units for easy comparison. See [precisionPrefix](#precisionPrefix) for help picking an appropriate precision, and [bl.ocks.org/9764126](http://bl.ocks.org/mbostock/9764126) for an example.\n\n# d3.formatSpecifier(specifier) [<>](https://github.com/d3/d3-format/blob/master/src/formatSpecifier.js \"Source\")\n\nParses the specified *specifier*, returning an object with exposed fields that correspond to the [format specification mini-language](#locale_format) and a toString method that reconstructs the specifier. For example, `formatSpecifier(\"s\")` returns:\n\n```js\nFormatSpecifier {\n \"fill\": \" \",\n \"align\": \">\",\n \"sign\": \"-\",\n \"symbol\": \"\",\n \"zero\": false,\n \"width\": undefined,\n \"comma\": false,\n \"precision\": undefined,\n \"trim\": false,\n \"type\": \"s\"\n}\n```\n\nThis method is useful for understanding how format specifiers are parsed and for deriving new specifiers. For example, you might compute an appropriate precision based on the numbers you want to format using [precisionFixed](#precisionFixed) and then create a new format:\n\n```js\nvar s = d3.formatSpecifier(\"f\");\ns.precision = d3.precisionFixed(0.01);\nvar f = d3.format(s);\nf(42); // \"42.00\";\n```\n\n# new d3.FormatSpecifier(specifier) [<>](https://github.com/d3/d3-format/blob/master/src/formatSpecifier.js \"Source\")\n\nGiven the specified *specifier* object, returning an object with exposed fields that correspond to the [format specification mini-language](#locale_format) and a toString method that reconstructs the specifier. For example, `new FormatSpecifier({type: \"s\"})` returns:\n\n```js\nFormatSpecifier {\n \"fill\": \" \",\n \"align\": \">\",\n \"sign\": \"-\",\n \"symbol\": \"\",\n \"zero\": false,\n \"width\": undefined,\n \"comma\": false,\n \"precision\": undefined,\n \"trim\": false,\n \"type\": \"s\"\n}\n```\n\n# d3.precisionFixed(step) [<>](https://github.com/d3/d3-format/blob/master/src/precisionFixed.js \"Source\")\n\nReturns a suggested decimal precision for fixed point notation given the specified numeric *step* value. The *step* represents the minimum absolute difference between values that will be formatted. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 1, 1.5, and 2, the *step* should be 0.5 and the suggested precision is 1:\n\n```js\nvar p = d3.precisionFixed(0.5),\n f = d3.format(\".\" + p + \"f\");\nf(1); // \"1.0\"\nf(1.5); // \"1.5\"\nf(2); // \"2.0\"\n```\n\nWhereas for the numbers 1, 2 and 3, the *step* should be 1 and the suggested precision is 0:\n\n```js\nvar p = d3.precisionFixed(1),\n f = d3.format(\".\" + p + \"f\");\nf(1); // \"1\"\nf(2); // \"2\"\nf(3); // \"3\"\n```\n\nNote: for the `%` format type, subtract two:\n\n```js\nvar p = Math.max(0, d3.precisionFixed(0.05) - 2),\n f = d3.format(\".\" + p + \"%\");\nf(0.45); // \"45%\"\nf(0.50); // \"50%\"\nf(0.55); // \"55%\"\n```\n\n# d3.precisionPrefix(step, value) [<>](https://github.com/d3/d3-format/blob/master/src/precisionPrefix.js \"Source\")\n\nReturns a suggested decimal precision for use with [*locale*.formatPrefix](#locale_formatPrefix) given the specified numeric *step* and reference *value*. The *step* represents the minimum absolute difference between values that will be formatted, and *value* determines which SI prefix will be used. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 1.1e6, 1.2e6, and 1.3e6, the *step* should be 1e5, the *value* could be 1.3e6, and the suggested precision is 1:\n\n```js\nvar p = d3.precisionPrefix(1e5, 1.3e6),\n f = d3.formatPrefix(\".\" + p, 1.3e6);\nf(1.1e6); // \"1.1M\"\nf(1.2e6); // \"1.2M\"\nf(1.3e6); // \"1.3M\"\n```\n\n# d3.precisionRound(step, max) [<>](https://github.com/d3/d3-format/blob/master/src/precisionRound.js \"Source\")\n\nReturns a suggested decimal precision for format types that round to significant digits given the specified numeric *step* and *max* values. The *step* represents the minimum absolute difference between values that will be formatted, and the *max* represents the largest absolute value that will be formatted. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 0.99, 1.0, and 1.01, the *step* should be 0.01, the *max* should be 1.01, and the suggested precision is 3:\n\n```js\nvar p = d3.precisionRound(0.01, 1.01),\n f = d3.format(\".\" + p + \"r\");\nf(0.99); // \"0.990\"\nf(1.0); // \"1.00\"\nf(1.01); // \"1.01\"\n```\n\nWhereas for the numbers 0.9, 1.0, and 1.1, the *step* should be 0.1, the *max* should be 1.1, and the suggested precision is 2:\n\n```js\nvar p = d3.precisionRound(0.1, 1.1),\n f = d3.format(\".\" + p + \"r\");\nf(0.9); // \"0.90\"\nf(1.0); // \"1.0\"\nf(1.1); // \"1.1\"\n```\n\nNote: for the `e` format type, subtract one:\n\n```js\nvar p = Math.max(0, d3.precisionRound(0.01, 1.01) - 1),\n f = d3.format(\".\" + p + \"e\");\nf(0.01); // \"1.00e-2\"\nf(1.01); // \"1.01e+0\"\n```\n\n### Locales\n\n# d3.formatLocale(definition) [<>](https://github.com/d3/d3-format/blob/master/src/locale.js \"Source\")\n\nReturns a *locale* object for the specified *definition* with [*locale*.format](#locale_format) and [*locale*.formatPrefix](#locale_formatPrefix) methods. The *definition* must include the following properties:\n\n* `decimal` - the decimal point (e.g., `\".\"`).\n* `thousands` - the group separator (e.g., `\",\"`).\n* `grouping` - the array of group sizes (e.g., `[3]`), cycled as needed.\n* `currency` - the currency prefix and suffix (e.g., `[\"$\", \"\"]`).\n* `numerals` - optional; an array of ten strings to replace the numerals 0-9.\n* `percent` - optional; the percent sign (defaults to `\"%\"`).\n* `minus` - optional; the minus sign (defaults to hyphen-minus, `\"-\"`).\n* `nan` - optional; the not-a-number value (defaults `\"NaN\"`).\n\nNote that the *thousands* property is a misnomer, as the grouping definition allows groups other than thousands.\n\n# d3.formatDefaultLocale(definition) [<>](https://github.com/d3/d3-format/blob/master/src/defaultLocale.js \"Source\")\n\nEquivalent to [d3.formatLocale](#formatLocale), except it also redefines [d3.format](#format) and [d3.formatPrefix](#formatPrefix) to the new locale’s [*locale*.format](#locale_format) and [*locale*.formatPrefix](#locale_formatPrefix). If you do not set a default locale, it defaults to [U.S. English](https://github.com/d3/d3-format/blob/master/locale/en-US.json).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-format", "error": "[Circular]", "extraneous": false, "_deduped": "d3-format" }, "d3-interpolate": { "_from": "d3-interpolate@1", "_id": "d3-interpolate@1.4.0", "_inBundle": false, "_integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "_location": "/d3-interpolate", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", "_shasum": "526e79e2d80daa383f9e0c1c1c7dcc0f0583e987", "_spec": "d3-interpolate@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Interpolate numbers, colors, strings, arrays, objects, whatever!", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-interpolate/", "jsdelivr": "dist/d3-interpolate.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-interpolate.js", "module": "src/index.js", "name": "d3-interpolate", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-interpolate.min.js", "version": "1.4.0", "readme": "# d3-interpolate\n\nThis module provides a variety of interpolation methods for blending between two values. Values may be numbers, colors, strings, arrays, or even deeply-nested objects. For example:\n\n```js\nvar i = d3.interpolateNumber(10, 20);\ni(0.0); // 10\ni(0.2); // 12\ni(0.5); // 15\ni(1.0); // 20\n```\n\nThe returned function `i` is called an *interpolator*. Given a starting value *a* and an ending value *b*, it takes a parameter *t* in the domain [0, 1] and returns the corresponding interpolated value between *a* and *b*. An interpolator typically returns a value equivalent to *a* at *t* = 0 and a value equivalent to *b* at *t* = 1.\n\nYou can interpolate more than just numbers. To find the perceptual midpoint between steelblue and brown:\n\n```js\nd3.interpolateLab(\"steelblue\", \"brown\")(0.5); // \"rgb(142, 92, 109)\"\n```\n\nHere’s a more elaborate example demonstrating type inference used by [interpolate](#interpolate):\n\n```js\nvar i = d3.interpolate({colors: [\"red\", \"blue\"]}, {colors: [\"white\", \"black\"]});\ni(0.0); // {colors: [\"rgb(255, 0, 0)\", \"rgb(0, 0, 255)\"]}\ni(0.5); // {colors: [\"rgb(255, 128, 128)\", \"rgb(0, 0, 128)\"]}\ni(1.0); // {colors: [\"rgb(255, 255, 255)\", \"rgb(0, 0, 0)\"]}\n```\n\nNote that the generic value interpolator detects not only nested objects and arrays, but also color strings and numbers embedded in strings!\n\n## Installing\n\nIf you use NPM, `npm install d3-interpolate`. Otherwise, download the [latest release](https://github.com/d3/d3-interpolate/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-interpolate.v1.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\n\n\n```\n\n## API Reference\n\n# d3.interpolate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/value.js), [Examples](https://observablehq.com/@d3/d3-interpolate)\n\nReturns an interpolator between the two arbitrary values *a* and *b*. The interpolator implementation is based on the type of the end value *b*, using the following algorithm:\n\n1. If *b* is null, undefined or a boolean, use the constant *b*.\n2. If *b* is a number, use [interpolateNumber](#interpolateNumber).\n3. If *b* is a [color](https://github.com/d3/d3-color/blob/master/README.md#color) or a string coercible to a color, use [interpolateRgb](#interpolateRgb).\n4. If *b* is a [date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), use [interpolateDate](#interpolateDate).\n5. If *b* is a string, use [interpolateString](#interpolateString).\n6. If *b* is a [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) of numbers, use [interpolateNumberArray](#interpolateNumberArray).\n7. If *b* is a generic [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray), use [interpolateArray](#interpolateArray).\n8. If *b* is coercible to a number, use [interpolateNumber](#interpolateNumber).\n9. Use [interpolateObject](#interpolateObject).\n\nBased on the chosen interpolator, *a* is coerced to the suitable corresponding type.\n\n# d3.interpolateNumber(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/number.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*. The returned interpolator is equivalent to:\n\n```js\nfunction interpolator(t) {\n return a * (1 - t) + b * t;\n}\n```\n\nCaution: avoid interpolating to or from the number zero when the interpolator is used to generate a string. When very small values are stringified, they may be converted to scientific notation, which is an invalid attribute or style property value in older browsers. For example, the number `0.0000001` is converted to the string `\"1e-7\"`. This is particularly noticeable with interpolating opacity. To avoid scientific notation, start or end the transition at 1e-6: the smallest value that is not stringified in scientific notation.\n\n# d3.interpolateRound(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/round.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*; the interpolator is similar to [interpolateNumber](#interpolateNumber), except it will round the resulting value to the nearest integer.\n\n# d3.interpolateString(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/string.js), [Examples](https://observablehq.com/@d3/d3-interpolatestring)\n\nReturns an interpolator between the two strings *a* and *b*. The string interpolator finds numbers embedded in *a* and *b*, where each number is of the form understood by JavaScript. A few examples of numbers that will be detected within a string: `-1`, `42`, `3.14159`, and `6.0221413e+23`.\n\nFor each number embedded in *b*, the interpolator will attempt to find a corresponding number in *a*. If a corresponding number is found, a numeric interpolator is created using [interpolateNumber](#interpolateNumber). The remaining parts of the string *b* are used as a template: the static parts of the string *b* remain constant for the interpolation, with the interpolated numeric values embedded in the template.\n\nFor example, if *a* is `\"300 12px sans-serif\"`, and *b* is `\"500 36px Comic-Sans\"`, two embedded numbers are found. The remaining static parts (of string *b*) are a space between the two numbers (`\" \"`), and the suffix (`\"px Comic-Sans\"`). The result of the interpolator at *t* = 0.5 is `\"400 24px Comic-Sans\"`.\n\n# d3.interpolateDate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/date.js), [Examples](https://observablehq.com/@d3/d3-interpolatedate)\n\nReturns an interpolator between the two [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) *a* and *b*.\n\nNote: **no defensive copy** of the returned date is created; the same Date instance is returned for every evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/array.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two arrays *a* and *b*. If *b* is a typed array (e.g., Float64Array), [interpolateNumberArray](#interpolateNumberArray) is called instead.\n\nInternally, an array template is created that is the same length as *b*. For each element in *b*, if there exists a corresponding element in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such element, the static value from *b* is used in the template. Then, for the given parameter *t*, the template’s embedded interpolators are evaluated. The updated array template is then returned.\n\nFor example, if *a* is the array `[0, 1]` and *b* is the array `[1, 10, 100]`, then the result of the interpolator for *t* = 0.5 is the array `[0.5, 5.5, 100]`.\n\nNote: **no defensive copy** of the template array is created; modifications of the returned array may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateNumberArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/numberArray.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumberarray)\n\nReturns an interpolator between the two arrays of numbers *a* and *b*. Internally, an array template is created that is the same type and length as *b*. For each element in *b*, if there exists a corresponding element in *a*, the values are directly interpolated in the array template. If there is no such element, the static value from *b* is copied. The updated array template is then returned.\n\nNote: For performance reasons, **no defensive copy** is made of the template array and the arguments *a* and *b*; modifications of these arrays may affect subsequent evaluation of the interpolator.\n\n# d3.interpolateObject(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/object.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two objects *a* and *b*. Internally, an object template is created that has the same properties as *b*. For each property in *b*, if there exists a corresponding property in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such property, the static value from *b* is used in the template. Then, for the given parameter *t*, the template's embedded interpolators are evaluated and the updated object template is then returned.\n\nFor example, if *a* is the object `{x: 0, y: 1}` and *b* is the object `{x: 1, y: 10, z: 100}`, the result of the interpolator for *t* = 0.5 is the object `{x: 0.5, y: 5.5, z: 100}`.\n\nObject interpolation is particularly useful for *dataspace interpolation*, where data is interpolated rather than attribute values. For example, you can interpolate an object which describes an arc in a pie chart, and then use [d3.arc](https://github.com/d3/d3-shape/blob/master/README.md#arc) to compute the new SVG path data.\n\nNote: **no defensive copy** of the template object is created; modifications of the returned object may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateTransformCss(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L62), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D CSS transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateTransformSvg(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L63), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D SVG transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateZoom(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/zoom.js), [Examples](https://observablehq.com/@d3/d3-interpolatezoom)\n\nReturns an interpolator between the two views *a* and *b* of a two-dimensional plane, based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf) by Jarke J. van Wijk and Wim A.A. Nuij. Each view is defined as an array of three numbers: *cx*, *cy* and *width*. The first two coordinates *cx*, *cy* represent the center of the viewport; the last coordinate *width* represents the size of the viewport.\n\nThe returned interpolator exposes a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *x,y* space. If you want a slower or faster transition, multiply this by an arbitrary scale factor (V as described in the original paper).\n\n# d3.interpolateDiscrete(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/discrete.js), [Examples](https://observablehq.com/@d3/d3-interpolatediscrete)\n\nReturns a discrete interpolator for the given array of *values*. The returned interpolator maps *t* in [0, 1 / *n*) to *values*[0], *t* in [1 / *n*, 2 / *n*) to *values*[1], and so on, where *n* = *values*.length. In effect, this is a lightweight [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) with a fixed domain of [0, 1].\n\n### Sampling\n\n# d3.quantize(interpolator, n) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/d3-quantize)\n\nReturns *n* uniformly-spaced samples from the specified *interpolator*, where *n* is an integer greater than one. The first sample is always at *t* = 0, and the last sample is always at *t* = 1. This can be useful in generating a fixed number of samples from a given interpolator, such as to derive the range of a [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) from a [continuous interpolator](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateWarm).\n\nCaution: this method will not work with interpolators that do not return defensive copies of their output, such as [d3.interpolateArray](#interpolateArray), [d3.interpolateDate](#interpolateDate) and [d3.interpolateObject](#interpolateObject). For those interpolators, you must wrap the interpolator and create a copy for each returned value.\n\n### Color Spaces\n\n# d3.interpolateRgb(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"rgb\"\n\nOr, with a corrected [gamma](#interpolate_gamma) of 2.2:\n\n\"rgbGamma\"\n\nReturns an RGB color space interpolator between the two colors *a* and *b* with a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in RGB; they will be converted to RGB using [d3.rgb](https://github.com/d3/d3-color/blob/master/README.md#rgb). The return value of the interpolator is an RGB string.\n\n# d3.interpolateRgbBasis(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L54), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). Implicit control points are generated such that the interpolator returns *colors*[0] at *t* = 0 and *colors*[*colors*.length - 1] at *t* = 1. Opacity interpolation is not currently supported. See also [d3.interpolateBasis](#interpolateBasis), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateRgbBasisClosed(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L55), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). The control points are implicitly repeated such that the resulting spline has cyclical C² continuity when repeated around *t* in [0,1]; this is useful, for example, to create cyclical color scales. Opacity interpolation is not currently supported. See also [d3.interpolateBasisClosed](#interpolateBasisClosed), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateHsl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hsl\"\n\nReturns an HSL color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in HSL; they will be converted to HSL using [d3.hsl](https://github.com/d3/d3-color/blob/master/README.md#hsl). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHslLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hslLong\"\n\nLike [interpolateHsl](#interpolateHsl), but does not use the shortest path between hues.\n\n# d3.interpolateLab(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/lab.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"lab\"\n\nReturns a [CIELAB color space](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELAB; they will be converted to CIELAB using [d3.lab](https://github.com/d3/d3-color/blob/master/README.md#lab). The return value of the interpolator is an RGB string.\n\n# d3.interpolateHcl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hcl\"\n\nReturns a [CIELChab color space](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELChab; they will be converted to CIELChab using [d3.hcl](https://github.com/d3/d3-color/blob/master/README.md#hcl). If either color’s hue or chroma is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHclLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hclLong\"\n\nLike [interpolateHcl](#interpolateHcl), but does not use the shortest path between hues.\n\n# d3.interpolateCubehelix(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelix\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGamma\"\n\nReturns a Cubehelix color space interpolator between the two colors *a* and *b* using a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in Cubehelix; they will be converted to Cubehelix using [d3.cubehelix](https://github.com/d3/d3-color/blob/master/README.md#cubehelix). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateCubehelixLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js#L29), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelixLong\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGammaLong\"\n\nLike [interpolateCubehelix](#interpolateCubehelix), but does not use the shortest path between hues.\n\n# interpolate.gamma(gamma)\n\nGiven that *interpolate* is one of [interpolateRgb](#interpolateRgb), [interpolateCubehelix](#interpolateCubehelix) or [interpolateCubehelixLong](#interpolateCubehelixLong), returns a new interpolator factory of the same type using the specified *gamma*. For example, to interpolate from purple to orange with a gamma of 2.2 in RGB space:\n\n```js\nvar interpolator = d3.interpolateRgb.gamma(2.2)(\"purple\", \"orange\");\n```\n\nSee Eric Brasseur’s article, [Gamma error in picture scaling](https://web.archive.org/web/20160112115812/http://www.4p8.com/eric.brasseur/gamma.html), for more on gamma correction.\n\n# d3.interpolateHue(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hue.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns an interpolator between the two hue angles *a* and *b*. If either hue is NaN, the opposing value is used. The shortest path between hues is used. The return value of the interpolator is a number in [0, 360).\n\n### Splines\n\nWhereas standard interpolators blend from a starting value *a* at *t* = 0 to an ending value *b* at *t* = 1, spline interpolators smoothly blend multiple input values for *t* in [0,1] using piecewise polynomial functions. Only cubic uniform nonrational [B-splines](https://en.wikipedia.org/wiki/B-spline) are currently supported, also known as basis splines.\n\n# d3.interpolateBasis(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basis.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. Implicit control points are generated such that the interpolator returns *values*[0] at *t* = 0 and *values*[*values*.length - 1] at *t* = 1. See also [d3.curveBasis](https://github.com/d3/d3-shape/blob/master/README.md#curveBasis).\n\n# d3.interpolateBasisClosed(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basisClosed.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. The control points are implicitly repeated such that the resulting one-dimensional spline has cyclical C² continuity when repeated around *t* in [0,1]. See also [d3.curveBasisClosed](https://github.com/d3/d3-shape/blob/master/README.md#curveBasisClosed).\n\n### Piecewise\n\n# d3.piecewise(interpolate, values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/piecewise.js), [Examples](https://observablehq.com/@d3/d3-piecewise)\n\nReturns a piecewise interpolator, composing interpolators for each adjacent pair of *values*. The returned interpolator maps *t* in [0, 1 / (*n* - 1)] to *interpolate*(*values*[0], *values*[1]), *t* in [1 / (*n* - 1), 2 / (*n* - 1)] to *interpolate*(*values*[1], *values*[2]), and so on, where *n* = *values*.length. In effect, this is a lightweight [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales). For example, to blend through red, green and blue:\n\n```js\nvar interpolate = d3.piecewise(d3.interpolateRgb.gamma(2.2), [\"red\", \"green\", \"blue\"]);\n```\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-interpolate", "error": "[Circular]", "extraneous": false, "_deduped": "d3-interpolate" }, "d3-time": { "_from": "d3-time@1", "_id": "d3-time@1.1.0", "_inBundle": false, "_integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", "_location": "/d3-time", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-time@1", "name": "d3-time", "escapedName": "d3-time", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3", "/d3-scale", "/d3-time-format" ], "_resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", "_shasum": "b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1", "_spec": "d3-time@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-time/issues" }, "deprecated": false, "description": "A calculator for humanity’s peculiar conventions of time.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-time/", "jsdelivr": "dist/d3-time.min.js", "keywords": [ "d3", "d3-module", "time", "interval", "calendar" ], "license": "BSD-3-Clause", "main": "dist/d3-time.js", "module": "src/index.js", "name": "d3-time", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-time.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "TZ=America/Los_Angeles tape 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-time.min.js", "version": "1.1.0", "readme": "# d3-time\n\nWhen visualizing time series data, analyzing temporal patterns, or working with time in general, the irregularities of conventional time units quickly become apparent. In the [Gregorian calendar](https://en.wikipedia.org/wiki/Gregorian_calendar), for example, most months have 31 days but some have 28, 29 or 30; most years have 365 days but [leap years](https://en.wikipedia.org/wiki/Leap_year) have 366; and with [daylight saving](https://en.wikipedia.org/wiki/Daylight_saving_time), most days have 24 hours but some have 23 or 25. Adding to complexity, daylight saving conventions vary around the world.\n\nAs a result of these temporal peculiarities, it can be difficult to perform seemingly-trivial tasks. For example, if you want to compute the number of days that have passed between two dates, you can’t simply subtract and divide by 24 hours (86,400,000 ms):\n\n```js\nvar start = new Date(2015, 02, 01), // Sun Mar 01 2015 00:00:00 GMT-0800 (PST)\n end = new Date(2015, 03, 01); // Wed Apr 01 2015 00:00:00 GMT-0700 (PDT)\n(end - start) / 864e5; // 30.958333333333332, oops!\n```\n\nYou can, however, use [d3.timeDay](#timeDay).[count](#interval_count):\n\n```js\nd3.timeDay.count(start, end); // 31\n```\n\nThe [day](#day) [interval](#api-reference) is one of several provided by d3-time. Each interval represents a conventional unit of time—[hours](#timeHour), [weeks](#timeWeek), [months](#timeMonth), *etc.*—and has methods to calculate boundary dates. For example, [d3.timeDay](#timeDay) computes midnight (typically 12:00 AM local time) of the corresponding day. In addition to [rounding](#interval_round) and [counting](#interval_count), intervals can also be used to generate arrays of boundary dates. For example, to compute each Sunday in the current month:\n\n```js\nvar now = new Date;\nd3.timeWeek.range(d3.timeMonth.floor(now), d3.timeMonth.ceil(now));\n// [Sun Jun 07 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 14 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 21 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 28 2015 00:00:00 GMT-0700 (PDT)]\n```\n\nThe d3-time module does not implement its own calendaring system; it merely implements a convenient API for calendar math on top of ECMAScript [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date). Thus, it ignores leap seconds and can only work with the local time zone and [Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) (UTC).\n\nThis module is used by D3’s time scales to generate sensible ticks, by D3’s time format, and can also be used directly to do things like [calendar layouts](http://bl.ocks.org/mbostock/4063318).\n\n## Installing\n\nIf you use NPM, `npm install d3-time`. Otherwise, download the [latest release](https://github.com/d3/d3-time/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-time.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-time in your browser.](https://tonicdev.com/npm/d3-time)\n\n## API Reference\n\n# interval([date]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L6 \"Source\")\n\nEquivalent to [*interval*.floor](#interval_floor), except it *date* is not specified, it defaults to the current time. For example, [d3.timeYear](#timeYear)(*date*) and d3.timeYear.floor(*date*) are equivalent.\n\n```js\nvar monday = d3.timeMonday(); // The latest preceeding Monday, local time.\n```\n\n# interval.floor(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L10 \"Source\")\n\nReturns a new date representing the latest interval boundary date before or equal to *date*. For example, [d3.timeDay](#timeDay).floor(*date*) typically returns 12:00 AM local time on the given *date*.\n\nThis method is idempotent: if the specified *date* is already floored to the current interval, a new date with an identical time is returned. Furthermore, the returned date is the minimum expressible value of the associated interval, such that *interval*.floor(*interval*.floor(*date*) - 1) returns the preceeding interval boundary date.\n\nNote that the `==` and `===` operators do not compare by value with [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) objects, and thus you cannot use them to tell whether the specified *date* has already been floored. Instead, coerce to a number and then compare:\n\n```js\n// Returns true if the specified date is a day boundary.\nfunction isDay(date) {\n return +d3.timeDay.floor(date) === +date;\n}\n```\n\nThis is more reliable than testing whether the time is 12:00 AM, as in some time zones midnight may not exist due to daylight saving.\n\n# interval.round(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L16 \"Source\")\n\nReturns a new date representing the closest interval boundary date to *date*. For example, [d3.timeDay](#timeDay).round(*date*) typically returns 12:00 AM local time on the given *date* if it is on or before noon, and 12:00 AM of the following day if it is after noon.\n\nThis method is idempotent: if the specified *date* is already rounded to the current interval, a new date with an identical time is returned.\n\n# interval.ceil(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L12 \"Source\")\n\nReturns a new date representing the earliest interval boundary date after or equal to *date*. For example, [d3.timeDay](#timeDay).ceil(*date*) typically returns 12:00 AM local time on the date following the given *date*.\n\nThis method is idempotent: if the specified *date* is already ceilinged to the current interval, a new date with an identical time is returned. Furthermore, the returned date is the maximum expressible value of the associated interval, such that *interval*.ceil(*interval*.ceil(*date*) + 1) returns the following interval boundary date.\n\n# interval.offset(date[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L22 \"Source\")\n\nReturns a new date equal to *date* plus *step* intervals. If *step* is not specified it defaults to 1. If *step* is negative, then the returned date will be before the specified *date*; if *step* is zero, then a copy of the specified *date* is returned; if *step* is not an integer, it is [floored](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor). This method does not round the specified *date* to the interval. For example, if *date* is today at 5:34 PM, then [d3.timeDay](#timeDay).offset(*date*, 1) returns 5:34 PM tomorrow (even if daylight saving changes!).\n\n# interval.range(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L26 \"Source\")\n\nReturns an array of dates representing every interval boundary after or equal to *start* (inclusive) and before *stop* (exclusive). If *step* is specified, then every *step*th boundary will be returned; for example, for the [d3.timeDay](#timeDay) interval a *step* of 2 will return every other day. If *step* is not an integer, it is [floored](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor).\n\nThe first date in the returned array is the earliest boundary after or equal to *start*; subsequent dates are [offset](#interval_offset) by *step* intervals and [floored](#interval_floor). Thus, two overlapping ranges may be consistent. For example, this range contains odd days:\n\n```js\nd3.timeDay.range(new Date(2015, 0, 1), new Date(2015, 0, 7), 2);\n// [Thu Jan 01 2015 00:00:00 GMT-0800 (PST),\n// Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST)]\n```\n\nWhile this contains even days:\n\n```js\nd3.timeDay.range(new Date(2015, 0, 2), new Date(2015, 0, 8), 2);\n// [Fri Jan 02 2015 00:00:00 GMT-0800 (PST),\n// Sun Jan 04 2015 00:00:00 GMT-0800 (PST),\n// Tue Jan 06 2015 00:00:00 GMT-0800 (PST)]\n```\n\nTo make ranges consistent when a *step* is specified, use [*interval*.every](#interval_every) instead.\n\n# interval.filter(test) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L35 \"Source\")\n\nReturns a new interval that is a filtered subset of this interval using the specified *test* function. The *test* function is passed a date and should return true if and only if the specified date should be considered part of the interval. For example, to create an interval that returns the 1st, 11th, 21th and 31th (if it exists) of each month:\n\n```js\nvar i = d3.timeDay.filter(function(d) { return (d.getDate() - 1) % 10 === 0; });\n```\n\nThe returned filtered interval does not support [*interval*.count](#interval_count). See also [*interval*.every](#interval_every).\n\n# interval.every(step) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L50 \"Source\")\n\nReturns a [filtered](#interval_filter) view of this interval representing every *step*th date. The meaning of *step* is dependent on this interval’s parent interval as defined by the field function. For example, [d3.timeMinute](#timeMinute).every(15) returns an interval representing every fifteen minutes, starting on the hour: :00, :15, :30, :45, etc. Note that for some intervals, the resulting dates may not be uniformly-spaced; [d3.timeDay](#timeDay)’s parent interval is [d3.timeMonth](#timeMonth), and thus the interval number resets at the start of each month. If *step* is not valid, returns null. If *step* is one, returns this interval.\n\nThis method can be used in conjunction with [*interval*.range](#interval_range) to ensure that two overlapping ranges are consistent. For example, this range contains odd days:\n\n```js\nd3.timeDay.every(2).range(new Date(2015, 0, 1), new Date(2015, 0, 7));\n// [Thu Jan 01 2015 00:00:00 GMT-0800 (PST),\n// Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST)]\n```\n\nAs does this one:\n\n```js\nd3.timeDay.every(2).range(new Date(2015, 0, 2), new Date(2015, 0, 8));\n// [Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST),\n// Wed Jan 07 2015 00:00:00 GMT-0800 (PST)]\n```\n\nThe returned filtered interval does not support [*interval*.count](#interval_count). See also [*interval*.filter](#interval_filter).\n\n# interval.count(start, end) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L44 \"Source\")\n\nReturns the number of interval boundaries after *start* (exclusive) and before or equal to *end* (inclusive). Note that this behavior is slightly different than [*interval*.range](#interval_range) because its purpose is to return the zero-based number of the specified *end* date relative to the specified *start* date. For example, to compute the current zero-based day-of-year number:\n\n```js\nvar now = new Date;\nd3.timeDay.count(d3.timeYear(now), now); // 177\n```\n\nLikewise, to compute the current zero-based week-of-year number for weeks that start on Sunday:\n\n```js\nd3.timeSunday.count(d3.timeYear(now), now); // 25\n```\n\n# d3.timeInterval(floor, offset[, count[, field]]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L4 \"Source\")\n\nConstructs a new custom interval given the specified *floor* and *offset* functions and an optional *count* function.\n\nThe *floor* function takes a single date as an argument and rounds it down to the nearest interval boundary.\n\nThe *offset* function takes a date and an integer step as arguments and advances the specified date by the specified number of boundaries; the step may be positive, negative or zero.\n\nThe optional *count* function takes a start date and an end date, already floored to the current interval, and returns the number of boundaries between the start (exclusive) and end (inclusive). If a *count* function is not specified, the returned interval does not expose [*interval*.count](#interval_count) or [*interval*.every](#interval_every) methods. Note: due to an internal optimization, the specified *count* function must not invoke *interval*.count on other time intervals.\n\nThe optional *field* function takes a date, already floored to the current interval, and returns the field value of the specified date, corresponding to the number of boundaries between this date (exclusive) and the latest previous parent boundary. For example, for the [d3.timeDay](#timeDay) interval, this returns the number of days since the start of the month. If a *field* function is not specified, it defaults to counting the number of interval boundaries since the UNIX epoch of January 1, 1970 UTC. The *field* function defines the behavior of [*interval*.every](#interval_every).\n\n### Intervals\n\nThe following intervals are provided:\n\n# d3.timeMillisecond [<>](https://github.com/d3/d3-time/blob/master/src/millisecond.js \"Source\")\n
# d3.utcMillisecond\n\nMilliseconds; the shortest available time unit.\n\n# d3.timeSecond [<>](https://github.com/d3/d3-time/blob/master/src/second.js \"Source\")\n
# d3.utcSecond\n\nSeconds (e.g., 01:23:45.0000 AM); 1,000 milliseconds.\n\n# d3.timeMinute [<>](https://github.com/d3/d3-time/blob/master/src/minute.js \"Source\")\n
# d3.utcMinute [<>](https://github.com/d3/d3-time/blob/master/src/utcMinute.js \"Source\")\n\nMinutes (e.g., 01:02:00 AM); 60 seconds. Note that ECMAScript [ignores leap seconds](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.1).\n\n# d3.timeHour [<>](https://github.com/d3/d3-time/blob/master/src/hour.js \"Source\")\n
# d3.utcHour [<>](https://github.com/d3/d3-time/blob/master/src/utcHour.js \"Source\")\n\nHours (e.g., 01:00 AM); 60 minutes. Note that advancing time by one hour in local time can return the same hour or skip an hour due to daylight saving.\n\n# d3.timeDay [<>](https://github.com/d3/d3-time/blob/master/src/day.js \"Source\")\n
# d3.utcDay [<>](https://github.com/d3/d3-time/blob/master/src/utcDay.js \"Source\")\n\nDays (e.g., February 7, 2012 at 12:00 AM); typically 24 hours. Days in local time may range from 23 to 25 hours due to daylight saving.\n\n# d3.timeWeek [<>](https://github.com/d3/d3-time/blob/master/src/week.js \"Source\")\n
# d3.utcWeek [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js \"Source\")\n\nAlias for [d3.timeSunday](#timeSunday); 7 days and typically 168 hours. Weeks in local time may range from 167 to 169 hours due on daylight saving.\n\n# d3.timeSunday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L15 \"Source\")\n
# d3.utcSunday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L15 \"Source\")\n\nSunday-based weeks (e.g., February 5, 2012 at 12:00 AM).\n\n# d3.timeMonday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L16 \"Source\")\n
# d3.utcMonday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L16 \"Source\")\n\nMonday-based weeks (e.g., February 6, 2012 at 12:00 AM).\n\n# d3.timeTuesday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L17 \"Source\")\n
# d3.utcTuesday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L17 \"Source\")\n\nTuesday-based weeks (e.g., February 7, 2012 at 12:00 AM).\n\n# d3.timeWednesday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L18 \"Source\")\n
# d3.utcWednesday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L18 \"Source\")\n\nWednesday-based weeks (e.g., February 8, 2012 at 12:00 AM).\n\n# d3.timeThursday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L19 \"Source\")\n
# d3.utcThursday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L19 \"Source\")\n\nThursday-based weeks (e.g., February 9, 2012 at 12:00 AM).\n\n# d3.timeFriday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L20 \"Source\")\n
# d3.utcFriday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L20 \"Source\")\n\nFriday-based weeks (e.g., February 10, 2012 at 12:00 AM).\n\n# d3.timeSaturday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L21 \"Source\")\n
# d3.utcSaturday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L21 \"Source\")\n\nSaturday-based weeks (e.g., February 11, 2012 at 12:00 AM).\n\n# d3.timeMonth [<>](https://github.com/d3/d3-time/blob/master/src/month.js \"Source\")\n
# d3.utcMonth [<>](https://github.com/d3/d3-time/blob/master/src/utcMonth.js \"Source\")\n\nMonths (e.g., February 1, 2012 at 12:00 AM); ranges from 28 to 31 days.\n\n# d3.timeYear [<>](https://github.com/d3/d3-time/blob/master/src/year.js \"Source\")\n
# d3.utcYear [<>](https://github.com/d3/d3-time/blob/master/src/utcYear.js \"Source\")\n\nYears (e.g., January 1, 2012 at 12:00 AM); ranges from 365 to 366 days.\n\n### Ranges\n\nFor convenience, aliases for [*interval*.range](#interval_range) are also provided as plural forms of the corresponding interval.\n\n# d3.timeMilliseconds(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/millisecond.js#L26 \"Source\")\n
# d3.utcMilliseconds(start, stop[, step])\n\nAliases for [d3.timeMillisecond](#timeMillisecond).[range](#interval_range) and [d3.utcMillisecond](#timeMillisecond).[range](#interval_range).\n\n# d3.timeSeconds(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/second.js#L15 \"Source\")\n
# d3.utcSeconds(start, stop[, step])\n\nAliases for [d3.timeSecond](#timeSecond).[range](#interval_range) and [d3.utcSecond](#timeSecond).[range](#interval_range).\n\n# d3.timeMinutes(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/minute.js#L15 \"Source\")\n
# d3.utcMinutes(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcMinute.js#L15 \"Source\")\n\nAliases for [d3.timeMinute](#timeMinute).[range](#interval_range) and [d3.utcMinute](#timeMinute).[range](#interval_range).\n\n# d3.timeHours(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/hour.js#L17 \"Source\")\n
# d3.utcHours(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcHour.js#L15 \"Source\")\n\nAliases for [d3.timeHour](#timeHour).[range](#interval_range) and [d3.utcHour](#timeHour).[range](#interval_range).\n\n# d3.timeDays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/day.js#L15 \"Source\")\n
# d3.utcDays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcDay.js#L15 \"Source\")\n\nAliases for [d3.timeDay](#timeDay).[range](#interval_range) and [d3.utcDay](#timeDay).[range](#interval_range).\n\n# d3.timeWeeks(start, stop[, step])\n
# d3.utcWeeks(start, stop[, step])\n\nAliases for [d3.timeWeek](#timeWeek).[range](#interval_range) and [d3.utcWeek](#timeWeek).[range](#interval_range).\n\n# d3.timeSundays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L23 \"Source\")\n
# d3.utcSundays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L23 \"Source\")\n\nAliases for [d3.timeSunday](#timeSunday).[range](#interval_range) and [d3.utcSunday](#timeSunday).[range](#interval_range).\n\n# d3.timeMondays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L24 \"Source\")\n
# d3.utcMondays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L24 \"Source\")\n\nAliases for [d3.timeMonday](#timeMonday).[range](#interval_range) and [d3.utcMonday](#timeMonday).[range](#interval_range).\n\n# d3.timeTuesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L25 \"Source\")\n
# d3.utcTuesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L25 \"Source\")\n\nAliases for [d3.timeTuesday](#timeTuesday).[range](#interval_range) and [d3.utcTuesday](#timeTuesday).[range](#interval_range).\n\n# d3.timeWednesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L26 \"Source\")\n
# d3.utcWednesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L26 \"Source\")\n\nAliases for [d3.timeWednesday](#timeWednesday).[range](#interval_range) and [d3.utcWednesday](#timeWednesday).[range](#interval_range).\n\n# d3.timeThursdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L27 \"Source\")\n
# d3.utcThursdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L27 \"Source\")\n\nAliases for [d3.timeThursday](#timeThursday).[range](#interval_range) and [d3.utcThursday](#timeThursday).[range](#interval_range).\n\n# d3.timeFridays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L28 \"Source\")\n
# d3.utcFridays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L28 \"Source\")\n\nAliases for [d3.timeFriday](#timeFriday).[range](#interval_range) and [d3.utcFriday](#timeFriday).[range](#interval_range).\n\n# d3.timeSaturdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L29 \"Source\")\n
# d3.utcSaturdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L29 \"Source\")\n\nAliases for [d3.timeSaturday](#timeSaturday).[range](#interval_range) and [d3.utcSaturday](#timeSaturday).[range](#interval_range).\n\n# d3.timeMonths(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/month.js#L15 \"Source\")\n
# d3.utcMonths(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcMonth.js#L15 \"Source\")\n\nAliases for [d3.timeMonth](#timeMonth).[range](#interval_range) and [d3.utcMonth](#timeMonth).[range](#interval_range).\n\n# d3.timeYears(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/year.js#L26 \"Source\")\n
# d3.utcYears(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcYear.js#L26 \"Source\")\n\nAliases for [d3.timeYear](#timeYear).[range](#interval_range) and [d3.utcYear](#timeYear).[range](#interval_range).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-time", "error": "[Circular]", "extraneous": false, "_deduped": "d3-time" }, "d3-time-format": { "_from": "d3-time-format@2", "_id": "d3-time-format@2.3.0", "_inBundle": false, "_integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", "_location": "/d3-time-format", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-time-format@2", "name": "d3-time-format", "escapedName": "d3-time-format", "rawSpec": "2", "saveSpec": "[Circular]", "fetchSpec": "2" }, "_requiredBy": [ "/d3", "/d3-scale" ], "_resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", "_shasum": "107bdc028667788a8924ba040faf1fbccd5a7850", "_spec": "d3-time-format@2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-time-format/issues" }, "dependencies": {}, "deprecated": false, "description": "A JavaScript time formatter and parser inspired by strftime and strptime.", "devDependencies": { "d3-queue": "3", "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js", "locale/*.json" ], "homepage": "https://d3js.org/d3-time-format/", "jsdelivr": "dist/d3-time-format.min.js", "keywords": [ "d3", "d3-module", "time", "format", "strftime", "strptime" ], "license": "BSD-3-Clause", "main": "dist/d3-time-format.js", "module": "src/index.js", "name": "d3-time-format", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-time-format.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "TZ=America/Los_Angeles tape 'test/**/*-test.js' && eslint src" }, "sideEffects": [ "./src/defaultLocale.js" ], "unpkg": "dist/d3-time-format.min.js", "version": "2.3.0", "readme": "# d3-time-format\n\nThis module provides a JavaScript implementation of the venerable [strptime](http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html) and [strftime](http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html) functions from the C standard library, and can be used to parse or format [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) in a variety of locale-specific representations. To format a date, create a [formatter](#locale_format) from a specifier (a string with the desired format *directives*, indicated by `%`); then pass a date to the formatter, which returns a string. For example, to convert the current date to a human-readable string:\n\n```js\nvar formatTime = d3.timeFormat(\"%B %d, %Y\");\nformatTime(new Date); // \"June 30, 2015\"\n```\n\nLikewise, to convert a string back to a date, create a [parser](#locale_parse):\n\n```js\nvar parseTime = d3.timeParse(\"%B %d, %Y\");\nparseTime(\"June 30, 2015\"); // Tue Jun 30 2015 00:00:00 GMT-0700 (PDT)\n```\n\nYou can implement more elaborate conditional time formats, too. For example, here’s a [multi-scale time format](http://bl.ocks.org/mbostock/4149176) using [time intervals](https://github.com/d3/d3-time):\n\n```js\nvar formatMillisecond = d3.timeFormat(\".%L\"),\n formatSecond = d3.timeFormat(\":%S\"),\n formatMinute = d3.timeFormat(\"%I:%M\"),\n formatHour = d3.timeFormat(\"%I %p\"),\n formatDay = d3.timeFormat(\"%a %d\"),\n formatWeek = d3.timeFormat(\"%b %d\"),\n formatMonth = d3.timeFormat(\"%B\"),\n formatYear = d3.timeFormat(\"%Y\");\n\nfunction multiFormat(date) {\n return (d3.timeSecond(date) < date ? formatMillisecond\n : d3.timeMinute(date) < date ? formatSecond\n : d3.timeHour(date) < date ? formatMinute\n : d3.timeDay(date) < date ? formatHour\n : d3.timeMonth(date) < date ? (d3.timeWeek(date) < date ? formatDay : formatWeek)\n : d3.timeYear(date) < date ? formatMonth\n : formatYear)(date);\n}\n```\n\nThis module is used by D3 [time scales](https://github.com/d3/d3-scale/blob/master/README.md#time-scales) to generate human-readable ticks.\n\n## Installing\n\nIf you use NPM, `npm install d3-time-format`. Otherwise, download the [latest release](https://github.com/d3/d3-time-format/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-time-format.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\n\n\n```\n\nLocale files are published to npm and can be loaded using [d3.json](https://github.com/d3/d3-request/blob/master/README.md#json). For example, to set Russian as the default locale:\n\n```js\nd3.json(\"https://cdn.jsdelivr.net/npm/d3-time-format@2/locale/ru-RU.json\", function(error, locale) {\n if (error) throw error;\n\n d3.timeFormatDefaultLocale(locale);\n\n var format = d3.timeFormat(\"%c\");\n\n console.log(format(new Date)); // понедельник, 5 декабря 2016 г. 10:31:59\n});\n```\n\n## API Reference\n\n# d3.timeFormat(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js#L4 \"Source\")\n\nAn alias for [*locale*.format](#locale_format) on the [default locale](#timeFormatDefaultLocale).\n\n# d3.timeParse(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js#L5 \"Source\")\n\nAn alias for [*locale*.parse](#locale_parse) on the [default locale](#timeFormatDefaultLocale).\n\n# d3.utcFormat(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js#L6 \"Source\")\n\nAn alias for [*locale*.utcFormat](#locale_utcFormat) on the [default locale](#timeFormatDefaultLocale).\n\n# d3.utcParse(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js#L7 \"Source\")\n\nAn alias for [*locale*.utcParse](#locale_utcParse) on the [default locale](#timeFormatDefaultLocale).\n\n# d3.isoFormat [<>](https://github.com/d3/d3-time-format/blob/master/src/isoFormat.js \"Source\")\n\nThe full [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC time formatter. Where available, this method will use [Date.toISOString](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toISOString) to format.\n\n# d3.isoParse [<>](https://github.com/d3/d3-time-format/blob/master/src/isoParse.js \"Source\")\n\nThe full [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC time parser. Where available, this method will use the [Date constructor](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date) to parse strings. If you depend on strict validation of the input format according to ISO 8601, you should construct a [UTC parser function](#utcParse):\n\n```js\nvar strictIsoParse = d3.utcParse(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n```\n\n# locale.format(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js#L293 \"Source\")\n\nReturns a new formatter for the given string *specifier*. The specifier string may contain the following directives:\n\n* `%a` - abbreviated weekday name.*\n* `%A` - full weekday name.*\n* `%b` - abbreviated month name.*\n* `%B` - full month name.*\n* `%c` - the locale’s date and time, such as `%x, %X`.*\n* `%d` - zero-padded day of the month as a decimal number [01,31].\n* `%e` - space-padded day of the month as a decimal number [ 1,31]; equivalent to `%_d`.\n* `%f` - microseconds as a decimal number [000000, 999999].\n* `%g` - ISO 8601 week-based year without century as a decimal number [00,99].\n* `%G` - ISO 8601 week-based year with century as a decimal number.\n* `%H` - hour (24-hour clock) as a decimal number [00,23].\n* `%I` - hour (12-hour clock) as a decimal number [01,12].\n* `%j` - day of the year as a decimal number [001,366].\n* `%m` - month as a decimal number [01,12].\n* `%M` - minute as a decimal number [00,59].\n* `%L` - milliseconds as a decimal number [000, 999].\n* `%p` - either AM or PM.*\n* `%q` - quarter of the year as a decimal number [1,4].\n* `%Q` - milliseconds since UNIX epoch.\n* `%s` - seconds since UNIX epoch.\n* `%S` - second as a decimal number [00,61].\n* `%u` - Monday-based (ISO 8601) weekday as a decimal number [1,7].\n* `%U` - Sunday-based week of the year as a decimal number [00,53].\n* `%V` - ISO 8601 week of the year as a decimal number [01, 53].\n* `%w` - Sunday-based weekday as a decimal number [0,6].\n* `%W` - Monday-based week of the year as a decimal number [00,53].\n* `%x` - the locale’s date, such as `%-m/%-d/%Y`.*\n* `%X` - the locale’s time, such as `%-I:%M:%S %p`.*\n* `%y` - year without century as a decimal number [00,99].\n* `%Y` - year with century as a decimal number, such as `1999`.\n* `%Z` - time zone offset, such as `-0700`, `-07:00`, `-07`, or `Z`.\n* `%%` - a literal percent sign (`%`).\n\nDirectives marked with an asterisk (\\*) may be affected by the [locale definition](#locales).\n\nFor `%U`, all days in a new year preceding the first Sunday are considered to be in week 0. For `%W`, all days in a new year preceding the first Monday are considered to be in week 0. Week numbers are computed using [*interval*.count](https://github.com/d3/d3-time/blob/master/README.md#interval_count). For example, 2015-52 and 2016-00 represent Monday, December 28, 2015, while 2015-53 and 2016-01 represent Monday, January 4, 2016. This differs from the [ISO week date](https://en.wikipedia.org/wiki/ISO_week_date) specification (`%V`), which uses a more complicated definition!\n\nFor `%V`,`%g` and `%G`, per the [strftime man page](http://man7.org/linux/man-pages/man3/strftime.3.html):\n\n> In this system, weeks start on a Monday, and are numbered from 01, for the first week, up to 52 or 53, for the last week. Week 1 is the first week where four or more days fall within the new year (or, synonymously, week 01 is: the first week of the year that contains a Thursday; or, the week that has 4 January in it). If the ISO week number belongs to the previous or next year, that year is used instead.\n\nThe `%` sign indicating a directive may be immediately followed by a padding modifier:\n\n* `0` - zero-padding\n* `_` - space-padding\n* `-` - disable padding\n\nIf no padding modifier is specified, the default is `0` for all directives except `%e`, which defaults to `_`. (In some implementations of strftime and strptime, a directive may include an optional field width or precision; this feature is not yet implemented.)\n\nThe returned function formats a specified *[date](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)*, returning the corresponding string.\n\n```js\nvar formatMonth = d3.timeFormat(\"%B\"),\n formatDay = d3.timeFormat(\"%A\"),\n date = new Date(2014, 4, 1); // Thu May 01 2014 00:00:00 GMT-0700 (PDT)\n\nformatMonth(date); // \"May\"\nformatDay(date); // \"Thursday\"\n```\n\n# locale.parse(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js#L298 \"Source\")\n\nReturns a new parser for the given string *specifier*. The specifier string may contain the same directives as [*locale*.format](#locale_format). The `%d` and `%e` directives are considered equivalent for parsing.\n\nThe returned function parses a specified *string*, returning the corresponding [date](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date) or null if the string could not be parsed according to this format’s specifier. Parsing is strict: if the specified string does not exactly match the associated specifier, this method returns null. For example, if the associated specifier is `%Y-%m-%dT%H:%M:%SZ`, then the string `\"2011-07-01T19:15:28Z\"` will be parsed as expected, but `\"2011-07-01T19:15:28\"`, `\"2011-07-01 19:15:28\"` and `\"2011-07-01\"` will return null. (Note that the literal `Z` here is different from the time zone offset directive `%Z`.) If a more flexible parser is desired, try multiple formats sequentially until one returns non-null.\n\n# locale.utcFormat(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js#L303 \"Source\")\n\nEquivalent to [*locale*.format](#locale_format), except all directives are interpreted as [Coordinated Universal Time (UTC)](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) rather than local time.\n\n# locale.utcParse(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js#L308 \"Source\")\n\nEquivalent to [*locale*.parse](#locale_parse), except all directives are interpreted as [Coordinated Universal Time (UTC)](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) rather than local time.\n\n### Locales\n\n# d3.timeFormatLocale(definition) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js \"Source\")\n\nReturns a *locale* object for the specified *definition* with [*locale*.format](#locale_format), [*locale*.parse](#locale_parse), [*locale*.utcFormat](#locale_utcFormat), [*locale*.utcParse](#locale_utcParse) methods. The *definition* must include the following properties:\n\n* `dateTime` - the date and time (`%c`) format specifier (e.g., `\"%a %b %e %X %Y\"`).\n* `date` - the date (`%x`) format specifier (e.g., `\"%m/%d/%Y\"`).\n* `time` - the time (`%X`) format specifier (e.g., `\"%H:%M:%S\"`).\n* `periods` - the A.M. and P.M. equivalents (e.g., `[\"AM\", \"PM\"]`).\n* `days` - the full names of the weekdays, starting with Sunday.\n* `shortDays` - the abbreviated names of the weekdays, starting with Sunday.\n* `months` - the full names of the months (starting with January).\n* `shortMonths` - the abbreviated names of the months (starting with January).\n\nFor an example, see [Localized Time Axis II](https://bl.ocks.org/mbostock/805115ebaa574e771db1875a6d828949).\n\n# d3.timeFormatDefaultLocale(definition) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js \"Source\")\n\nEquivalent to [d3.timeFormatLocale](#timeFormatLocale), except it also redefines [d3.timeFormat](#timeFormat), [d3.timeParse](#timeParse), [d3.utcFormat](#utcFormat) and [d3.utcParse](#utcParse) to the new locale’s [*locale*.format](#locale_format), [*locale*.parse](#locale_parse), [*locale*.utcFormat](#locale_utcFormat) and [*locale*.utcParse](#locale_utcParse). If you do not set a default locale, it defaults to [U.S. English](https://github.com/d3/d3-time-format/blob/master/locale/en-US.json).\n\nFor an example, see [Localized Time Axis](https://bl.ocks.org/mbostock/6f1cc065d4d172bcaf322e399aa8d62f).\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-time": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-time-format", "error": "[Circular]", "extraneous": false, "_deduped": "d3-time-format" } }, "deprecated": false, "description": "Encodings that map abstract data to visual representation.", "devDependencies": { "d3-color": "1", "eslint": "5", "rollup": "0.64", "rollup-plugin-terser": "1", "tape": "4" }, "homepage": "https://d3js.org/d3-scale/", "jsdelivr": "dist/d3-scale.min.js", "keywords": [ "d3", "d3-module", "scale", "visualization" ], "license": "BSD-3-Clause", "main": "dist/d3-scale.js", "module": "src/index.js", "name": "d3-scale", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-scale.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "TZ=America/Los_Angeles tape 'test/**/*-test.js' && eslint src" }, "unpkg": "dist/d3-scale.min.js", "version": "2.2.2", "readme": "# d3-scale\n\nScales are a convenient abstraction for a fundamental task in visualization: mapping a dimension of abstract data to a visual representation. Although most often used for position-encoding quantitative data, such as mapping a measurement in meters to a position in pixels for dots in a scatterplot, scales can represent virtually any visual encoding, such as diverging colors, stroke widths, or symbol size. Scales can also be used with virtually any type of data, such as named categorical data or discrete data that requires sensible breaks.\n\nFor [continuous](#continuous-scales) quantitative data, you typically want a [linear scale](#linear-scales). (For time series data, a [time scale](#time-scales).) If the distribution calls for it, consider transforming data using a [power](#power-scales) or [log](#log-scales) scale. A [quantize scale](#quantize-scales) may aid differentiation by rounding continuous data to a fixed set of discrete values; similarly, a [quantile scale](#quantile-scales) computes quantiles from a sample population, and a [threshold scale](#threshold-scales) allows you to specify arbitrary breaks in continuous data.\n\nFor discrete ordinal (ordered) or categorical (unordered) data, an [ordinal scale](#ordinal-scales) specifies an explicit mapping from a set of data values to a corresponding set of visual attributes (such as colors). The related [band](#band-scales) and [point](#point-scales) scales are useful for position-encoding ordinal data, such as bars in a bar chart or dots in an categorical scatterplot.\n\nThis repository does not provide color schemes; see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for color schemes designed to work with d3-scale.\n\nScales have no intrinsic visual representation. However, most scales can [generate](#continuous_ticks) and [format](#continuous_tickFormat) ticks for reference marks to aid in the construction of axes.\n\nFor a longer introduction, see these recommended tutorials:\n\n* [Introducing d3-scale](https://medium.com/@mbostock/introducing-d3-scale-61980c51545f) by Mike Bostock\n\n* Chapter 7. Scales of [*Interactive Data Visualization for the Web*](http://alignedleft.com/work/d3-book) by Scott Murray\n\n* [d3: scales, and color.](http://www.jeromecukier.net/2011/08/11/d3-scales-and-color/) by Jérôme Cukier\n\n## Installing\n\nIf you use NPM, `npm install d3-scale`. Otherwise, download the [latest release](https://github.com/d3/d3-scale/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-scale.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\n\n\n\n\n\n\n\n\n```\n\n(You can omit d3-time and d3-time-format if you’re not using [d3.scaleTime](#scaleTime) or [d3.scaleUtc](#scaleUtc).)\n\n## API Reference\n\n* [Continuous](#continuous-scales) ([Linear](#linear-scales), [Power](#power-scales), [Log](#log-scales), [Identity](#identity-scales), [Time](#time-scales))\n* [Sequential](#sequential-scales)\n* [Diverging](#diverging-scales)\n* [Quantize](#quantize-scales)\n* [Quantile](#quantile-scales)\n* [Threshold](#threshold-scales)\n* [Ordinal](#ordinal-scales) ([Band](#band-scales), [Point](#point-scales))\n\n### Continuous Scales\n\nContinuous scales map a continuous, quantitative input [domain](#continuous_domain) to a continuous output [range](#continuous_range). If the range is also numeric, the mapping may be [inverted](#continuous_invert). A continuous scale is not constructed directly; instead, try a [linear](#linear-scales), [power](#power-scales), [log](#log-scales), [identity](#identity-scales), [time](#time-scales) or [sequential color](#sequential-scales) scale.\n\n# continuous(value) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nGiven a *value* from the [domain](#continuous_domain), returns the corresponding value from the [range](#continuous_range). If the given *value* is outside the domain, and [clamping](#continuous_clamp) is not enabled, the mapping may be extrapolated such that the returned value is outside the range. For example, to apply a position encoding:\n\n```js\nvar x = d3.scaleLinear()\n .domain([10, 130])\n .range([0, 960]);\n\nx(20); // 80\nx(50); // 320\n```\n\nOr to apply a color encoding:\n\n```js\nvar color = d3.scaleLinear()\n .domain([10, 100])\n .range([\"brown\", \"steelblue\"]);\n\ncolor(20); // \"#9a3439\"\ncolor(50); // \"#7b5167\"\n```\n\nOr, in shortand:\n\n```js\nvar x = d3.scaleLinear([10, 130], [0, 960]);\nvar color = d3.scaleLinear([10, 100], [\"brown\", \"steelblue\"]);\n```\n\n# continuous.invert(value) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nGiven a *value* from the [range](#continuous_range), returns the corresponding value from the [domain](#continuous_domain). Inversion is useful for interaction, say to determine the data value corresponding to the position of the mouse. For example, to invert a position encoding:\n\n```js\nvar x = d3.scaleLinear()\n .domain([10, 130])\n .range([0, 960]);\n\nx.invert(80); // 20\nx.invert(320); // 50\n```\n\nIf the given *value* is outside the range, and [clamping](#continuous_clamp) is not enabled, the mapping may be extrapolated such that the returned value is outside the domain. This method is only supported if the range is numeric. If the range is not numeric, returns NaN.\n\nFor a valid value *y* in the range, continuous(continuous.invert(y)) approximately equals *y*; similarly, for a valid value *x* in the domain, continuous.invert(continuous(x)) approximately equals *x*. The scale and its inverse may not be exact due to the limitations of floating point precision.\n\n# continuous.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nIf *domain* is specified, sets the scale’s domain to the specified array of numbers. The array must contain two or more elements. If the elements in the given array are not numbers, they will be coerced to numbers. If *domain* is not specified, returns a copy of the scale’s current domain.\n\nAlthough continuous scales typically have two values each in their domain and range, specifying more than two values produces a piecewise scale. For example, to create a [diverging color scale](#diverging-scales) that interpolates between white and red for negative values, and white and green for positive values, say:\n\n```js\nvar color = d3.scaleLinear()\n .domain([-1, 0, 1])\n .range([\"red\", \"white\", \"green\"]);\n\ncolor(-0.5); // \"rgb(255, 128, 128)\"\ncolor(+0.5); // \"rgb(128, 192, 128)\"\n```\n\nInternally, a piecewise scale performs a [binary search](https://github.com/d3/d3-array#bisect) for the range interpolator corresponding to the given domain value. Thus, the domain must be in ascending or descending order. If the domain and range have different lengths *N* and *M*, only the first *min(N,M)* elements in each are observed.\n\n# continuous.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nIf *range* is specified, sets the scale’s range to the specified array of values. The array must contain two or more elements. Unlike the [domain](#continuous_domain), elements in the given array need not be numbers; any value that is supported by the underlying [interpolator](#continuous_interpolate) will work, though note that numeric ranges are required for [invert](#continuous_invert). If *range* is not specified, returns a copy of the scale’s current range. See [*continuous*.interpolate](#continuous_interpolate) for more examples.\n\n# continuous.rangeRound([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nSets the scale’s [*range*](#continuous_range) to the specified array of values while also setting the scale’s [interpolator](#continuous_interpolate) to [interpolateRound](https://github.com/d3/d3-interpolate#interpolateRound). This is a convenience method equivalent to:\n\n```js\ncontinuous\n .range(range)\n .interpolate(d3.interpolateRound);\n```\n\nThe rounding interpolator is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles. Note that this interpolator can only be used with numeric ranges.\n\n# continuous.clamp(clamp) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nIf *clamp* is specified, enables or disables clamping accordingly. If clamping is disabled and the scale is passed a value outside the [domain](#continuous_domain), the scale may return a value outside the [range](#continuous_range) through extrapolation. If clamping is enabled, the return value of the scale is always within the scale’s range. Clamping similarly applies to [*continuous*.invert](#continuous_invert). For example:\n\n```js\nvar x = d3.scaleLinear()\n .domain([10, 130])\n .range([0, 960]);\n\nx(-10); // -160, outside range\nx.invert(-160); // -10, outside domain\n\nx.clamp(true);\nx(-10); // 0, clamped to range\nx.invert(-160); // 10, clamped to domain\n```\n\nIf *clamp* is not specified, returns whether or not the scale currently clamps values to within the range.\n\n# continuous.unknown([value]) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nIf *value* is specified, sets the output value of the scale for undefined (or NaN) input values and returns this scale. If *value* is not specified, returns the current unknown value, which defaults to undefined.\n\n# continuous.interpolate(interpolate) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nIf *interpolate* is specified, sets the scale’s [range](#continuous_range) interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range; these interpolators then map a normalized domain parameter *t* in [0, 1] to the corresponding value in the range. If *factory* is not specified, returns the scale’s current interpolator factory, which defaults to [interpolate](https://github.com/d3/d3-interpolate#interpolate). See [d3-interpolate](https://github.com/d3/d3-interpolate) for more interpolators.\n\nFor example, consider a diverging color scale with three colors in the range:\n\n```js\nvar color = d3.scaleLinear()\n .domain([-100, 0, +100])\n .range([\"red\", \"white\", \"green\"]);\n```\n\nTwo interpolators are created internally by the scale, equivalent to:\n\n```js\nvar i0 = d3.interpolate(\"red\", \"white\"),\n i1 = d3.interpolate(\"white\", \"green\");\n```\n\nA common reason to specify a custom interpolator is to change the color space of interpolation. For example, to use [HCL](https://github.com/d3/d3-interpolate#interpolateHcl):\n\n```js\nvar color = d3.scaleLinear()\n .domain([10, 100])\n .range([\"brown\", \"steelblue\"])\n .interpolate(d3.interpolateHcl);\n```\n\nOr for [Cubehelix](https://github.com/d3/d3-interpolate#interpolateCubehelix) with a custom gamma:\n\n```js\nvar color = d3.scaleLinear()\n .domain([10, 100])\n .range([\"brown\", \"steelblue\"])\n .interpolate(d3.interpolateCubehelix.gamma(3));\n```\n\nNote: the [default interpolator](https://github.com/d3/d3-interpolate#interpolate) **may reuse return values**. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place. If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance); however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.\n\n# continuous.ticks([count])\n\nReturns approximately *count* representative values from the scale’s [domain](#continuous_domain). If *count* is not specified, it defaults to 10. The returned tick values are uniformly spaced, have human-readable values (such as multiples of powers of 10), and are guaranteed to be within the extent of the domain. Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data. The specified *count* is only a hint; the scale may return more or fewer values depending on the domain. See also d3-array’s [ticks](https://github.com/d3/d3-array#ticks).\n\n# continuous.tickFormat([count[, specifier]]) [<>](https://github.com/d3/d3-scale/blob/master/src/tickFormat.js \"Source\")\n\nReturns a [number format](https://github.com/d3/d3-format) function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values. The specified *count* should have the same value as the count that is used to generate the [tick values](#continuous_ticks).\n\nAn optional *specifier* allows a [custom format](https://github.com/d3/d3-format#locale_format) where the precision of the format is automatically set by the scale as appropriate for the tick interval. For example, to format percentage change, you might say:\n\n```js\nvar x = d3.scaleLinear()\n .domain([-1, 1])\n .range([0, 960]);\n\nvar ticks = x.ticks(5),\n tickFormat = x.tickFormat(5, \"+%\");\n\nticks.map(tickFormat); // [\"-100%\", \"-50%\", \"+0%\", \"+50%\", \"+100%\"]\n```\n\nIf *specifier* uses the format type `s`, the scale will return a [SI-prefix format](https://github.com/d3/d3-format#locale_formatPrefix) based on the largest value in the domain. If the *specifier* already specifies a precision, this method is equivalent to [*locale*.format](https://github.com/d3/d3-format#locale_format).\n\nSee also [d3.tickFormat](#tickFormat).\n\n# continuous.nice([count]) [<>](https://github.com/d3/d3-scale/blob/master/src/nice.js \"Source\")\n\nExtends the [domain](#continuous_domain) so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. An optional tick *count* argument allows greater control over the step size used to extend the bounds, guaranteeing that the returned [ticks](#continuous_ticks) will exactly cover the domain. Nicing is useful if the domain is computed from data, say using [extent](https://github.com/d3/d3-array#extent), and may be irregular. For example, for a domain of [0.201479…, 0.996679…], a nice domain might be [0.2, 1.0]. If the domain has more than two values, nicing the domain only affects the first and last value. See also d3-array’s [tickStep](https://github.com/d3/d3-array#tickStep).\n\nNicing a scale only modifies the current domain; it does not automatically nice domains that are subsequently set using [*continuous*.domain](#continuous_domain). You must re-nice the scale after setting the new domain, if desired.\n\n# continuous.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nReturns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.\n\n# d3.tickFormat(start, stop, count[, specifier]) [<>](https://github.com/d3/d3-scale/blob/master/src/tickFormat.js \"Source\")\n\nReturns a [number format](https://github.com/d3/d3-format) function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values, as determined by [d3.tickStep](https://github.com/d3/d3-array/blob/master/README.md#tickStep).\n\nAn optional *specifier* allows a [custom format](https://github.com/d3/d3-format#locale_format) where the precision of the format is automatically set by the scale as appropriate for the tick interval. For example, to format percentage change, you might say:\n\n```js\nvar tickFormat = d3.tickFormat(-1, 1, 5, \"+%\");\n\ntickFormat(-0.5); // \"-50%\"\n```\n\nIf *specifier* uses the format type `s`, the scale will return a [SI-prefix format](https://github.com/d3/d3-format#locale_formatPrefix) based on the larger absolute value of *start* and *stop*. If the *specifier* already specifies a precision, this method is equivalent to [*locale*.format](https://github.com/d3/d3-format#locale_format).\n\n#### Linear Scales\n\n# d3.scaleLinear([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/linear.js \"Source\")\n\nConstructs a new [continuous scale](#continuous-scales) with the specified [domain](#continuous_domain) and [range](#continuous_range), the [default](https://github.com/d3/d3-interpolate#interpolate) [interpolator](#continuous_interpolate) and [clamping](#continuous_clamp) disabled. If either *domain* or *range* are not specified, each defaults to [0, 1]. Linear scales are a good default choice for continuous quantitative data because they preserve proportional differences. Each range value *y* can be expressed as a function of the domain value *x*: *y* = *mx* + *b*.\n\n#### Power Scales\n\nPower scales are similar to [linear scales](#linear-scales), except an exponential transform is applied to the input domain value before the output range value is computed. Each range value *y* can be expressed as a function of the domain value *x*: *y* = *mx^k* + *b*, where *k* is the [exponent](#pow_exponent) value. Power scales also support negative domain values, in which case the input value and the resulting output value are multiplied by -1.\n\n# d3.scalePow([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nConstructs a new [continuous scale](#continuous-scales) with the specified [domain](#continuous_domain) and [range](#continuous_range), the [exponent](#pow_exponent) 1, the [default](https://github.com/d3/d3-interpolate#interpolate) [interpolator](#continuous_interpolate) and [clamping](#continuous_clamp) disabled. If either *domain* or *range* are not specified, each defaults to [0, 1]. (Note that this is effectively a [linear](#linear-scales) scale until you set a different exponent.)\n\n# pow(value) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*](#_continuous).\n\n# pow.invert(value) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.invert](#continuous_invert).\n\n# pow.exponent([exponent]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nIf *exponent* is specified, sets the current exponent to the given numeric value. If *exponent* is not specified, returns the current exponent, which defaults to 1. (Note that this is effectively a [linear](#linear-scales) scale until you set a different exponent.)\n\n# pow.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.domain](#continuous_domain).\n\n# pow.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.range](#continuous_range).\n\n# pow.rangeRound([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.rangeRound](#continuous_rangeRound).\n\n# pow.clamp(clamp) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.clamp](#continuous_clamp).\n\n# pow.interpolate(interpolate) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.interpolate](#continuous_interpolate).\n\n# pow.ticks([count]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.ticks](#continuous_ticks).\n\n# pow.tickFormat([count[, specifier]]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.tickFormat](#continuous_tickFormat).\n\n# pow.nice([count]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.nice](#continuous_nice).\n\n# pow.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nSee [*continuous*.copy](#continuous_copy).\n\n# d3.scaleSqrt([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/pow.js \"Source\")\n\nConstructs a new [continuous](#continuous-scales) [power scale](#power-scales) with the specified [domain](#continuous_domain) and [range](#continuous_range), the [exponent](#pow_exponent) 0.5, the [default](https://github.com/d3/d3-interpolate#interpolate) [interpolator](#continuous_interpolate) and [clamping](#continuous_clamp) disabled. If either *domain* or *range* are not specified, each defaults to [0, 1]. This is a convenience method equivalent to `d3.scalePow(…).exponent(0.5)`.\n\n#### Log Scales\n\nLog scales are similar to [linear scales](#linear-scales), except a logarithmic transform is applied to the input domain value before the output range value is computed. The mapping to the range value *y* can be expressed as a function of the domain value *x*: *y* = *m* log(x) + *b*.\n\nAs log(0) = -∞, a log scale domain must be **strictly-positive or strictly-negative**; the domain must not include or cross zero. A log scale with a positive domain has a well-defined behavior for positive values, and a log scale with a negative domain has a well-defined behavior for negative values. (For a negative domain, input and output values are implicitly multiplied by -1.) The behavior of the scale is undefined if you pass a negative value to a log scale with a positive domain or vice versa.\n\n# d3.scaleLog([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nConstructs a new [continuous scale](#continuous-scales) with the specified [domain](#log_domain) and [range](#log_range), the [base](#log_base) 10, the [default](https://github.com/d3/d3-interpolate#interpolate) [interpolator](#log_interpolate) and [clamping](#log_clamp) disabled. If *domain* is not specified, it defaults to [1, 10]. If *range* is not specified, it defaults to [0, 1].\n\n# log(value) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nSee [*continuous*](#_continuous).\n\n# log.invert(value) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nSee [*continuous*.invert](#continuous_invert).\n\n# log.base([base]) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nIf *base* is specified, sets the base for this logarithmic scale to the specified value. If *base* is not specified, returns the current base, which defaults to 10.\n\n# log.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nSee [*continuous*.domain](#continuous_domain).\n\n# log.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/continuous.js \"Source\")\n\nSee [*continuous*.range](#continuous_range).\n\n# log.rangeRound([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nSee [*continuous*.rangeRound](#continuous_rangeRound).\n\n# log.clamp(clamp) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nSee [*continuous*.clamp](#continuous_clamp).\n\n# log.interpolate(interpolate) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nSee [*continuous*.interpolate](#continuous_interpolate).\n\n# log.ticks([count]) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nLike [*continuous*.ticks](#continuous_ticks), but customized for a log scale. If the [base](#log_base) is an integer, the returned ticks are uniformly spaced within each integer power of base; otherwise, one tick per power of base is returned. The returned ticks are guaranteed to be within the extent of the domain. If the orders of magnitude in the [domain](#log_domain) is greater than *count*, then at most one tick per power is returned. Otherwise, the tick values are unfiltered, but note that you can use [*log*.tickFormat](#log_tickFormat) to filter the display of tick labels. If *count* is not specified, it defaults to 10.\n\n# log.tickFormat([count[, specifier]]) [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nLike [*continuous*.tickFormat](#continuous_tickFormat), but customized for a log scale. The specified *count* typically has the same value as the count that is used to generate the [tick values](#continuous_ticks). If there are too many ticks, the formatter may return the empty string for some of the tick labels; however, note that the ticks are still shown. To disable filtering, specify a *count* of Infinity. When specifying a count, you may also provide a format *specifier* or format function. For example, to get a tick formatter that will display 20 ticks of a currency, say `log.tickFormat(20, \"$,f\")`. If the specifier does not have a defined precision, the precision will be set automatically by the scale, returning the appropriate format. This provides a convenient way of specifying a format whose precision will be automatically set by the scale.\n\n# log.nice() [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nLike [*continuous*.nice](#continuous_nice), except extends the domain to integer powers of [base](#log_base). For example, for a domain of [0.201479…, 0.996679…], and base 10, the nice domain is [0.1, 1]. If the domain has more than two values, nicing the domain only affects the first and last value.\n\n# log.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/log.js \"Source\")\n\nSee [*continuous*.copy](#continuous_copy).\n\n#### Symlog Scales\n\nSee [A bi-symmetric log transformation for wide-range data](https://www.researchgate.net/profile/John_Webber4/publication/233967063_A_bi-symmetric_log_transformation_for_wide-range_data/links/0fcfd50d791c85082e000000.pdf) by Webber for more.\n\n# d3.scaleSymlog([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/symlog.js \"Source\")\n\nConstructs a new [continuous scale](#continuous-scales) with the specified [domain](#continuous_domain) and [range](#continuous_range), the [constant](#symlog_constant) 1, the [default](https://github.com/d3/d3-interpolate#interpolate) [interpolator](#continuous_interpolate) and [clamping](#continuous_clamp) disabled. If *domain* is not specified, it defaults to [0, 1]. If *range* is not specified, it defaults to [0, 1].\n\n# symlog.constant([constant]) [<>](https://github.com/d3/d3-scale/blob/master/src/symlog.js \"Source\")\n\nIf *constant* is specified, sets the symlog constant to the specified number and returns this scale; otherwise returns the current value of the symlog constant, which defaults to 1. See “A bi-symmetric log transformation for wide-range data” by Webber for more.\n\n#### Identity Scales\n\nIdentity scales are a special case of [linear scales](#linear-scales) where the domain and range are identical; the scale and its invert method are thus the identity function. These scales are occasionally useful when working with pixel coordinates, say in conjunction with an axis or brush. Identity scales do not support [rangeRound](#continuous_rangeRound), [clamp](#continuous_clamp) or [interpolate](#continuous_interpolate).\n\n# d3.scaleIdentity([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/identity.js \"Source\")\n\nConstructs a new identity scale with the specified [domain](#continuous_domain) and [range](#continuous_range). If *range* is not specified, it defaults to [0, 1].\n\n#### Time Scales\n\nTime scales are a variant of [linear scales](#linear-scales) that have a temporal domain: domain values are coerced to [dates](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date) rather than numbers, and [invert](#continuous_invert) likewise returns a date. Time scales implement [ticks](#time_ticks) based on [calendar intervals](https://github.com/d3/d3-time), taking the pain out of generating axes for temporal domains.\n\nFor example, to create a position encoding:\n\n```js\nvar x = d3.scaleTime()\n .domain([new Date(2000, 0, 1), new Date(2000, 0, 2)])\n .range([0, 960]);\n\nx(new Date(2000, 0, 1, 5)); // 200\nx(new Date(2000, 0, 1, 16)); // 640\nx.invert(200); // Sat Jan 01 2000 05:00:00 GMT-0800 (PST)\nx.invert(640); // Sat Jan 01 2000 16:00:00 GMT-0800 (PST)\n```\n\nFor a valid value *y* in the range, time(time.invert(y)) equals *y*; similarly, for a valid value *x* in the domain, time.invert(time(x)) equals *x*. The invert method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.\n\n# d3.scaleTime([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n\nConstructs a new time scale with the specified [domain](#time_domain) and [range](#time_range), the [default](https://github.com/d3/d3-interpolate#interpolate) [interpolator](#time_interpolate) and [clamping](#time_clamp) disabled. If *domain* is not specified, it defaults to [2000-01-01, 2000-01-02]. If *range* is not specified, it defaults to [0, 1].\n\n# time(value) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n\nSee [*continuous*](#_continuous).\n\n# time.invert(value) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n\nSee [*continuous*.invert](#continuous_invert).\n\n# time.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n\nSee [*continuous*.domain](#continuous_domain).\n\n# time.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n\nSee [*continuous*.range](#continuous_range).\n\n# time.rangeRound([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n\nSee [*continuous*.rangeRound](#continuous_rangeRound).\n\n# time.clamp(clamp) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n\nSee [*continuous*.clamp](#continuous_clamp).\n\n# time.interpolate(interpolate) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n\nSee [*continuous*.interpolate](#continuous_interpolate).\n\n# time.ticks([count]) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n
# time.ticks([interval])\n\nReturns representative dates from the scale’s [domain](#time_domain). The returned tick values are uniformly-spaced (mostly), have sensible values (such as every day at midnight), and are guaranteed to be within the extent of the domain. Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data.\n\nAn optional *count* may be specified to affect how many ticks are generated. If *count* is not specified, it defaults to 10. The specified *count* is only a hint; the scale may return more or fewer values depending on the domain. For example, to create ten default ticks, say:\n\n```js\nvar x = d3.scaleTime();\n\nx.ticks(10);\n// [Sat Jan 01 2000 00:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 03:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 06:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 09:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 12:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 15:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 18:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 21:00:00 GMT-0800 (PST),\n// Sun Jan 02 2000 00:00:00 GMT-0800 (PST)]\n```\n\nThe following time intervals are considered for automatic ticks:\n\n* 1-, 5-, 15- and 30-second.\n* 1-, 5-, 15- and 30-minute.\n* 1-, 3-, 6- and 12-hour.\n* 1- and 2-day.\n* 1-week.\n* 1- and 3-month.\n* 1-year.\n\nIn lieu of a *count*, a [time *interval*](https://github.com/d3/d3-time#intervals) may be explicitly specified. To prune the generated ticks for a given time *interval*, use [*interval*.every](https://github.com/d3/d3-time#interval_every). For example, to generate ticks at 15-[minute](https://github.com/d3/d3-time#minute) intervals:\n\n```js\nvar x = d3.scaleTime()\n .domain([new Date(2000, 0, 1, 0), new Date(2000, 0, 1, 2)]);\n\nx.ticks(d3.timeMinute.every(15));\n// [Sat Jan 01 2000 00:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 00:15:00 GMT-0800 (PST),\n// Sat Jan 01 2000 00:30:00 GMT-0800 (PST),\n// Sat Jan 01 2000 00:45:00 GMT-0800 (PST),\n// Sat Jan 01 2000 01:00:00 GMT-0800 (PST),\n// Sat Jan 01 2000 01:15:00 GMT-0800 (PST),\n// Sat Jan 01 2000 01:30:00 GMT-0800 (PST),\n// Sat Jan 01 2000 01:45:00 GMT-0800 (PST),\n// Sat Jan 01 2000 02:00:00 GMT-0800 (PST)]\n```\n\nAlternatively, pass a test function to [*interval*.filter](https://github.com/d3/d3-time#interval_filter):\n\n```js\nx.ticks(d3.timeMinute.filter(function(d) {\n return d.getMinutes() % 15 === 0;\n}));\n```\n\nNote: in some cases, such as with day ticks, specifying a *step* can result in irregular spacing of ticks because time intervals have varying length.\n\n# time.tickFormat([count[, specifier]]) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n
# time.tickFormat([interval[, specifier]])\n\nReturns a time format function suitable for displaying [tick](#time_ticks) values. The specified *count* or *interval* is currently ignored, but is accepted for consistency with other scales such as [*continuous*.tickFormat](#continuous_tickFormat). If a format *specifier* is specified, this method is equivalent to [format](https://github.com/d3/d3-time-format#format). If *specifier* is not specified, the default time format is returned. The default multi-scale time format chooses a human-readable representation based on the specified date as follows:\n\n* `%Y` - for year boundaries, such as `2011`.\n* `%B` - for month boundaries, such as `February`.\n* `%b %d` - for week boundaries, such as `Feb 06`.\n* `%a %d` - for day boundaries, such as `Mon 07`.\n* `%I %p` - for hour boundaries, such as `01 AM`.\n* `%I:%M` - for minute boundaries, such as `01:23`.\n* `:%S` - for second boundaries, such as `:45`.\n* `.%L` - milliseconds for all other times, such as `.012`.\n\nAlthough somewhat unusual, this default behavior has the benefit of providing both local and global context: for example, formatting a sequence of ticks as [11 PM, Mon 07, 01 AM] reveals information about hours, dates, and day simultaneously, rather than just the hours [11 PM, 12 AM, 01 AM]. See [d3-time-format](https://github.com/d3/d3-time-format) if you’d like to roll your own conditional time format.\n\n# time.nice([count]) [<>](https://github.com/d3/d3-scale/blob/master/src/time.js \"Source\")\n
# time.nice([interval[, step]])\n\nExtends the [domain](#time_domain) so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. See [*continuous*.nice](#continuous_nice) for more.\n\nAn optional tick *count* argument allows greater control over the step size used to extend the bounds, guaranteeing that the returned [ticks](#time_ticks) will exactly cover the domain. Alternatively, a [time *interval*](https://github.com/d3/d3-time#intervals) may be specified to explicitly set the ticks. If an *interval* is specified, an optional *step* may also be specified to skip some ticks. For example, `time.nice(d3.timeSecond, 10)` will extend the domain to an even ten seconds (0, 10, 20, etc.). See [*time*.ticks](#time_ticks) and [*interval*.every](https://github.com/d3/d3-time#interval_every) for further detail.\n\nNicing is useful if the domain is computed from data, say using [extent](https://github.com/d3/d3-array#extent), and may be irregular. For example, for a domain of [2009-07-13T00:02, 2009-07-13T23:48], the nice domain is [2009-07-13, 2009-07-14]. If the domain has more than two values, nicing the domain only affects the first and last value.\n\n# d3.scaleUtc([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/utcTime.js \"Source\")\n\nEquivalent to [time](#time), but the returned time scale operates in [Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) rather than local time.\n\n### Sequential Scales\n\nSequential scales, like [diverging scales](#diverging-scales), are similar to [continuous scales](#continuous-scales) in that they map a continuous, numeric input domain to a continuous output range. However, unlike continuous scales, the output range of a sequential scale is fixed by its interpolator and not configurable. These scales do not expose [invert](#continuous_invert), [range](#continuous_range), [rangeRound](#continuous_rangeRound) and [interpolate](#continuous_interpolate) methods.\n\n# d3.scaleSequential([[domain, ]interpolator]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nConstructs a new sequential scale with the specified [*domain*](#sequential_domain) and [*interpolator*](#sequential_interpolator) function. If *domain* is not specified, it defaults to [0, 1]. If *interpolator* is not specified, it defaults to the identity function. When the scale is [applied](#_sequential), the interpolator will be invoked with a value typically in the range [0, 1], where 0 represents the minimum value and 1 represents the maximum value. For example, to implement the ill-advised [HSL](https://github.com/d3/d3-color#hsl) rainbow scale:\n\n```js\nvar rainbow = d3.scaleSequential(function(t) {\n return d3.hsl(t * 360, 1, 0.5) + \"\";\n});\n```\n\nA more aesthetically-pleasing and perceptually-effective cyclical hue encoding is to use [d3.interpolateRainbow](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateRainbow):\n\n```js\nvar rainbow = d3.scaleSequential(d3.interpolateRainbow);\n```\n\n# sequential(value) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nSee [*continuous*](#_continuous).\n\n# sequential.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nSee [*continuous*.domain](#continuous_domain). Note that a sequential scale’s domain must be numeric and must contain exactly two values.\n\n# sequential.clamp([clamp]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nSee [*continuous*.clamp](#continuous_clamp).\n\n# sequential.interpolator([interpolator]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nIf *interpolator* is specified, sets the scale’s interpolator to the specified function. If *interpolator* is not specified, returns the scale’s current interpolator.\n\n# sequential.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nSee [*continuous*.copy](#continuous_copy).\n\n# d3.scaleSequentialLog([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nA [sequential scale](#sequential-scales) with a logarithmic transform, analagous to a [log scale](#log-scales).\n\n# d3.scaleSequentialPow([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nA [sequential scale](#sequential-scales) with a exponential transform, analagous to a [power scale](#pow-scales).\n\n# d3.scaleSequentialSqrt([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nA [sequential scale](#sequential-scales) with a square-root transform, analagous to a [d3.scaleSqrt](#scaleSqrt).\n\n# d3.scaleSequentialSymlog([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequential.js \"Source\")\n\nA [sequential scale](#sequential-scales) with a symmetric logarithmic transform, analagous to a [symlog scale](#symlog-scales).\n\n# d3.scaleSequentialQuantile([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/sequentialQuantile.js \"Source\")\n\nA [sequential scale](#sequential-scales) using a *p*-quantile transform, analagous to a [quantile scale](#quantile-scales).\n\n### Diverging Scales\n\nDiverging scales, like [sequential scales](#sequential-scales), are similar to [continuous scales](#continuous-scales) in that they map a continuous, numeric input domain to a continuous output range. However, unlike continuous scales, the output range of a diverging scale is fixed by its interpolator and not configurable. These scales do not expose [invert](#continuous_invert), [range](#continuous_range), [rangeRound](#continuous_rangeRound) and [interpolate](#continuous_interpolate) methods.\n\n# d3.scaleDiverging([[domain, ]interpolator]) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nConstructs a new diverging scale with the specified [*domain*](#diverging_domain) and [*interpolator*](#diverging_interpolator) function. If *domain* is not specified, it defaults to [0, 1]. If *interpolator* is not specified, it defaults to the identity function. When the scale is [applied](#_diverging), the interpolator will be invoked with a value typically in the range [0, 1], where 0 represents the extreme negative value, 0.5 represents the neutral value, and 1 represents the extreme positive value. For example, using [d3.interpolateSpectral](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateSpectral):\n\n```js\nvar spectral = d3.scaleDiverging(d3.interpolateSpectral);\n```\n\n# diverging(value) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nSee [*continuous*](#_continuous).\n\n# diverging.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nSee [*continuous*.domain](#continuous_domain). Note that a diverging scale’s domain must be numeric and must contain exactly three values. The default domain is [0, 0.5, 1].\n\n# diverging.clamp([clamp]) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nSee [*continuous*.clamp](#continuous_clamp).\n\n# diverging.interpolator([interpolator]) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nIf *interpolator* is specified, sets the scale’s interpolator to the specified function. If *interpolator* is not specified, returns the scale’s current interpolator.\n\n# diverging.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nSee [*continuous*.copy](#continuous_copy).\n\n# d3.scaleDivergingLog([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nA [diverging scale](#diverging-scales) with a logarithmic transform, analagous to a [log scale](#log-scales).\n\n# d3.scaleDivergingPow([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nA [diverging scale](#diverging-scales) with a exponential transform, analagous to a [power scale](#pow-scales).\n\n# d3.scaleDivergingSqrt([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nA [diverging scale](#diverging-scales) with a square-root transform, analagous to a [d3.scaleSqrt](#scaleSqrt).\n\n# d3.scaleDivergingSymlog([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/diverging.js \"Source\")\n\nA [diverging scale](#diverging-scales) with a symmetric logarithmic transform, analagous to a [symlog scale](#symlog-scales).\n\n### Quantize Scales\n\nQuantize scales are similar to [linear scales](#linear-scales), except they use a discrete rather than continuous range. The continuous input domain is divided into uniform segments based on the number of values in (*i.e.*, the cardinality of) the output range. Each range value *y* can be expressed as a quantized linear function of the domain value *x*: *y* = *m round(x)* + *b*. See [bl.ocks.org/4060606](http://bl.ocks.org/mbostock/4060606) for an example.\n\n# d3.scaleQuantize([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nConstructs a new quantize scale with the specified [*domain*](#quantize_domain) and [*range*](#quantize_range). If either *domain* or *range* is not specified, each defaults to [0, 1]. Thus, the default quantize scale is equivalent to the [Math.round](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/round) function.\n\n# quantize(value) [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nGiven a *value* in the input [domain](#quantize_domain), returns the corresponding value in the output [range](#quantize_range). For example, to apply a color encoding:\n\n```js\nvar color = d3.scaleQuantize()\n .domain([0, 1])\n .range([\"brown\", \"steelblue\"]);\n\ncolor(0.49); // \"brown\"\ncolor(0.51); // \"steelblue\"\n```\n\nOr dividing the domain into three equally-sized parts with different range values to compute an appropriate stroke width:\n\n```js\nvar width = d3.scaleQuantize()\n .domain([10, 100])\n .range([1, 2, 4]);\n\nwidth(20); // 1\nwidth(50); // 2\nwidth(80); // 4\n```\n\n# quantize.invertExtent(value) [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nReturns the extent of values in the [domain](#quantize_domain) [x0, x1] for the corresponding *value* in the [range](#quantize_range): the inverse of [*quantize*](#_quantize). This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.\n\n```js\nvar width = d3.scaleQuantize()\n .domain([10, 100])\n .range([1, 2, 4]);\n\nwidth.invertExtent(2); // [40, 70]\n```\n\n# quantize.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nIf *domain* is specified, sets the scale’s domain to the specified two-element array of numbers. If the elements in the given array are not numbers, they will be coerced to numbers. The numbers must be in ascending order or the behavior of the scale is undefined. If *domain* is not specified, returns the scale’s current domain.\n\n# quantize.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nIf *range* is specified, sets the scale’s range to the specified array of values. The array may contain any number of discrete values. The elements in the given array need not be numbers; any value or type will work. If *range* is not specified, returns the scale’s current range.\n\n# quantize.ticks([count]) [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nEquivalent to [*continuous*.ticks](#continuous_ticks).\n\n# quantize.tickFormat([count[, specifier]]) [<>](https://github.com/d3/d3-scale/blob/master/src/linear.js \"Source\")\n\nEquivalent to [*continuous*.tickFormat](#continuous_tickFormat).\n\n# quantize.nice() [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nEquivalent to [*continuous*.nice](#continuous_nice).\n\n# quantize.thresholds() [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nReturns the array of computed thresholds within the [domain](#quantize_domain).\n\n# quantize.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/quantize.js \"Source\")\n\nReturns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.\n\n### Quantile Scales\n\nQuantile scales map a sampled input domain to a discrete range. The domain is considered continuous and thus the scale will accept any reasonable input value; however, the domain is specified as a discrete set of sample values. The number of values in (the cardinality of) the output range determines the number of quantiles that will be computed from the domain. To compute the quantiles, the domain is sorted, and treated as a [population of discrete values](https://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population); see d3-array’s [quantile](https://github.com/d3/d3-array#quantile). See [bl.ocks.org/8ca036b3505121279daf](http://bl.ocks.org/mbostock/8ca036b3505121279daf) for an example.\n\n# d3.scaleQuantile([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/quantile.js \"Source\")\n\nConstructs a new quantile scale with the specified [*domain*](#quantile_domain) and [*range*](#quantile_range). If either *domain* or *range* is not specified, each defaults to the empty array. The quantile scale is invalid until both a domain and range are specified.\n\n# quantile(value) [<>](https://github.com/d3/d3-scale/blob/master/src/quantile.js \"Source\")\n\nGiven a *value* in the input [domain](#quantile_domain), returns the corresponding value in the output [range](#quantile_range).\n\n# quantile.invertExtent(value) [<>](https://github.com/d3/d3-scale/blob/master/src/quantile.js \"Source\")\n\nReturns the extent of values in the [domain](#quantile_domain) [x0, x1] for the corresponding *value* in the [range](#quantile_range): the inverse of [*quantile*](#_quantile). This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.\n\n# quantile.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/quantile.js \"Source\")\n\nIf *domain* is specified, sets the domain of the quantile scale to the specified set of discrete numeric values. The array must not be empty, and must contain at least one numeric value; NaN, null and undefined values are ignored and not considered part of the sample population. If the elements in the given array are not numbers, they will be coerced to numbers. A copy of the input array is sorted and stored internally. If *domain* is not specified, returns the scale’s current domain.\n\n# quantile.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/quantile.js \"Source\")\n\nIf *range* is specified, sets the discrete values in the range. The array must not be empty, and may contain any type of value. The number of values in (the cardinality, or length, of) the *range* array determines the number of quantiles that are computed. For example, to compute quartiles, *range* must be an array of four elements such as [0, 1, 2, 3]. If *range* is not specified, returns the current range.\n\n# quantile.quantiles() [<>](https://github.com/d3/d3-scale/blob/master/src/quantile.js \"Source\")\n\nReturns the quantile thresholds. If the [range](#quantile_range) contains *n* discrete values, the returned array will contain *n* - 1 thresholds. Values less than the first threshold are considered in the first quantile; values greater than or equal to the first threshold but less than the second threshold are in the second quantile, and so on. Internally, the thresholds array is used with [bisect](https://github.com/d3/d3-array#bisect) to find the output quantile associated with the given input value.\n\n# quantile.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/quantile.js \"Source\")\n\nReturns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.\n\n### Threshold Scales\n\nThreshold scales are similar to [quantize scales](#quantize-scales), except they allow you to map arbitrary subsets of the domain to discrete values in the range. The input domain is still continuous, and divided into slices based on a set of threshold values. See [bl.ocks.org/3306362](http://bl.ocks.org/mbostock/3306362) for an example.\n\n# d3.scaleThreshold([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/threshold.js \"Source\")\n\nConstructs a new threshold scale with the specified [*domain*](#threshold_domain) and [*range*](#threshold_range). It *domain* is not specified, it defaulst to [0.5]. If *range* is not specified, it defaults to [0, 1]. Thus, the default threshold scale is equivalent to the [Math.round](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/round) function for numbers; for example threshold(0.49) returns 0, and threshold(0.51) returns 1.\n\n# threshold(value) [<>](https://github.com/d3/d3-scale/blob/master/src/threshold.js \"Source\")\n\nGiven a *value* in the input [domain](#threshold_domain), returns the corresponding value in the output [range](#threshold_range). For example:\n\n```js\nvar color = d3.scaleThreshold()\n .domain([0, 1])\n .range([\"red\", \"white\", \"green\"]);\n\ncolor(-1); // \"red\"\ncolor(0); // \"white\"\ncolor(0.5); // \"white\"\ncolor(1); // \"green\"\ncolor(1000); // \"green\"\n```\n\n# threshold.invertExtent(value) [<>](https://github.com/d3/d3-scale/blob/master/src/threshold.js \"Source\")\n\nReturns the extent of values in the [domain](#threshold_domain) [x0, x1] for the corresponding *value* in the [range](#threshold_range), representing the inverse mapping from range to domain. This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse. For example:\n\n```js\nvar color = d3.scaleThreshold()\n .domain([0, 1])\n .range([\"red\", \"white\", \"green\"]);\n\ncolor.invertExtent(\"red\"); // [undefined, 0]\ncolor.invertExtent(\"white\"); // [0, 1]\ncolor.invertExtent(\"green\"); // [1, undefined]\n```\n\n# threshold.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/threshold.js \"Source\")\n\nIf *domain* is specified, sets the scale’s domain to the specified array of values. The values must be in ascending order or the behavior of the scale is undefined. The values are typically numbers, but any naturally ordered values (such as strings) will work; a threshold scale can be used to encode any type that is ordered. If the number of values in the scale’s range is N+1, the number of values in the scale’s domain must be N. If there are fewer than N elements in the domain, the additional values in the range are ignored. If there are more than N elements in the domain, the scale may return undefined for some inputs. If *domain* is not specified, returns the scale’s current domain.\n\n# threshold.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/threshold.js \"Source\")\n\nIf *range* is specified, sets the scale’s range to the specified array of values. If the number of values in the scale’s domain is N, the number of values in the scale’s range must be N+1. If there are fewer than N+1 elements in the range, the scale may return undefined for some inputs. If there are more than N+1 elements in the range, the additional values are ignored. The elements in the given array need not be numbers; any value or type will work. If *range* is not specified, returns the scale’s current range.\n\n# threshold.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/threshold.js \"Source\")\n\nReturns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.\n\n### Ordinal Scales\n\nUnlike [continuous scales](#continuous-scales), ordinal scales have a discrete domain and range. For example, an ordinal scale might map a set of named categories to a set of colors, or determine the horizontal positions of columns in a column chart.\n\n# d3.scaleOrdinal([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/ordinal.js \"Source\")\n\nConstructs a new ordinal scale with the specified [*domain*](#ordinal_domain) and [*range*](#ordinal_range). If *domain* is not specified, it defaults to the empty array. If *range* is not specified, it defaults to the empty array; an ordinal scale always returns undefined until a non-empty range is defined.\n\n# ordinal(value) [<>](https://github.com/d3/d3-scale/blob/master/src/ordinal.js \"Source\")\n\nGiven a *value* in the input [domain](#ordinal_domain), returns the corresponding value in the output [range](#ordinal_range). If the given *value* is not in the scale’s [domain](#ordinal_domain), returns the [unknown](#ordinal_unknown); or, if the unknown value is [implicit](#scaleImplicit) (the default), then the *value* is implicitly added to the domain and the next-available value in the range is assigned to *value*, such that this and subsequent invocations of the scale given the same input *value* return the same output value.\n\n# ordinal.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/ordinal.js \"Source\")\n\nIf *domain* is specified, sets the domain to the specified array of values. The first element in *domain* will be mapped to the first element in the range, the second domain value to the second range value, and so on. Domain values are stored internally in a map from stringified value to index; the resulting index is then used to retrieve a value from the range. Thus, an ordinal scale’s values must be coercible to a string, and the stringified version of the domain value uniquely identifies the corresponding range value. If *domain* is not specified, this method returns the current domain.\n\nSetting the domain on an ordinal scale is optional if the [unknown value](#ordinal_unknown) is [implicit](#scaleImplicit) (the default). In this case, the domain will be inferred implicitly from usage by assigning each unique value passed to the scale a new value from the range. Note that an explicit domain is recommended to ensure deterministic behavior, as inferring the domain from usage will be dependent on ordering.\n\n# ordinal.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/ordinal.js \"Source\")\n\nIf *range* is specified, sets the range of the ordinal scale to the specified array of values. The first element in the domain will be mapped to the first element in *range*, the second domain value to the second range value, and so on. If there are fewer elements in the range than in the domain, the scale will reuse values from the start of the range. If *range* is not specified, this method returns the current range.\n\n# ordinal.unknown([value]) [<>](https://github.com/d3/d3-scale/blob/master/src/ordinal.js \"Source\")\n\nIf *value* is specified, sets the output value of the scale for unknown input values and returns this scale. If *value* is not specified, returns the current unknown value, which defaults to [implicit](#implicit). The implicit value enables implicit domain construction; see [*ordinal*.domain](#ordinal_domain).\n\n# ordinal.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/ordinal.js \"Source\")\n\nReturns an exact copy of this ordinal scale. Changes to this scale will not affect the returned scale, and vice versa.\n\n# d3.scaleImplicit [<>](https://github.com/d3/d3-scale/blob/master/src/ordinal.js \"Source\")\n\nA special value for [*ordinal*.unknown](#ordinal_unknown) that enables implicit domain construction: unknown values are implicitly added to the domain.\n\n#### Band Scales\n\nBand scales are like [ordinal scales](#ordinal-scales) except the output range is continuous and numeric. Discrete output values are automatically computed by the scale by dividing the continuous range into uniform bands. Band scales are typically used for bar charts with an ordinal or categorical dimension. The [unknown value](#ordinal_unknown) of a band scale is effectively undefined: they do not allow implicit domain construction.\n\n\"band\"\n\n# d3.scaleBand([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nConstructs a new band scale with the specified [*domain*](#band_domain) and [*range*](#band_range), no [padding](#band_padding), no [rounding](#band_round) and center [alignment](#band_align). If *domain* is not specified, it defaults to the empty domain. If *range* is not specified, it defaults to the unit range [0, 1].\n\n# band(*value*) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nGiven a *value* in the input [domain](#band_domain), returns the start of the corresponding band derived from the output [range](#band_range). If the given *value* is not in the scale’s domain, returns undefined.\n\n# band.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *domain* is specified, sets the domain to the specified array of values. The first element in *domain* will be mapped to the first band, the second domain value to the second band, and so on. Domain values are stored internally in a map from stringified value to index; the resulting index is then used to determine the band. Thus, a band scale’s values must be coercible to a string, and the stringified version of the domain value uniquely identifies the corresponding band. If *domain* is not specified, this method returns the current domain.\n\n# band.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *range* is specified, sets the scale’s range to the specified two-element array of numbers. If the elements in the given array are not numbers, they will be coerced to numbers. If *range* is not specified, returns the scale’s current range, which defaults to [0, 1].\n\n# band.rangeRound([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nSets the scale’s [*range*](#band_range) to the specified two-element array of numbers while also enabling [rounding](#band_round). This is a convenience method equivalent to:\n\n```js\nband\n .range(range)\n .round(true);\n```\n\nRounding is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles.\n\n# band.round([round]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *round* is specified, enables or disables rounding accordingly. If rounding is enabled, the start and stop of each band will be integers. Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles. Note that if the width of the domain is not a multiple of the cardinality of the range, there may be leftover unused space, even without padding! Use [*band*.align](#band_align) to specify how the leftover space is distributed.\n\n# band.paddingInner([padding]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *padding* is specified, sets the inner padding to the specified number which must be less than or equal to 1. If *padding* is not specified, returns the current inner padding which defaults to 0. The inner padding specifies the proportion of the range that is reserved for blank space between bands; a value of 0 means no blank space between bands, and a value of 1 means a [bandwidth](#band_bandwidth) of zero.\n\n# band.paddingOuter([padding]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *padding* is specified, sets the outer padding to the specified number which is typically in the range [0, 1]. If *padding* is not specified, returns the current outer padding which defaults to 0. The outer padding specifies the amount of blank space, in terms of multiples of the [step](#band_step), to reserve before the first band and after the last band.\n\n# band.padding([padding]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nA convenience method for setting the [inner](#band_paddingInner) and [outer](#band_paddingOuter) padding to the same *padding* value. If *padding* is not specified, returns the inner padding.\n\n# band.align([align]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *align* is specified, sets the alignment to the specified value which must be in the range [0, 1]. If *align* is not specified, returns the current alignment which defaults to 0.5. The alignment specifies how any leftover unused space in the range is distributed. A value of 0.5 indicates that the leftover space should be equally distributed before the first band and after the last band; *i.e.*, the bands should be centered within the range. A value of 0 or 1 may be used to shift the bands to one side, say to position them adjacent to an axis.\n\n# band.bandwidth() [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nReturns the width of each band.\n\n# band.step() [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nReturns the distance between the starts of adjacent bands.\n\n# band.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nReturns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.\n\n#### Point Scales\n\nPoint scales are a variant of [band scales](#band-scales) with the bandwidth fixed to zero. Point scales are typically used for scatterplots with an ordinal or categorical dimension. The [unknown value](#ordinal_unknown) of a point scale is always undefined: they do not allow implicit domain construction.\n\n\"point\"\n\n# d3.scalePoint([[domain, ]range]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nConstructs a new point scale with the specified [*domain*](#point_domain) and [*range*](#point_range), no [padding](#point_padding), no [rounding](#point_round) and center [alignment](#point_align). If *domain* is not specified, it defaults to the empty domain. If *range* is not specified, it defaults to the unit range [0, 1].\n\n# point(*value*) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nGiven a *value* in the input [domain](#point_domain), returns the corresponding point derived from the output [range](#point_range). If the given *value* is not in the scale’s domain, returns undefined.\n\n# point.domain([domain]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *domain* is specified, sets the domain to the specified array of values. The first element in *domain* will be mapped to the first point, the second domain value to the second point, and so on. Domain values are stored internally in a map from stringified value to index; the resulting index is then used to determine the point. Thus, a point scale’s values must be coercible to a string, and the stringified version of the domain value uniquely identifies the corresponding point. If *domain* is not specified, this method returns the current domain.\n\n# point.range([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *range* is specified, sets the scale’s range to the specified two-element array of numbers. If the elements in the given array are not numbers, they will be coerced to numbers. If *range* is not specified, returns the scale’s current range, which defaults to [0, 1].\n\n# point.rangeRound([range]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nSets the scale’s [*range*](#point_range) to the specified two-element array of numbers while also enabling [rounding](#point_round). This is a convenience method equivalent to:\n\n```js\npoint\n .range(range)\n .round(true);\n```\n\nRounding is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles.\n\n# point.round([round]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *round* is specified, enables or disables rounding accordingly. If rounding is enabled, the position of each point will be integers. Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles. Note that if the width of the domain is not a multiple of the cardinality of the range, there may be leftover unused space, even without padding! Use [*point*.align](#point_align) to specify how the leftover space is distributed.\n\n# point.padding([padding]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *padding* is specified, sets the outer padding to the specified number which is typically in the range [0, 1]. If *padding* is not specified, returns the current outer padding which defaults to 0. The outer padding specifies the amount of blank space, in terms of multiples of the [step](#band_step), to reserve before the first point and after the last point. Equivalent to [*band*.paddingOuter](#band_paddingOuter).\n\n# point.align([align]) [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nIf *align* is specified, sets the alignment to the specified value which must be in the range [0, 1]. If *align* is not specified, returns the current alignment which defaults to 0.5. The alignment specifies how any leftover unused space in the range is distributed. A value of 0.5 indicates that the leftover space should be equally distributed before the first point and after the last point; *i.e.*, the points should be centered within the range. A value of 0 or 1 may be used to shift the points to one side, say to position them adjacent to an axis.\n\n# point.bandwidth() [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nReturns zero.\n\n# point.step() [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nReturns the distance between the starts of adjacent points.\n\n# point.copy() [<>](https://github.com/d3/d3-scale/blob/master/src/band.js \"Source\")\n\nReturns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-array": "^1.2.0", "d3-collection": "1", "d3-format": "1", "d3-interpolate": "1", "d3-time": "1", "d3-time-format": "2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-scale", "error": "[Circular]", "extraneous": false }, "d3-scale-chromatic": { "_from": "d3-scale-chromatic@1", "_id": "d3-scale-chromatic@1.5.0", "_inBundle": false, "_integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", "_location": "/d3-scale-chromatic", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-scale-chromatic@1", "name": "d3-scale-chromatic", "escapedName": "d3-scale-chromatic", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", "_shasum": "54e333fc78212f439b14641fb55801dd81135a98", "_spec": "d3-scale-chromatic@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-scale-chromatic/issues" }, "dependencies": { "d3-color": { "_from": "d3-color@1", "_id": "d3-color@1.4.1", "_inBundle": false, "_integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", "_location": "/d3-color", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", "_shasum": "c52002bf8846ada4424d55d97982fef26eb3bc8a", "_spec": "d3-color@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Color spaces! RGB, HSL, Cubehelix, Lab and HCL (Lch).", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-color/", "jsdelivr": "dist/d3-color.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-color.js", "module": "src/index.js", "name": "d3-color", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-color.min.js", "version": "1.4.1", "readme": "# d3-color\n\nEven though your browser understands a lot about colors, it doesn’t offer much help in manipulating colors through JavaScript. The d3-color module therefore provides representations for various color spaces, allowing specification, conversion and manipulation. (Also see [d3-interpolate](https://github.com/d3/d3-interpolate) for color interpolation.)\n\nFor example, take the color named “steelblue”:\n\n```js\nvar c = d3.color(\"steelblue\"); // {r: 70, g: 130, b: 180, opacity: 1}\n```\n\nLet’s try converting it to HSL:\n\n```js\nvar c = d3.hsl(\"steelblue\"); // {h: 207.27…, s: 0.44, l: 0.4902…, opacity: 1}\n```\n\nNow rotate the hue by 90°, bump up the saturation, and format as a string for CSS:\n\n```js\nc.h += 90;\nc.s += 0.2;\nc + \"\"; // rgb(198, 45, 205)\n```\n\nTo fade the color slightly:\n\n```js\nc.opacity = 0.8;\nc + \"\"; // rgba(198, 45, 205, 0.8)\n```\n\nIn addition to the ubiquitous and machine-friendly [RGB](#rgb) and [HSL](#hsl) color space, d3-color supports color spaces that are designed for humans:\n\n* [CIELAB](#lab) (*a.k.a.* “Lab”)\n* [CIELChab](#lch) (*a.k.a.* “LCh” or “HCL”)\n* Dave Green’s [Cubehelix](#cubehelix)\n\nCubehelix features monotonic lightness, while CIELAB and its polar form CIELChab are perceptually uniform.\n\nFor additional color spaces, see:\n\n* [d3-cam16](https://github.com/d3/d3-cam16)\n* [d3-cam02](https://github.com/connorgr/d3-cam02)\n* [d3-hsv](https://github.com/d3/d3-hsv)\n* [d3-hcg](https://github.com/d3/d3-hcg)\n* [d3-hsluv](https://github.com/petulla/d3-hsluv)\n\n## Installing\n\nIf you use NPM, `npm install d3-color`. Otherwise, download the [latest release](https://github.com/d3/d3-color/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-color.v1.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\n\n```\n\n[Try d3-color in your browser.](https://observablehq.com/collection/@d3/d3-color)\n\n## API Reference\n\n# d3.color(specifier) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nParses the specified [CSS Color Module Level 3](http://www.w3.org/TR/css3-color/#colorunits) *specifier* string, returning an [RGB](#rgb) or [HSL](#hsl) color, along with [CSS Color Module Level 4 hex](https://www.w3.org/TR/css-color-4/#hex-notation) *specifier* strings. If the specifier was not valid, null is returned. Some examples:\n\n* `rgb(255, 255, 255)`\n* `rgb(10%, 20%, 30%)`\n* `rgba(255, 255, 255, 0.4)`\n* `rgba(10%, 20%, 30%, 0.4)`\n* `hsl(120, 50%, 20%)`\n* `hsla(120, 50%, 20%, 0.4)`\n* `#ffeeaa`\n* `#fea`\n* `#ffeeaa22`\n* `#fea2`\n* `steelblue`\n\nThe list of supported [named colors](http://www.w3.org/TR/SVG/types.html#ColorKeywords) is specified by CSS.\n\nNote: this function may also be used with `instanceof` to test if an object is a color instance. The same is true of color subclasses, allowing you to test whether a color is in a particular color space.\n\n# *color*.opacity\n\nThis color’s opacity, typically in the range [0, 1].\n\n# *color*.rgb() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns the [RGB equivalent](#rgb) of this color. For RGB colors, that’s `this`.\n\n# color.copy([values]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a copy of this color. If *values* is specified, any enumerable own properties of *values* are assigned to the new returned color. For example, to derive a copy of a *color* with opacity 0.5, say\n\n```js\ncolor.copy({opacity: 0.5})\n```\n\n# *color*.brighter([k]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a brighter copy of this color. If *k* is specified, it controls how much brighter the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.\n\n# *color*.darker([k]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a darker copy of this color. If *k* is specified, it controls how much darker the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.\n\n# *color*.displayable() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns true if and only if the color is displayable on standard hardware. For example, this returns false for an RGB color if any channel value is less than zero or greater than 255 when rounded, or if the opacity is not in the range [0, 1].\n\n# *color*.formatHex() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a hexadecimal string representing this color in RGB space, such as `#f7eaba`. If this color is not displayable, a suitable displayable color is returned instead. For example, RGB channel values greater than 255 are clamped to 255.\n\n# *color*.formatHsl() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a string representing this color according to the [CSS Color Module Level 3 specification](https://www.w3.org/TR/css-color-3/#hsl-color), such as `hsl(257, 50%, 80%)` or `hsla(257, 50%, 80%, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping S and L channel values to the interval [0, 100].\n\n# *color*.formatRgb() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a string representing this color according to the [CSS Object Model specification](https://drafts.csswg.org/cssom/#serialize-a-css-component-value), such as `rgb(247, 234, 186)` or `rgba(247, 234, 186, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping RGB channel values to the interval [0, 255].\n\n# *color*.toString() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nAn alias for [*color*.formatRgb](#color_formatRgb).\n\n# d3.rgb(r, g, b[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")
\n# d3.rgb(specifier)
\n# d3.rgb(color)
\n\nConstructs a new [RGB](https://en.wikipedia.org/wiki/RGB_color_model) color. The channel values are exposed as `r`, `g` and `b` properties on the returned instance. Use the [RGB color picker](http://bl.ocks.org/mbostock/78d64ca7ef013b4dcf8f) to explore this color space.\n\nIf *r*, *g* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the RGB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb). Note that unlike [*color*.rgb](#color_rgb) this method *always* returns a new instance, even if *color* is already an RGB color.\n\n# d3.hsl(h, s, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")
\n# d3.hsl(specifier)
\n# d3.hsl(color)
\n\nConstructs a new [HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [HSL color picker](http://bl.ocks.org/mbostock/debaad4fcce9bcee14cf) to explore this color space.\n\nIf *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the HSL color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to HSL. (Colors already in the HSL color space skip the conversion to RGB.)\n\n# d3.lab(l, a, b[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.lab(specifier)
\n# d3.lab(color)
\n\nConstructs a new [CIELAB](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) color. The channel values are exposed as `l`, `a` and `b` properties on the returned instance. Use the [CIELAB color picker](http://bl.ocks.org/mbostock/9f37cc207c0cb166921b) to explore this color space. The value of *l* is typically in the range [0, 100], while *a* and *b* are typically in [-160, +160].\n\nIf *l*, *a* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the CIELAB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELAB. (Colors already in the CIELAB color space skip the conversion to RGB, and colors in the HCL color space are converted directly to CIELAB.)\n\n# d3.gray(l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n\nConstructs a new [CIELAB](#lab) color with the specified *l* value and *a* = *b* = 0.\n\n# d3.hcl(h, c, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.hcl(specifier)
\n# d3.hcl(color)
\n\nEquivalent to [d3.lch](#lch), but with reversed argument order.\n\n# d3.lch(l, c, h[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.lch(specifier)
\n# d3.lch(color)
\n\nConstructs a new [CIELChab](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) color. The channel values are exposed as `l`, `c` and `h` properties on the returned instance. Use the [CIELChab color picker](http://bl.ocks.org/mbostock/3e115519a1b495e0bd95) to explore this color space. The value of *l* is typically in the range [0, 100], *c* is typically in [0, 230], and *h* is typically in [0, 360).\n\nIf *l*, *c*, and *h* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to CIELChab color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELChab. (Colors already in CIELChab color space skip the conversion to RGB, and colors in CIELAB color space are converted directly to CIELChab.)\n\n# d3.cubehelix(h, s, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/cubehelix.js \"Source\")
\n# d3.cubehelix(specifier)
\n# d3.cubehelix(color)
\n\nConstructs a new [Cubehelix](http://www.mrao.cam.ac.uk/~dag/CUBEHELIX/) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [Cubehelix color picker](http://bl.ocks.org/mbostock/ba8d75e45794c27168b5) to explore this color space.\n\nIf *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the Cubehelix color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to Cubehelix. (Colors already in the Cubehelix color space skip the conversion to RGB.)\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-color", "error": "[Circular]", "extraneous": false, "_deduped": "d3-color" }, "d3-interpolate": { "_from": "d3-interpolate@1", "_id": "d3-interpolate@1.4.0", "_inBundle": false, "_integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "_location": "/d3-interpolate", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", "_shasum": "526e79e2d80daa383f9e0c1c1c7dcc0f0583e987", "_spec": "d3-interpolate@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Interpolate numbers, colors, strings, arrays, objects, whatever!", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-interpolate/", "jsdelivr": "dist/d3-interpolate.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-interpolate.js", "module": "src/index.js", "name": "d3-interpolate", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-interpolate.min.js", "version": "1.4.0", "readme": "# d3-interpolate\n\nThis module provides a variety of interpolation methods for blending between two values. Values may be numbers, colors, strings, arrays, or even deeply-nested objects. For example:\n\n```js\nvar i = d3.interpolateNumber(10, 20);\ni(0.0); // 10\ni(0.2); // 12\ni(0.5); // 15\ni(1.0); // 20\n```\n\nThe returned function `i` is called an *interpolator*. Given a starting value *a* and an ending value *b*, it takes a parameter *t* in the domain [0, 1] and returns the corresponding interpolated value between *a* and *b*. An interpolator typically returns a value equivalent to *a* at *t* = 0 and a value equivalent to *b* at *t* = 1.\n\nYou can interpolate more than just numbers. To find the perceptual midpoint between steelblue and brown:\n\n```js\nd3.interpolateLab(\"steelblue\", \"brown\")(0.5); // \"rgb(142, 92, 109)\"\n```\n\nHere’s a more elaborate example demonstrating type inference used by [interpolate](#interpolate):\n\n```js\nvar i = d3.interpolate({colors: [\"red\", \"blue\"]}, {colors: [\"white\", \"black\"]});\ni(0.0); // {colors: [\"rgb(255, 0, 0)\", \"rgb(0, 0, 255)\"]}\ni(0.5); // {colors: [\"rgb(255, 128, 128)\", \"rgb(0, 0, 128)\"]}\ni(1.0); // {colors: [\"rgb(255, 255, 255)\", \"rgb(0, 0, 0)\"]}\n```\n\nNote that the generic value interpolator detects not only nested objects and arrays, but also color strings and numbers embedded in strings!\n\n## Installing\n\nIf you use NPM, `npm install d3-interpolate`. Otherwise, download the [latest release](https://github.com/d3/d3-interpolate/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-interpolate.v1.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\n\n\n```\n\n## API Reference\n\n# d3.interpolate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/value.js), [Examples](https://observablehq.com/@d3/d3-interpolate)\n\nReturns an interpolator between the two arbitrary values *a* and *b*. The interpolator implementation is based on the type of the end value *b*, using the following algorithm:\n\n1. If *b* is null, undefined or a boolean, use the constant *b*.\n2. If *b* is a number, use [interpolateNumber](#interpolateNumber).\n3. If *b* is a [color](https://github.com/d3/d3-color/blob/master/README.md#color) or a string coercible to a color, use [interpolateRgb](#interpolateRgb).\n4. If *b* is a [date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), use [interpolateDate](#interpolateDate).\n5. If *b* is a string, use [interpolateString](#interpolateString).\n6. If *b* is a [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) of numbers, use [interpolateNumberArray](#interpolateNumberArray).\n7. If *b* is a generic [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray), use [interpolateArray](#interpolateArray).\n8. If *b* is coercible to a number, use [interpolateNumber](#interpolateNumber).\n9. Use [interpolateObject](#interpolateObject).\n\nBased on the chosen interpolator, *a* is coerced to the suitable corresponding type.\n\n# d3.interpolateNumber(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/number.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*. The returned interpolator is equivalent to:\n\n```js\nfunction interpolator(t) {\n return a * (1 - t) + b * t;\n}\n```\n\nCaution: avoid interpolating to or from the number zero when the interpolator is used to generate a string. When very small values are stringified, they may be converted to scientific notation, which is an invalid attribute or style property value in older browsers. For example, the number `0.0000001` is converted to the string `\"1e-7\"`. This is particularly noticeable with interpolating opacity. To avoid scientific notation, start or end the transition at 1e-6: the smallest value that is not stringified in scientific notation.\n\n# d3.interpolateRound(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/round.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*; the interpolator is similar to [interpolateNumber](#interpolateNumber), except it will round the resulting value to the nearest integer.\n\n# d3.interpolateString(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/string.js), [Examples](https://observablehq.com/@d3/d3-interpolatestring)\n\nReturns an interpolator between the two strings *a* and *b*. The string interpolator finds numbers embedded in *a* and *b*, where each number is of the form understood by JavaScript. A few examples of numbers that will be detected within a string: `-1`, `42`, `3.14159`, and `6.0221413e+23`.\n\nFor each number embedded in *b*, the interpolator will attempt to find a corresponding number in *a*. If a corresponding number is found, a numeric interpolator is created using [interpolateNumber](#interpolateNumber). The remaining parts of the string *b* are used as a template: the static parts of the string *b* remain constant for the interpolation, with the interpolated numeric values embedded in the template.\n\nFor example, if *a* is `\"300 12px sans-serif\"`, and *b* is `\"500 36px Comic-Sans\"`, two embedded numbers are found. The remaining static parts (of string *b*) are a space between the two numbers (`\" \"`), and the suffix (`\"px Comic-Sans\"`). The result of the interpolator at *t* = 0.5 is `\"400 24px Comic-Sans\"`.\n\n# d3.interpolateDate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/date.js), [Examples](https://observablehq.com/@d3/d3-interpolatedate)\n\nReturns an interpolator between the two [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) *a* and *b*.\n\nNote: **no defensive copy** of the returned date is created; the same Date instance is returned for every evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/array.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two arrays *a* and *b*. If *b* is a typed array (e.g., Float64Array), [interpolateNumberArray](#interpolateNumberArray) is called instead.\n\nInternally, an array template is created that is the same length as *b*. For each element in *b*, if there exists a corresponding element in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such element, the static value from *b* is used in the template. Then, for the given parameter *t*, the template’s embedded interpolators are evaluated. The updated array template is then returned.\n\nFor example, if *a* is the array `[0, 1]` and *b* is the array `[1, 10, 100]`, then the result of the interpolator for *t* = 0.5 is the array `[0.5, 5.5, 100]`.\n\nNote: **no defensive copy** of the template array is created; modifications of the returned array may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateNumberArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/numberArray.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumberarray)\n\nReturns an interpolator between the two arrays of numbers *a* and *b*. Internally, an array template is created that is the same type and length as *b*. For each element in *b*, if there exists a corresponding element in *a*, the values are directly interpolated in the array template. If there is no such element, the static value from *b* is copied. The updated array template is then returned.\n\nNote: For performance reasons, **no defensive copy** is made of the template array and the arguments *a* and *b*; modifications of these arrays may affect subsequent evaluation of the interpolator.\n\n# d3.interpolateObject(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/object.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two objects *a* and *b*. Internally, an object template is created that has the same properties as *b*. For each property in *b*, if there exists a corresponding property in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such property, the static value from *b* is used in the template. Then, for the given parameter *t*, the template's embedded interpolators are evaluated and the updated object template is then returned.\n\nFor example, if *a* is the object `{x: 0, y: 1}` and *b* is the object `{x: 1, y: 10, z: 100}`, the result of the interpolator for *t* = 0.5 is the object `{x: 0.5, y: 5.5, z: 100}`.\n\nObject interpolation is particularly useful for *dataspace interpolation*, where data is interpolated rather than attribute values. For example, you can interpolate an object which describes an arc in a pie chart, and then use [d3.arc](https://github.com/d3/d3-shape/blob/master/README.md#arc) to compute the new SVG path data.\n\nNote: **no defensive copy** of the template object is created; modifications of the returned object may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateTransformCss(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L62), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D CSS transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateTransformSvg(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L63), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D SVG transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateZoom(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/zoom.js), [Examples](https://observablehq.com/@d3/d3-interpolatezoom)\n\nReturns an interpolator between the two views *a* and *b* of a two-dimensional plane, based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf) by Jarke J. van Wijk and Wim A.A. Nuij. Each view is defined as an array of three numbers: *cx*, *cy* and *width*. The first two coordinates *cx*, *cy* represent the center of the viewport; the last coordinate *width* represents the size of the viewport.\n\nThe returned interpolator exposes a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *x,y* space. If you want a slower or faster transition, multiply this by an arbitrary scale factor (V as described in the original paper).\n\n# d3.interpolateDiscrete(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/discrete.js), [Examples](https://observablehq.com/@d3/d3-interpolatediscrete)\n\nReturns a discrete interpolator for the given array of *values*. The returned interpolator maps *t* in [0, 1 / *n*) to *values*[0], *t* in [1 / *n*, 2 / *n*) to *values*[1], and so on, where *n* = *values*.length. In effect, this is a lightweight [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) with a fixed domain of [0, 1].\n\n### Sampling\n\n# d3.quantize(interpolator, n) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/d3-quantize)\n\nReturns *n* uniformly-spaced samples from the specified *interpolator*, where *n* is an integer greater than one. The first sample is always at *t* = 0, and the last sample is always at *t* = 1. This can be useful in generating a fixed number of samples from a given interpolator, such as to derive the range of a [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) from a [continuous interpolator](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateWarm).\n\nCaution: this method will not work with interpolators that do not return defensive copies of their output, such as [d3.interpolateArray](#interpolateArray), [d3.interpolateDate](#interpolateDate) and [d3.interpolateObject](#interpolateObject). For those interpolators, you must wrap the interpolator and create a copy for each returned value.\n\n### Color Spaces\n\n# d3.interpolateRgb(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"rgb\"\n\nOr, with a corrected [gamma](#interpolate_gamma) of 2.2:\n\n\"rgbGamma\"\n\nReturns an RGB color space interpolator between the two colors *a* and *b* with a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in RGB; they will be converted to RGB using [d3.rgb](https://github.com/d3/d3-color/blob/master/README.md#rgb). The return value of the interpolator is an RGB string.\n\n# d3.interpolateRgbBasis(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L54), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). Implicit control points are generated such that the interpolator returns *colors*[0] at *t* = 0 and *colors*[*colors*.length - 1] at *t* = 1. Opacity interpolation is not currently supported. See also [d3.interpolateBasis](#interpolateBasis), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateRgbBasisClosed(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L55), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). The control points are implicitly repeated such that the resulting spline has cyclical C² continuity when repeated around *t* in [0,1]; this is useful, for example, to create cyclical color scales. Opacity interpolation is not currently supported. See also [d3.interpolateBasisClosed](#interpolateBasisClosed), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateHsl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hsl\"\n\nReturns an HSL color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in HSL; they will be converted to HSL using [d3.hsl](https://github.com/d3/d3-color/blob/master/README.md#hsl). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHslLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hslLong\"\n\nLike [interpolateHsl](#interpolateHsl), but does not use the shortest path between hues.\n\n# d3.interpolateLab(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/lab.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"lab\"\n\nReturns a [CIELAB color space](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELAB; they will be converted to CIELAB using [d3.lab](https://github.com/d3/d3-color/blob/master/README.md#lab). The return value of the interpolator is an RGB string.\n\n# d3.interpolateHcl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hcl\"\n\nReturns a [CIELChab color space](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELChab; they will be converted to CIELChab using [d3.hcl](https://github.com/d3/d3-color/blob/master/README.md#hcl). If either color’s hue or chroma is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHclLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hclLong\"\n\nLike [interpolateHcl](#interpolateHcl), but does not use the shortest path between hues.\n\n# d3.interpolateCubehelix(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelix\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGamma\"\n\nReturns a Cubehelix color space interpolator between the two colors *a* and *b* using a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in Cubehelix; they will be converted to Cubehelix using [d3.cubehelix](https://github.com/d3/d3-color/blob/master/README.md#cubehelix). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateCubehelixLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js#L29), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelixLong\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGammaLong\"\n\nLike [interpolateCubehelix](#interpolateCubehelix), but does not use the shortest path between hues.\n\n# interpolate.gamma(gamma)\n\nGiven that *interpolate* is one of [interpolateRgb](#interpolateRgb), [interpolateCubehelix](#interpolateCubehelix) or [interpolateCubehelixLong](#interpolateCubehelixLong), returns a new interpolator factory of the same type using the specified *gamma*. For example, to interpolate from purple to orange with a gamma of 2.2 in RGB space:\n\n```js\nvar interpolator = d3.interpolateRgb.gamma(2.2)(\"purple\", \"orange\");\n```\n\nSee Eric Brasseur’s article, [Gamma error in picture scaling](https://web.archive.org/web/20160112115812/http://www.4p8.com/eric.brasseur/gamma.html), for more on gamma correction.\n\n# d3.interpolateHue(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hue.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns an interpolator between the two hue angles *a* and *b*. If either hue is NaN, the opposing value is used. The shortest path between hues is used. The return value of the interpolator is a number in [0, 360).\n\n### Splines\n\nWhereas standard interpolators blend from a starting value *a* at *t* = 0 to an ending value *b* at *t* = 1, spline interpolators smoothly blend multiple input values for *t* in [0,1] using piecewise polynomial functions. Only cubic uniform nonrational [B-splines](https://en.wikipedia.org/wiki/B-spline) are currently supported, also known as basis splines.\n\n# d3.interpolateBasis(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basis.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. Implicit control points are generated such that the interpolator returns *values*[0] at *t* = 0 and *values*[*values*.length - 1] at *t* = 1. See also [d3.curveBasis](https://github.com/d3/d3-shape/blob/master/README.md#curveBasis).\n\n# d3.interpolateBasisClosed(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basisClosed.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. The control points are implicitly repeated such that the resulting one-dimensional spline has cyclical C² continuity when repeated around *t* in [0,1]. See also [d3.curveBasisClosed](https://github.com/d3/d3-shape/blob/master/README.md#curveBasisClosed).\n\n### Piecewise\n\n# d3.piecewise(interpolate, values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/piecewise.js), [Examples](https://observablehq.com/@d3/d3-piecewise)\n\nReturns a piecewise interpolator, composing interpolators for each adjacent pair of *values*. The returned interpolator maps *t* in [0, 1 / (*n* - 1)] to *interpolate*(*values*[0], *values*[1]), *t* in [1 / (*n* - 1), 2 / (*n* - 1)] to *interpolate*(*values*[1], *values*[2]), and so on, where *n* = *values*.length. In effect, this is a lightweight [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales). For example, to blend through red, green and blue:\n\n```js\nvar interpolate = d3.piecewise(d3.interpolateRgb.gamma(2.2), [\"red\", \"green\", \"blue\"]);\n```\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-interpolate", "error": "[Circular]", "extraneous": false, "_deduped": "d3-interpolate" } }, "deprecated": false, "description": "Sequential, diverging and categorical color schemes.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-scale-chromatic/", "jsdelivr": "dist/d3-scale-chromatic.min.js", "keywords": [ "d3", "d3-module", "color", "scale", "sequential", "colorbrewer" ], "license": "BSD-3-Clause", "main": "dist/d3-scale-chromatic.js", "module": "src/index.js", "name": "d3-scale-chromatic", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-scale-chromatic.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-scale-chromatic.min.js", "version": "1.5.0", "readme": "# d3-scale-chromatic\n\nThis module provides sequential, diverging and categorical color schemes designed to work with [d3-scale](https://github.com/d3/d3-scale)’s [d3.scaleOrdinal](https://github.com/d3/d3-scale#ordinal-scales) and [d3.scaleSequential](https://github.com/d3/d3-scale#sequential-scales). Most of these schemes are derived from Cynthia A. Brewer’s [ColorBrewer](http://colorbrewer2.org). Since ColorBrewer publishes only discrete color schemes, the sequential and diverging scales are interpolated using [uniform B-splines](https://bl.ocks.org/mbostock/048d21cf747371b11884f75ad896e5a5).\n\nFor example, to create a categorical color scale using the [Accent](#schemeAccent) color scheme:\n\n```js\nvar accent = d3.scaleOrdinal(d3.schemeAccent);\n```\n\nTo create a sequential discrete nine-color scale using the [Blues](#schemeBlues) color scheme:\n\n```js\nvar blues = d3.scaleOrdinal(d3.schemeBlues[9]);\n```\n\nTo create a diverging, continuous color scale using the [PiYG](#interpolatePiYG) color scheme:\n\n```js\nvar piyg = d3.scaleSequential(d3.interpolatePiYG);\n```\n\n## Installing\n\nIf you use NPM, `npm install d3-scale-chromatic`. Otherwise, download the [latest release](https://github.com/d3/d3-scale-chromatic/releases/latest) or load directly from [d3js.org](https://d3js.org) as a [standalone library](https://d3js.org/d3-scale-chromatic.v1.min.js). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n\n\n```\n\nOr, as part of the [D3 default bundle](https://github.com/d3/d3):\n\n```html\n\n\n```\n\n[Try d3-scale-chromatic in your browser.](https://observablehq.com/collection/@d3/d3-scale-chromatic)\n\n## API Reference\n\n### Categorical\n\n# d3.schemeCategory10 [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/category10.js \"Source\")\n\n\"category10\"\n\nAn array of ten categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemeAccent [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Accent.js \"Source\")\n\n\"Accent\"\n\nAn array of eight categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemeDark2 [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Dark2.js \"Source\")\n\n\"Dark2\"\n\nAn array of eight categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemePaired [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Paired.js \"Source\")\n\n\"Paired\"\n\nAn array of twelve categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemePastel1 [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Pastel1.js \"Source\")\n\n\"Pastel1\"\n\nAn array of nine categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemePastel2 [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Pastel2.js \"Source\")\n\n\"Pastel2\"\n\nAn array of eight categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemeSet1 [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Set1.js \"Source\")\n\n\"Set1\"\n\nAn array of nine categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemeSet2 [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Set2.js \"Source\")\n\n\"Set2\"\n\nAn array of eight categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemeSet3 [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Set3.js \"Source\")\n\n\"Set3\"\n\nAn array of twelve categorical colors represented as RGB hexadecimal strings.\n\n# d3.schemeTableau10 [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/categorical/Tableau10.js \"Source\")\n\n\"Tableau10\"\n\nAn array of ten categorical colors authored by Tableau as part of [Tableau 10](https://www.tableau.com/about/blog/2016/7/colors-upgrade-tableau-10-56782) represented as RGB hexadecimal strings.\n\n### Diverging\n\nDiverging color schemes are available as continuous interpolators (often used with [d3.scaleSequential](https://github.com/d3/d3-scale/blob/master/README.md#sequential-scales)) and as discrete schemes (often used with [d3.scaleOrdinal](https://github.com/d3/d3-scale/blob/master/README.md#ordinal-scales)). Each discrete scheme, such as [d3.schemeBrBG](#schemeBrBG), is represented as an array of arrays of hexadecimal color strings. The *k*th element of this array contains the color scheme of size *k*; for example, `d3.schemeBrBG[9]` contains an array of nine strings representing the nine colors of the brown-blue-green diverging color scheme. Diverging color schemes support a size *k* ranging from 3 to 11.\n\n# d3.interpolateBrBG(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/BrBG.js \"Source\")\n
# d3.schemeBrBG[*k*]\n\n\"BrBG\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “BrBG” diverging color scheme represented as an RGB string.\n\n# d3.interpolatePRGn(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/PRGn.js \"Source\")\n
# d3.schemePRGn[*k*]\n\n\"PRGn\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “PRGn” diverging color scheme represented as an RGB string.\n\n# d3.interpolatePiYG(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/PiYG.js \"Source\")\n
# d3.schemePiYG[*k*]\n\n\"PiYG\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “PiYG” diverging color scheme represented as an RGB string.\n\n# d3.interpolatePuOr(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/PuOr.js \"Source\")\n
# d3.schemePuOr[*k*]\n\n\"PuOr\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “PuOr” diverging color scheme represented as an RGB string.\n\n# d3.interpolateRdBu(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/RdBu.js \"Source\")\n
# d3.schemeRdBu[*k*]\n\n\"RdBu\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “RdBu” diverging color scheme represented as an RGB string.\n\n# d3.interpolateRdGy(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/RdGy.js \"Source\")\n
# d3.schemeRdGy[*k*]\n\n\"RdGy\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “RdGy” diverging color scheme represented as an RGB string.\n\n# d3.interpolateRdYlBu(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/RdYlBu.js \"Source\")\n
# d3.schemeRdYlBu[*k*]\n\n\"RdYlBu\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “RdYlBu” diverging color scheme represented as an RGB string.\n\n# d3.interpolateRdYlGn(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/RdYlGn.js \"Source\")\n
# d3.schemeRdYlGn[*k*]\n\n\"RdYlGn\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “RdYlGn” diverging color scheme represented as an RGB string.\n\n# d3.interpolateSpectral(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/diverging/Spectral.js \"Source\")\n
# d3.schemeSpectral[*k*]\n\n\"Spectral\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “Spectral” diverging color scheme represented as an RGB string.\n\n### Sequential (Single Hue)\n\nSequential, single-hue color schemes are available as continuous interpolators (often used with [d3.scaleSequential](https://github.com/d3/d3-scale/blob/master/README.md#sequential-scales)) and as discrete schemes (often used with [d3.scaleOrdinal](https://github.com/d3/d3-scale/blob/master/README.md#ordinal-scales)). Each discrete scheme, such as [d3.schemeBlues](#schemeBlues), is represented as an array of arrays of hexadecimal color strings. The *k*th element of this array contains the color scheme of size *k*; for example, `d3.schemeBlues[9]` contains an array of nine strings representing the nine colors of the blue sequential color scheme. Sequential, single-hue color schemes support a size *k* ranging from 3 to 9.\n\n# d3.interpolateBlues(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-single/Blues.js \"Source\")\n
# d3.schemeBlues[*k*]\n\n\"Blues\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “Blues” sequential color scheme represented as an RGB string.\n\n# d3.interpolateGreens(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-single/Greens.js \"Source\")\n
# d3.schemeGreens[*k*]\n\n\"Greens\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “Greens” sequential color scheme represented as an RGB string.\n\n# d3.interpolateGreys(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-single/Greys.js \"Source\")\n
# d3.schemeGreys[*k*]\n\n\"Greys\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “Greys” sequential color scheme represented as an RGB string.\n\n# d3.interpolateOranges(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-single/Oranges.js \"Source\")\n
# d3.schemeOranges[*k*]\n\n\"Oranges\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “Oranges” sequential color scheme represented as an RGB string.\n\n# d3.interpolatePurples(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-single/Purples.js \"Source\")\n
# d3.schemePurples[*k*]\n\n\"Purples\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “Purples” sequential color scheme represented as an RGB string.\n\n# d3.interpolateReds(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-single/Reds.js \"Source\")\n
# d3.schemeReds[*k*]\n\n\"Reds\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “Reds” sequential color scheme represented as an RGB string.\n\n### Sequential (Multi-Hue)\n\nSequential, multi-hue color schemes are available as continuous interpolators (often used with [d3.scaleSequential](https://github.com/d3/d3-scale/blob/master/README.md#sequential-scales)) and as discrete schemes (often used with [d3.scaleOrdinal](https://github.com/d3/d3-scale/blob/master/README.md#ordinal-scales)). Each discrete scheme, such as [d3.schemeBuGn](#schemeBuGn), is represented as an array of arrays of hexadecimal color strings. The *k*th element of this array contains the color scheme of size *k*; for example, `d3.schemeBuGn[9]` contains an array of nine strings representing the nine colors of the blue-green sequential color scheme. Sequential, multi-hue color schemes support a size *k* ranging from 3 to 9.\n\n# d3.interpolateTurbo(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/turbo.js \"Source\")\n\n\"turbo\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “turbo” color scheme by [Google AI](https://ai.googleblog.com/2019/08/turbo-improved-rainbow-colormap-for.html).\n\n# d3.interpolateViridis(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/viridis.js \"Source\")\n\n\"viridis\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “viridis” perceptually-uniform color scheme designed by [van der Walt, Smith and Firing](https://bids.github.io/colormap/) for matplotlib, represented as an RGB string.\n\n# d3.interpolateInferno(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/viridis.js \"Source\")\n\n\"inferno\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “inferno” perceptually-uniform color scheme designed by [van der Walt and Smith](https://bids.github.io/colormap/) for matplotlib, represented as an RGB string.\n\n# d3.interpolateMagma(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/viridis.js \"Source\")\n\n\"magma\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “magma” perceptually-uniform color scheme designed by [van der Walt and Smith](https://bids.github.io/colormap/) for matplotlib, represented as an RGB string.\n\n# d3.interpolatePlasma(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/viridis.js \"Source\")\n\n\"plasma\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “plasma” perceptually-uniform color scheme designed by [van der Walt and Smith](https://bids.github.io/colormap/) for matplotlib, represented as an RGB string.\n\n# d3.interpolateCividis(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/cividis.js \"Source\")\n\n\"cividis\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “cividis” color vision deficiency-optimized color scheme designed by [Nuñez, Anderton, and Renslow](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0199239), represented as an RGB string.\n\n# d3.interpolateWarm(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/rainbow.js \"Source\")\n\n\"warm\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from a 180° rotation of [Niccoli’s perceptual rainbow](https://mycarta.wordpress.com/2013/02/21/perceptual-rainbow-palette-the-method/), represented as an RGB string.\n\n# d3.interpolateCool(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/rainbow.js \"Source\")\n\n\"cool\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from [Niccoli’s perceptual rainbow](https://mycarta.wordpress.com/2013/02/21/perceptual-rainbow-palette-the-method/), represented as an RGB string.\n\n# d3.interpolateCubehelixDefault(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/cubehelix.js \"Source\")\n\n\"cubehelix\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from [Green’s default Cubehelix](https://www.mrao.cam.ac.uk/~dag/CUBEHELIX/) represented as an RGB string.\n\n# d3.interpolateBuGn(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/BuGn.js \"Source\")\n
# d3.schemeBuGn[*k*]\n\n\"BuGn\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “BuGn” sequential color scheme represented as an RGB string.\n\n# d3.interpolateBuPu(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/BuPu.js \"Source\")\n
# d3.schemeBuPu[*k*]\n\n\"BuPu\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “BuPu” sequential color scheme represented as an RGB string.\n\n# d3.interpolateGnBu(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/GnBu.js \"Source\")\n
# d3.schemeGnBu[*k*]\n\n\"GnBu\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “GnBu” sequential color scheme represented as an RGB string.\n\n# d3.interpolateOrRd(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/OrRd.js \"Source\")\n
# d3.schemeOrRd[*k*]\n\n\"OrRd\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “OrRd” sequential color scheme represented as an RGB string.\n\n# d3.interpolatePuBuGn(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/PuBuGn.js \"Source\")\n
# d3.schemePuBuGn[*k*]\n\n\"PuBuGn\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “PuBuGn” sequential color scheme represented as an RGB string.\n\n# d3.interpolatePuBu(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/PuBu.js \"Source\")\n
# d3.schemePuBu[*k*]\n\n\"PuBu\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “PuBu” sequential color scheme represented as an RGB string.\n\n# d3.interpolatePuRd(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/PuRd.js \"Source\")\n
# d3.schemePuRd[*k*]\n\n\"PuRd\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “PuRd” sequential color scheme represented as an RGB string.\n\n# d3.interpolateRdPu(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/RdPu.js \"Source\")\n
# d3.schemeRdPu[*k*]\n\n\"RdPu\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “RdPu” sequential color scheme represented as an RGB string.\n\n# d3.interpolateYlGnBu(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/YlGnBu.js \"Source\")\n
# d3.schemeYlGnBu[*k*]\n\n\"YlGnBu\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “YlGnBu” sequential color scheme represented as an RGB string.\n\n# d3.interpolateYlGn(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/YlGn.js \"Source\")\n
# d3.schemeYlGn[*k*]\n\n\"YlGn\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “YlGn” sequential color scheme represented as an RGB string.\n\n# d3.interpolateYlOrBr(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/YlOrBr.js \"Source\")\n
# d3.schemeYlOrBr[*k*]\n\n\"YlOrBr\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “YlOrBr” sequential color scheme represented as an RGB string.\n\n# d3.interpolateYlOrRd(*t*) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/YlOrRd.js \"Source\")\n
# d3.schemeYlOrRd[*k*]\n\n\"YlOrRd\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “YlOrRd” sequential color scheme represented as an RGB string.\n\n### Cyclical\n\n# d3.interpolateRainbow(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/rainbow.js \"Source\")\n\n\"rainbow\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from [d3.interpolateWarm](#interpolateWarm) scale from [0.0, 0.5] followed by the [d3.interpolateCool](#interpolateCool) scale from [0.5, 1.0], thus implementing the cyclical [less-angry rainbow](http://bl.ocks.org/mbostock/310c99e53880faec2434) color scheme.\n\n# d3.interpolateSinebow(t) [<>](https://github.com/d3/d3-scale-chromatic/blob/master/src/sequential-multi/sinebow.js \"Source\")\n\n\"sinebow\"\n\nGiven a number *t* in the range [0,1], returns the corresponding color from the “sinebow” color scheme by [Jim Bumgardner](https://krazydad.com/tutorials/makecolors.php) and [Charlie Loyd](http://basecase.org/env/on-rainbows).\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-color": "1", "d3-interpolate": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-scale-chromatic", "error": "[Circular]", "extraneous": false }, "d3-selection": { "_from": "d3-selection@1", "_id": "d3-selection@1.4.2", "_inBundle": false, "_integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", "_location": "/d3-selection", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", "_shasum": "dcaa49522c0dbf32d6c1858afc26b6094555bc5c", "_spec": "d3-selection@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Data-driven DOM manipulation: select elements and join them to data.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-selection/", "jsdelivr": "dist/d3-selection.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-selection.js", "module": "src/index.js", "name": "d3-selection", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-selection.min.js", "version": "1.4.2", "readme": "# d3-selection\n\nSelections allow powerful data-driven transformation of the document object model (DOM): set [attributes](#selection_attr), [styles](#selection_style), [properties](#selection_property), [HTML](#selection_html) or [text](#selection_text) content, and more. Using the [data join](#joining-data)’s [enter](#selection_enter) and [exit](#selection_enter) selections, you can also [add](#selection_append) or [remove](#selection_remove) elements to correspond to data.\n\nSelection methods typically return the current selection, or a new selection, allowing the concise application of multiple operations on a given selection via method chaining. For example, to set the class and color style of all paragraph elements in the current document:\n\n```js\nd3.selectAll(\"p\")\n .attr(\"class\", \"graf\")\n .style(\"color\", \"red\");\n```\n\nThis is equivalent to:\n\n```js\nconst p = d3.selectAll(\"p\");\np.attr(\"class\", \"graf\");\np.style(\"color\", \"red\");\n```\n\nBy convention, selection methods that return the current selection use *four* spaces of indent, while methods that return a new selection use only *two*. This helps reveal changes of context by making them stick out of the chain:\n\n```js\nd3.select(\"body\")\n .append(\"svg\")\n .attr(\"width\", 960)\n .attr(\"height\", 500)\n .append(\"g\")\n .attr(\"transform\", \"translate(20,20)\")\n .append(\"rect\")\n .attr(\"width\", 920)\n .attr(\"height\", 460);\n```\n\nSelections are immutable. All selection methods that affect which elements are selected (or their order) return a new selection rather than modifying the current selection. However, note that elements are necessarily mutable, as selections drive transformations of the document!\n\n## Installing\n\nIf you use NPM, `npm install d3-selection`. Otherwise, download the [latest release](https://github.com/d3/d3-selection/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-selection.v1.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\n\n```\n\n[Try d3-selection in your browser.](https://observablehq.com/collection/@d3/d3-selection)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Joining Data](#joining-data)\n* [Handling Events](#handling-events)\n* [Control Flow](#control-flow)\n* [Local Variables](#local-variables)\n* [Namespaces](#namespaces)\n\n### Selecting Elements\n\nSelection methods accept [W3C selector strings](http://www.w3.org/TR/selectors-api/) such as `.fancy` to select elements with the class *fancy*, or `div` to select DIV elements. Selection methods come in two forms: select and selectAll: the former selects only the first matching element, while the latter selects all matching elements in document order. The top-level selection methods, [d3.select](#select) and [d3.selectAll](#selectAll), query the entire document; the subselection methods, [*selection*.select](#selection_select) and [*selection*.selectAll](#selection_selectAll), restrict selection to descendants of the selected elements.\n\n# d3.selection() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/index.js#L38 \"Source\")\n\n[Selects](#select) the root element, `document.documentElement`. This function can also be used to test for selections (`instanceof d3.selection`) or to extend the selection prototype. For example, to add a method to check checkboxes:\n\n```js\nd3.selection.prototype.checked = function(value) {\n return arguments.length < 1\n ? this.property(\"checked\")\n : this.property(\"checked\", !!value);\n};\n```\n\nAnd then to use:\n\n```js\nd3.selectAll(\"input[type=checkbox]\").checked(true);\n```\n\n# d3.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/select.js#L3 \"Source\")\n\nSelects the first element that matches the specified *selector* string. If no elements match the *selector*, returns an empty selection. If multiple elements match the *selector*, only the first matching element (in document order) will be selected. For example, to select the first anchor element:\n\n```js\nconst anchor = d3.select(\"a\");\n```\n\nIf the *selector* is not a string, instead selects the specified node; this is useful if you already have a reference to a node, such as `this` within an event listener or a global such as `document.body`. For example, to make a clicked paragraph red:\n\n```js\nd3.selectAll(\"p\").on(\"click\", function() {\n d3.select(this).style(\"color\", \"red\");\n});\n```\n\n# d3.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js#L3 \"Source\")\n\nSelects all elements that match the specified *selector* string. The elements will be selected in document order (top-to-bottom). If no elements in the document match the *selector*, or if the *selector* is null or undefined, returns an empty selection. For example, to select all paragraphs:\n\n```js\nconst paragraph = d3.selectAll(\"p\");\n```\n\nIf the *selector* is not a string, instead selects the specified array of nodes; this is useful if you already have a reference to nodes, such as `this.childNodes` within an event listener or a global such as `document.links`. The nodes may instead be a pseudo-array such as a `NodeList` or `arguments`. For example, to color all links red:\n\n```js\nd3.selectAll(document.links).style(\"color\", \"red\");\n```\n\n# selection.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/select.js \"Source\")\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string. If no element matches the specified selector for the current element, the element at the current index will be null in the returned selection. (If the *selector* is null, every element in the returned selection will be null, resulting in an empty selection.) If the current element has associated data, this data is propagated to the corresponding selected element. If multiple elements match the selector, only the first matching element in document order is selected. For example, to select the first bold element in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").select(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an element, or null if there is no matching element. For example, to select the previous sibling of each paragraph:\n\n```js\nconst previous = d3.selectAll(\"p\").select(function() {\n return this.previousElementSibling;\n});\n```\n\nUnlike [*selection*.selectAll](#selection_selectAll), *selection*.select does not affect grouping: it preserves the existing group structure and indexes, and propagates data (if any) to selected children. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/selectAll.js \"Source\")\n\nFor each selected element, selects the descendant elements that match the specified *selector* string. The elements in the returned selection are grouped by their corresponding parent node in this selection. If no element matches the specified selector for the current element, or if the *selector* is null, the group at the current index will be empty. The selected elements do not inherit data from this selection; use [*selection*.data](#selection_data) to propagate data to children. For example, to select the bold elements in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").selectAll(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an array of elements (or a pseudo-array, such as a NodeList), or the empty array if there are no matching elements. For example, to select the previous and next siblings of each paragraph:\n\n```js\nconst sibling = d3.selectAll(\"p\").selectAll(function() {\n return [\n this.previousElementSibling,\n this.nextElementSibling\n ];\n});\n```\n\nUnlike [*selection*.select](#selection_select), *selection*.selectAll does affect grouping: each selected descendant is grouped by the parent element in the originating selection. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.filter(filter) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/filter.js \"Source\")\n\nFilters the selection, returning a new selection that contains only the elements for which the specified *filter* is true. The *filter* may be specified either as a selector string or a function. If the *filter* is 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 (*nodes*[*i*]).\n\nFor example, to filter a selection of table rows to contain only even rows:\n\n```js\nconst even = d3.selectAll(\"tr\").filter(\":nth-child(even)\");\n```\n\nThis is approximately equivalent to using [d3.selectAll](#selectAll) directly, although the indexes may be different:\n\n```js\nconst even = d3.selectAll(\"tr:nth-child(even)\");\n```\n\nSimilarly, using a function:\n\n```js\nconst even = d3.selectAll(\"tr\").filter((d, i) => i & 1);\n```\n\nOr using [*selection*.select](#selection_select) (and avoiding an arrow function, since *this* is needed to refer to the current element):\n\n```js\nconst even = d3.selectAll(\"tr\").select(function(d, i) { return i & 1 ? this : null; });\n```\n\nNote that the `:nth-child` pseudo-class is a one-based index rather than a zero-based index. Also, the above filter functions do not have precisely the same meaning as `:nth-child`; they rely on the selection index rather than the number of preceding sibling elements in the DOM.\n\nThe returned filtered selection preserves the parents of this selection, but like [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), it does not preserve indexes as some elements may be removed; use [*selection*.select](#selection_select) to preserve the index, if needed.\n\n# selection.merge(other) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/merge.js \"Source\")\n\nReturns a new selection merging this selection with the specified *other* selection. The returned selection has the same number of groups and the same parents as this selection. Any missing (null) elements in this selection are filled with the corresponding element, if present (not null), from the specified *selection*. (If the *other* selection has additional groups or parents, they are ignored.)\n\nThis method is used internally by [*selection*.join](#selection_join) to merge the [enter](#selection_enter) and [update](#selection_data) selections after [binding data](#joining-data). You can also merge explicitly, although note that since merging is based on element index, you should use operations that preserve index, such as [*selection*.select](#selection_select) instead of [*selection*.filter](#selection_filter). For example:\n\n```js\nconst odd = selection.select(function(d, i) { return i & 1 ? this : null; ));\nconst even = selection.select(function(d, i) { return i & 1 ? null : this; ));\nconst merged = odd.merge(even);\n```\n\nSee [*selection*.data](#selection_data) for more.\n\nThis method is not intended for concatenating arbitrary selections, however: if both this selection and the specified *other* selection have (non-null) elements at the same index, this selection’s element is returned in the merge and the *other* selection’s element is ignored.\n\n# d3.matcher(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/matcher.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns true if `this` element [matches](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) the specified selector. This method is used internally by [*selection*.filter](#selection_filter). For example, this:\n\n```js\nconst div = selection.filter(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.filter(d3.matcher(\"div\"));\n```\n\n(Although D3 is not a compatibility layer, this implementation does support vendor-prefixed implementations due to the recent standardization of *element*.matches.)\n\n# d3.selector(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selector.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns the first descendant of `this` element that matches the specified selector. This method is used internally by [*selection*.select](#selection_select). For example, this:\n\n```js\nconst div = selection.select(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.select(d3.selector(\"div\"));\n```\n\n# d3.selectorAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns all descendants of `this` element that match the specified selector. This method is used internally by [*selection*.selectAll](#selection_selectAll). For example, this:\n\n```js\nconst div = selection.selectAll(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.selectAll(d3.selectorAll(\"div\"));\n```\n\n# d3.window(node) [<>](https://github.com/d3/d3-selection/blob/master/src/window.js \"Source\")\n\nReturns the owner window for the specified *node*. If *node* is a node, returns the owner document’s default view; if *node* is a document, returns its default view; otherwise returns the *node*.\n\n# d3.style(node, name) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js#L32 \"Source\")\n\nReturns the value of the style property with the specified *name* for the specified *node*. If the *node* has an inline style with the specified *name*, its value is returned; otherwise, the [computed property value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value) is returned. See also [*selection*.style](#selection_style).\n\n### Modifying Elements\n\nAfter selecting elements, use the selection’s transformation methods to affect document content. For example, to set the name attribute and color style of an anchor element:\n\n```js\nd3.select(\"a\")\n .attr(\"name\", \"fred\")\n .style(\"color\", \"red\");\n```\n\nTo experiment with selections, visit [d3js.org](https://d3js.org) and open your browser’s developer console! (In Chrome, open the console with ⌥⌘J.) Select elements and then inspect the returned selection to see which elements are selected and how they are grouped. Call selection methods and see how the page content changes.\n\n# selection.attr(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/attr.js \"Source\")\n\nIf a *value* is specified, sets the attribute with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, all elements are given the same attribute value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s attribute. A null value will remove the specified attribute.\n\nIf a *value* is not specified, returns the current value of the specified attribute for the first (non-null) element in the selection. This is generally useful only if you know that the selection contains exactly one element.\n\nThe specified *name* may have a namespace prefix, such as `xlink:href` to specify the `href` attribute in the XLink namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map.\n\n# selection.classed(names[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/classed.js \"Source\")\n\nIf a *value* is specified, assigns or unassigns the specified CSS class *names* on the selected elements by setting the `class` attribute or modifying the `classList` property and returns this selection. The specified *names* is a string of space-separated class names. For example, to assign the classes `foo` and `bar` to the selected elements:\n\n```js\nselection.classed(\"foo bar\", true);\n```\n\nIf the *value* is truthy, then all elements are assigned the specified classes; otherwise, the classes are unassigned. If the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to assign or unassign classes on each element. For example, to randomly associate the class *foo* with on average half the selected elements:\n\n```js\nselection.classed(\"foo\", () => Math.random() > 0.5);\n```\n\nIf a *value* is not specified, returns true if and only if the first (non-null) selected element has the specified *classes*. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.style(name[, value[, priority]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js \"Source\")\n\nIf a *value* is specified, sets the style property with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, then all elements are given the same style property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s style property. A null value will remove the style property. An optional *priority* may also be specified, either as null or the string `important` (without the exclamation point).\n\nIf a *value* is not specified, returns the current value of the specified style property for the first (non-null) element in the selection. The current value is defined as the element’s inline value, if present, and otherwise its [computed value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value). Accessing the current style value is generally useful only if you know the selection contains exactly one element.\n\nCaution: unlike many SVG attributes, CSS styles typically have associated units. For example, `3px` is a valid stroke-width property value, while `3` is not. Some browsers implicitly assign the `px` (pixel) unit to numeric values, but not all browsers do: IE, for example, throws an “invalid arguments” error!\n\n# selection.property(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/property.js \"Source\")\n\nSome HTML elements have special properties that are not addressable using attributes or styles, such as a form field’s text `value` and a checkbox’s `checked` boolean. Use this method to get or set these properties.\n\nIf a *value* is specified, sets the property with the specified *name* to the specified value on selected elements. If the *value* is a constant, then all elements are given the same property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s property. A null value will delete the specified property.\n\nIf a *value* is not specified, returns the value of the specified property for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.text([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/text.js \"Source\")\n\nIf a *value* is specified, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same text content; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nIf a *value* is not specified, returns the text content for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.html([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/html.js \"Source\")\n\nIf a *value* is specified, sets the [inner HTML](http://dev.w3.org/html5/spec-LC/apis-in-html-documents.html#innerhtml) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same inner HTML; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s inner HTML. A null value will clear the content.\n\nIf a *value* is not specified, returns the inner HTML for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nUse [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) instead to create data-driven content; this method is intended for when you want a little bit of HTML, say for rich formatting. Also, *selection*.html is only supported on HTML elements. SVG elements and other non-HTML elements do not support the innerHTML property, and thus are incompatible with *selection*.html. Consider using [XMLSerializer](https://developer.mozilla.org/en-US/docs/XMLSerializer) to convert a DOM subtree to text. See also the [innersvg polyfill](https://code.google.com/p/innersvg/), which provides a shim to support the innerHTML property on SVG elements.\n\n# selection.append(type) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/append.js \"Source\")\n\nIf the specified *type* is a string, appends a new element of this type (tag name) as the last child of each selected element, or before the next following sibling in the update selection if this is an [enter selection](#selection_enter). The latter behavior for enter selections allows you to insert elements into the DOM in an order consistent with the new bound data; however, note that [*selection*.order](#selection_order) may still be required if updating elements change order (*i.e.*, if the order of new data is inconsistent with old data).\n\nIf the specified *type* is 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 (*nodes*[*i*]). This function should return an element to be appended. (The function typically creates a new element, but it may instead return an existing element.) For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").append(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").append(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.appendChild(document.createElement(\"p\"));\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.insert(type[, before]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/insert.js \"Source\")\n\nIf the specified *type* is a string, inserts a new element of this type (tag name) before the first element matching the specified *before* selector for each selected element. For example, a *before* selector `:first-child` will prepend nodes before the first child. If *before* is not specified, it defaults to null. (To append elements in an order consistent with [bound data](#joining-data), use [*selection*.append](#selection_append).)\n\nBoth *type* and *before* may instead be specified as functions which are 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 (*nodes*[*i*]). The *type* function should return an element to be inserted; the *before* function should return the child element before which the element should be inserted. For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").insert(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").insert(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.insertBefore(document.createElement(\"p\"), null);\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.remove() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/remove.js \"Source\")\n\nRemoves the selected elements from the document. Returns this selection (the removed elements) which are now detached from the DOM. There is not currently a dedicated API to add removed elements back to the document; however, you can pass a function to [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) to re-add elements.\n\n# selection.clone([deep]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/clone.js \"Source\")\n\nInserts clones of the selected elements immediately following the selected elements and returns a selection of the newly added clones. If *deep* is truthy, the descendant nodes of the selected elements will be cloned as well. Otherwise, only the elements themselves will be cloned. Equivalent to:\n\n```js\nselection.select(function() {\n return this.parentNode.insertBefore(this.cloneNode(deep), this.nextSibling);\n});\n```\n\n# selection.sort(compare) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/sort.js \"Source\")\n\nReturns a new selection that contains a copy of each group in this selection sorted according to the *compare* function. After sorting, re-inserts elements to match the resulting order (per [*selection*.order](#selection_order)).\n\nThe compare function, which defaults to [ascending](https://github.com/d3/d3-array#ascending), is passed two elements’ data *a* and *b* to compare. It should return either a negative, positive, or zero value. If negative, then *a* should be before *b*; if positive, then *a* should be after *b*; otherwise, *a* and *b* are considered equal and the order is arbitrary.\n\nNote that sorting is not guaranteed to be stable; however, it is guaranteed to have the same behavior as your browser’s built-in [sort](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort) method on arrays.\n\n# selection.order() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/order.js \"Source\")\n\nRe-inserts elements into the document such that the document order of each group matches the selection order. This is equivalent to calling [*selection*.sort](#selection_sort) if the data is already sorted, but much faster.\n\n# selection.raise() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/raise.js \"Source\")\n\nRe-inserts each selected element, in order, as the last child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.appendChild(this);\n});\n```\n\n# selection.lower() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/lower.js \"Source\")\n\nRe-inserts each selected element, in order, as the first child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.insertBefore(this, this.parentNode.firstChild);\n});\n```\n\n# d3.create(name) [<>](https://github.com/d3/d3-selection/blob/master/src/create.js \"Source\")\n\nGiven the specified element *name*, returns a single-element selection containing a detached element of the given name in the current document. This method assumes the HTML namespace, so you must specify a namespace explicitly when creating SVG or other non-HTML elements; see [namespace](#namespace) for details on supported namespace prefixes.\n\n```js\nd3.create(\"svg\") // equivalent to svg:svg\nd3.create(\"svg:svg\") // more explicitly\nd3.create(\"svg:g\") // an SVG G element\nd3.create(\"g\") // an HTML G (unknown) element\n```\n\n# d3.creator(name) [<>](https://github.com/d3/d3-selection/blob/master/src/creator.js \"Source\")\n\nGiven the specified element *name*, returns a function which creates an element of the given name, assuming that `this` is the parent element. This method is used internally by [*selection*.append](#selection_append) and [*selection*.insert](#selection_insert) to create new elements. For example, this:\n\n```js\nselection.append(\"div\");\n```\n\nIs equivalent to:\n\n```js\nselection.append(d3.creator(\"div\"));\n```\n\nSee [namespace](#namespace) for details on supported namespace prefixes, such as for SVG elements.\n\n### Joining Data\n\nFor an introduction to D3’s data joins, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join). Also see [Thinking With Joins](http://bost.ocks.org/mike/join/).\n\n# selection.data([data[, key]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/data.js \"Source\")\n\nBinds the specified array of *data* with the selected elements, returning a new selection that represents the *update* selection: the elements successfully bound to data. Also defines the [enter](#selection_enter) and [exit](#selection_exit) selections on the returned selection, which can be used to add or remove elements to correspond to the new data. The specified *data* is an array of arbitrary values (*e.g.*, numbers or objects), or a function that returns an array of values for each group. When data is assigned to an element, it is stored in the property `__data__`, thus making the data “sticky” and available on re-selection.\n\nThe *data* is specified **for each group** in the selection. If the selection has multiple groups (such as [d3.selectAll](#selectAll) followed by [*selection*.selectAll](#selection_selectAll)), then *data* should typically be specified as a function. This function will be evaluated for each group in order, being passed the group’s parent datum (*d*, which may be undefined), the group index (*i*), and the selection’s parent nodes (*nodes*), with *this* as the group’s parent element.\n\nIn conjunction with [*selection*.join](#selection_join) (or more explicitly with [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append) and [*selection*.remove](#selection_remove)), *selection*.data can be used to enter, update and exit elements to match data. For example, to create an HTML table from a matrix of numbers:\n\n```js\nconst matrix = [\n [11975, 5871, 8916, 2868],\n [ 1951, 10048, 2060, 6171],\n [ 8010, 16145, 8090, 8045],\n [ 1013, 990, 940, 6907]\n];\n\nd3.select(\"body\")\n .append(\"table\")\n .selectAll(\"tr\")\n .data(matrix)\n .join(\"tr\")\n .selectAll(\"td\")\n .data(d => d)\n .join(\"td\")\n .text(d => d);\n```\n\nIn this example the *data* function is the identity function: for each table row, it returns the corresponding row from the data matrix.\n\nIf a *key* function is not specified, then the first datum in *data* is assigned to the first selected element, the second datum to the second selected element, and so on. A *key* function may be specified to control which datum is assigned to which element, replacing the default join-by-index, by computing a string identifier for each datum and element. This key 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 (*nodes*[*i*]); the returned string is the element’s key. The key function is then also evaluated for each new datum in *data*, being passed the current datum (*d*), the current index (*i*), and the group’s new *data*, with *this* as the group’s parent DOM element; the returned string is the datum’s key. The datum for a given key is assigned to the element with the matching key. If multiple elements have the same key, the duplicate elements are put into the exit selection; if multiple data have the same key, the duplicate data are put into the enter selection.\n\nFor example, given this document:\n\n```html\n
\n
\n
\n
\n
\n
\n```\n\nYou could join data by key as follows:\n\n\n```js\nconst data = [\n {name: \"Locke\", number: 4},\n {name: \"Reyes\", number: 8},\n {name: \"Ford\", number: 15},\n {name: \"Jarrah\", number: 16},\n {name: \"Shephard\", number: 23},\n {name: \"Kwon\", number: 42}\n];\n\nd3.selectAll(\"div\")\n .data(data, function(d) { return d ? d.name : this.id; })\n .text(d => d.number);\n```\n\nThis example key function uses the datum *d* if present, and otherwise falls back to the element’s id property. Since these elements were not previously bound to data, the datum *d* is null when the key function is evaluated on selected elements, and non-null when the key function is evaluated on the new data.\n\nThe *update* and *enter* selections are returned in data order, while the *exit* selection preserves the selection order prior to the join. If a key function is specified, the order of elements in the selection may not match their order in the document; use [*selection*.order](#selection_order) or [*selection*.sort](#selection_sort) as needed. For more on how the key function affects the join, see [A Bar Chart, Part 2](http://bost.ocks.org/mike/bar/2/) and [Object Constancy](http://bost.ocks.org/mike/constancy/).\n\nIf *data* is not specified, this method returns the array of data for the selected elements.\n\nThis method cannot be used to clear bound data; use [*selection*.datum](#selection_datum) instead.\n\n# selection.join(enter[, update][, exit]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/join.js \"Source\")\n\nAppends, removes and reorders elements as necessary to match the data that was previously bound by [*selection*.data](#selection_data), returning the [merged](#selection_merge) enter and update selection. This method is a convenient alternative to the explicit [general update pattern](https://bl.ocks.org/mbostock/3808218), replacing [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append), [*selection*.remove](#selection_remove), and [*selection*.order](#selection_order). For example:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\"circle\")\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n```\n\nThe *enter* function may be specified as a string shorthand, as above, which is equivalent to [*selection*.append](#selection_append) with the given element name. Likewise, optional *update* and *exit* functions may be specified, which default to the identity function and calling [*selection*.remove](#selection_remove), respectively. The shorthand above is thus equivalent to:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\"),\n update => update,\n exit => exit.remove()\n )\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n````\n\nBy passing separate functions on enter, update and exit, you have greater control over what happens. And by specifying a key function to [*selection*.data](#selection_data), you can minimize changes to the DOM to optimize performance. For example, to set different fill colors for enter and update:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\").attr(\"fill\", \"green\"),\n update => update.attr(\"fill\", \"blue\")\n )\n .attr(\"stroke\", \"black\");\n```\n\nThe selections returned by the *enter* and *update* functions are merged and then returned by *selection*.join.\n\nYou also animate enter, update and exit by creating transitions inside the *enter*, *update* and *exit* functions. To avoid breaking the method chain, use *selection*.call to create transitions, or return an undefined enter or update selection to prevent merging: the return value of the *enter* and *update* functions specifies the two selections to merge and return by *selection*.join.\n\nFor more, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join).\n\n# selection.enter() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/enter.js \"Source\")\n\nReturns the enter selection: placeholder nodes for each datum that had no corresponding DOM element in the selection. (The enter selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe enter selection is typically used to create “missing” elements corresponding to new data. For example, to create DIV elements from an array of numbers:\n\n```js\nconst div = d3.select(\"body\")\n .selectAll(\"div\")\n .data([4, 8, 15, 16, 23, 42])\n .enter().append(\"div\")\n .text(d => d);\n```\n\nIf the body is initially empty, the above code will create six new DIV elements, append them to the body in-order, and assign their text content as the associated (string-coerced) number:\n\n```html\n
4
\n
8
\n
15
\n
16
\n
23
\n
42
\n```\n\nConceptually, the enter selection’s placeholders are pointers to the parent element (in this example, the document body). The enter selection is typically only used transiently to append elements, and is often [merged](#selection_merge) with the update selection after appending, such that modifications can be applied to both entering and updating elements.\n\n# selection.exit() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/exit.js \"Source\")\n\nReturns the exit selection: existing DOM elements in the selection for which no new datum was found. (The exit selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe exit selection is typically used to remove “superfluous” elements corresponding to old data. For example, to update the DIV elements created previously with a new array of numbers:\n\n```js\ndiv = div.data([1, 2, 4, 8, 16, 32], d => d);\n```\n\nSince a key function was specified (as the identity function), and the new data contains the numbers [4, 8, 16] which match existing elements in the document, the update selection contains three DIV elements. Leaving those elements as-is, we can append new elements for [1, 2, 32] using the enter selection:\n\n```js\ndiv.enter().append(\"div\").text(d => d);\n```\n\nLikewise, to remove the exiting elements [15, 23, 42]:\n\n```js\ndiv.exit().remove();\n```\n\nNow the document body looks like this:\n\n```html\n
1
\n
2
\n
4
\n
8
\n
16
\n
32
\n```\n\nThe order of the DOM elements matches the order of the data because the old data’s order and the new data’s order were consistent. If the new data’s order is different, use [*selection*.order](#selection_order) to reorder the elements in the DOM. See the [General Update Pattern](http://bl.ocks.org/mbostock/3808218) example thread for more on data joins.\n\n# selection.datum([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/datum.js \"Source\")\n\nGets or sets the bound data for each selected element. Unlike [*selection*.data](#selection_data), this method does not compute a join and does not affect indexes or the enter and exit selections.\n\nIf a *value* is specified, sets the element’s bound data to the specified value on all selected elements. If the *value* is a constant, all elements are given the same datum; otherwise, if the *value* is 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 (*nodes*[*i*]). The function is then used to set each element’s new data. A null value will delete the bound data.\n\nIf a *value* is not specified, returns the bound datum for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nThis method is useful for accessing HTML5 [custom data attributes](http://www.w3.org/TR/html5/dom.html#custom-data-attribute). For example, given the following elements:\n\n```html\n
    \n
  • Shawn Allen
  • \n
  • Mike Bostock
  • \n
\n```\n\nYou can expose the custom data attributes by setting each element’s data as the built-in [dataset](http://www.w3.org/TR/html5/dom.html#dom-dataset) property:\n\n```js\nselection.datum(function() { return this.dataset; })\n```\n\n### Handling Events\n\nFor interaction, selections allow listening for and dispatching of events.\n\n# selection.on(typenames[, listener[, options]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js \"Source\")\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is a string event type, such as `click`, `mouseover`, or `submit`; any [DOM event type](https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events) supported by your browser may be used. The 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 `click.foo` and `click.bar`. To specify multiple typenames, separate typenames with spaces, such as `input change` or `click.foo click.bar`.\n\nWhen a specified event is dispatched on a selected element, the specified *listener* will be evaluated for the element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element (*nodes*[*i*]). 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. To access the current event within a listener, use [d3.event](#event).\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\nAn optional *options* object may specify characteristics about the event listener, such as whether it is capturing or passive; see [*element*.addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener).\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# selection.dispatch(type[, parameters]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/dispatch.js \"Source\")\n\nDispatches a [custom event](http://www.w3.org/TR/dom/#interface-customevent) of the specified *type* to each selected element, in order. An optional *parameters* map may be specified to set additional properties of the event. It may contain the following fields:\n\n* [`bubbles`](https://www.w3.org/TR/dom/#dom-event-bubbles) - if true, the event is dispatched to ancestors in reverse tree order.\n* [`cancelable`](https://www.w3.org/TR/dom/#dom-event-cancelable) - if true, *event*.preventDefault is allowed.\n* [`detail`](https://www.w3.org/TR/dom/#dom-customevent-detail) - any custom data associated with the event.\n\nIf *parameters* is 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 (*nodes*[*i*]). It must return the parameters map for the current element.\n\n# d3.event\n\nThe current [event](https://developer.mozilla.org/en-US/docs/DOM/event), if any. This is set during the invocation of an event listener, and is reset after the listener terminates. Use this to access standard event fields such as [*event*.timeStamp](https://www.w3.org/TR/dom/#dom-event-timestamp) and methods such as [*event*.preventDefault](https://www.w3.org/TR/dom/#dom-event-preventdefault). While you can use the native [*event*.pageX](https://developer.mozilla.org/en/DOM/event.pageX) and [*event*.pageY](https://developer.mozilla.org/en/DOM/event.pageY), it is often more convenient to transform the event position to the local coordinate system of the container that received the event using [d3.mouse](#mouse), [d3.touch](#touch) or [d3.touches](#touches).\n\nIf you use Babel, Webpack, or another ES6-to-ES5 bundler, be aware that the value of d3.event changes during an event! An import of d3.event must be a [live binding](http://www.2ality.com/2015/07/es6-module-exports.html), so you may need to configure the bundler to import from D3’s ES6 modules rather than from the generated UMD bundle; not all bundlers observe [jsnext:main](https://github.com/rollup/rollup/wiki/jsnext:main). Also beware of conflicts with the [*window*.event](https://developer.mozilla.org/en-US/docs/Web/API/Window/event) global.\n\n# d3.customEvent(event, listener[, that[, arguments]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js#L98 \"Source\")\n\nInvokes the specified *listener*, using the specified *that* `this` context and passing the specified *arguments*, if any. During the invocation, [d3.event](#event) is set to the specified *event*; after the listener returns (or throws an error), d3.event is restored to its previous value. In addition, sets *event*.sourceEvent to the prior value of d3.event, allowing custom events to retain a reference to the originating native event. Returns the value returned by the *listener*.\n\n# d3.mouse(container) [<>](https://github.com/d3/d3-selection/blob/master/src/mouse.js \"Source\")\n\nReturns the *x* and *y* coordinates of the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n# d3.touch(container[, touches], identifier) [<>](https://github.com/d3/d3-selection/blob/master/src/touch.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touch with the specified *identifier* associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*]. If there is no touch with the specified identifier in *touches*, returns null; this can be useful for ignoring touchmove events where the only some touches have moved. If *touches* is not specified, it defaults to the current event’s [changedTouches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/changedTouches) property.\n\n# d3.touches(container[, touches]) [<>](https://github.com/d3/d3-selection/blob/master/src/touches.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touches associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as an array of two-element arrays of numbers \\[\\[*x1*, *y1*], [*x2*, *y2*], …\\]. If *touches* is not specified, it defaults to the current event’s [touches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/touches) property.\n\n# d3.clientPoint(container, event) [<>](https://github.com/d3/d3-selection/blob/master/src/point.js \"Source\")\n\nReturns the *x* and *y* coordinates of the specified *event* relative to the specified *container*. (The *event* may also be a [touch](https://www.w3.org/TR/touch-events/#touch-interface).) The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n### Control Flow\n\nFor advanced usage, selections provide methods for custom control flow.\n\n# selection.each(function) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/each.js \"Source\")\n\nInvokes the specified *function* 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 (*nodes*[*i*]). 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, such as:\n\n```js\nparent.each(function(p, j) {\n d3.select(this)\n .selectAll(\".child\")\n .text(d => `child ${d.name} of ${p.name}`);\n});\n```\n\nSee [Sized Donut Multiples](http://bl.ocks.org/mbostock/4c5fad723c87d2fd8273) for an example.\n\n# selection.call(function[, arguments…]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/call.js \"Source\")\n\nInvokes the specified *function* exactly once, passing in this selection along with any optional *arguments*. Returns this selection. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several styles in a reusable function:\n\n```js\nfunction name(selection, first, last) {\n selection\n .attr(\"first-name\", first)\n .attr(\"last-name\", last);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").call(name, \"John\", \"Snow\");\n```\n\nThis is roughly equivalent to:\n\n```js\nname(d3.selectAll(\"div\"), \"John\", \"Snow\");\n```\n\nThe only difference is that *selection*.call always returns the *selection* and not the return value of the called *function*, `name`.\n\n# selection.empty() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js \"Source\")\n\nReturns true if this selection contains no (non-null) elements.\n\n# selection.nodes() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js \"Source\")\n\nReturns an array of all (non-null) elements in this selection.\n\n# selection.node() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/node.js \"Source\")\n\nReturns the first (non-null) element in this selection. If the selection is empty, returns null.\n\n# selection.size() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/size.js \"Source\")\n\nReturns the total number of elements in this selection.\n\n### Local Variables\n\nD3 locals allow you to define local state independent of data. For instance, when rendering [small multiples](http://bl.ocks.org/mbostock/e1192fe405703d8321a5187350910e08) of time-series data, you might want the same *x*-scale for all charts but distinct *y*-scales to compare the relative performance of each metric. D3 locals are scoped by DOM elements: on set, the value is stored on the given element; on get, the value is retrieved from given element or the nearest ancestor that defines it.\n\n# d3.local() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js \"Source\")\n\nDeclares a new local variable. For example:\n\n```js\nconst foo = d3.local();\n```\n\nLike `var`, each local is a distinct symbolic reference; unlike `var`, the value of each local is also scoped by the DOM.\n\n# local.set(node, value) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L18 \"Source\")\n\nSets the value of this local on the specified *node* to the *value*, and returns the specified *value*. This is often performed using [*selection*.each](#selection_each):\n\n```js\nselection.each(function(d) { foo.set(this, d.value); });\n```\n\nIf you are just setting a single variable, consider using [*selection*.property](#selection_property):\n\n```js\nselection.property(foo, d => d.value);\n```\n\n# local.get(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L13 \"Source\")\n\nReturns the value of this local on the specified *node*. If the *node* does not define this local, returns the value from the nearest ancestor that defines it. Returns undefined if no ancestor defines this local.\n\n# local.remove(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L21 \"Source\")\n\nDeletes this local’s value from the specified *node*. Returns true if the *node* defined this local prior to removal, and false otherwise. If ancestors also define this local, those definitions are unaffected, and thus [*local*.get](#local_get) will still return the inherited value.\n\n# local.toString() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L24 \"Source\")\n\nReturns the automatically-generated identifier for this local. This is the name of the property that is used to store the local’s value on elements, and thus you can also set or get the local’s value using *element*[*local*] or by using [*selection*.property](#selection_property).\n\n### Namespaces\n\nXML namespaces are fun! Right? Fortunately you can mostly ignore them.\n\n# d3.namespace(name) [<>](https://github.com/d3/d3-selection/blob/master/src/namespace.js \"Source\")\n\nQualifies the specified *name*, which may or may not have a namespace prefix. If the name contains a colon (`:`), the substring before the colon is interpreted as the namespace prefix, which must be registered in [d3.namespaces](#namespaces). Returns an object `space` and `local` attributes describing the full namespace URL and the local name. For example:\n\n```js\nd3.namespace(\"svg:text\"); // {space: \"http://www.w3.org/2000/svg\", local: \"text\"}\n```\n\nIf the name does not contain a colon, this function merely returns the input name.\n\n# d3.namespaces [<>](https://github.com/d3/d3-selection/blob/master/src/namespaces.js \"Source\")\n\nThe map of registered namespace prefixes. The initial value is:\n\n```js\n{\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: \"http://www.w3.org/1999/xhtml\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n}\n```\n\nAdditional prefixes may be assigned as needed to create elements or attributes in other namespaces.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-selection", "error": "[Circular]", "extraneous": false }, "d3-shape": { "_from": "d3-shape@1", "_id": "d3-shape@1.3.7", "_inBundle": false, "_integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "_location": "/d3-shape", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-shape@1", "name": "d3-shape", "escapedName": "d3-shape", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", "_shasum": "df63801be07bc986bc54f63789b4fe502992b5d7", "_spec": "d3-shape@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-shape/issues" }, "dependencies": { "d3-path": { "_from": "d3-path@1", "_id": "d3-path@1.0.9", "_inBundle": false, "_integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", "_location": "/d3-path", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", "_shasum": "48c050bb1fe8c262493a8caf5524e3e9591701cf", "_spec": "d3-path@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Serialize Canvas path commands to SVG.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-path/", "jsdelivr": "dist/d3-path.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-path.js", "module": "src/index.js", "name": "d3-path", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-path.min.js", "version": "1.0.9", "readme": "# d3-path\n\nSay you have some code that draws to a 2D canvas:\n\n```js\nfunction drawCircle(context, radius) {\n context.moveTo(radius, 0);\n context.arc(0, 0, radius, 0, 2 * Math.PI);\n}\n```\n\nThe d3-path module lets you take this exact code and additionally render to [SVG](http://www.w3.org/TR/SVG/paths.html). It works by [serializing](#path_toString) [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls to [SVG path data](http://www.w3.org/TR/SVG/paths.html#PathData). For example:\n\n```js\nvar context = d3.path();\ndrawCircle(context, 40);\npathElement.setAttribute(\"d\", context.toString());\n```\n\nNow code you write once can be used with both Canvas (for performance) and SVG (for convenience). For a practical example, see [d3-shape](https://github.com/d3/d3-shape).\n\n## Installing\n\nIf you use NPM, `npm install d3-path`. Otherwise, download the [latest release](https://github.com/d3/d3-path/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-path.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n## API Reference\n\n# d3.path() · [Source](https://github.com/d3/d3-path/blob/master/src/path.js), [Examples](https://observablehq.com/@d3/d3-path)\n\nConstructs a new path serializer that implements [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods).\n\n# path.moveTo(x, y)\n\nMove to the specified point ⟨*x*, *y*⟩. Equivalent to [*context*.moveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-moveto) and SVG’s [“moveto” command](http://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands).\n\n# path.closePath()\n\nEnds the current subpath and causes an automatic straight line to be drawn from the current point to the initial point of the current subpath. Equivalent to [*context*.closePath](http://www.w3.org/TR/2dcontext/#dom-context-2d-closepath) and SVG’s [“closepath” command](http://www.w3.org/TR/SVG/paths.html#PathDataClosePathCommand).\n\n# path.lineTo(x, y)\n\nDraws a straight line from the current point to the specified point ⟨*x*, *y*⟩. Equivalent to [*context*.lineTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-lineto) and SVG’s [“lineto” command](http://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands).\n\n# path.quadraticCurveTo(cpx, cpy, x, y)\n\nDraws a quadratic Bézier segment from the current point to the specified point ⟨*x*, *y*⟩, with the specified control point ⟨*cpx*, *cpy*⟩. Equivalent to [*context*.quadraticCurveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-quadraticcurveto) and SVG’s [quadratic Bézier curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataQuadraticBezierCommands).\n\n# path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x, y)\n\nDraws a cubic Bézier segment from the current point to the specified point ⟨*x*, *y*⟩, with the specified control points ⟨*cpx1*, *cpy1*⟩ and ⟨*cpx2*, *cpy2*⟩. Equivalent to [*context*.bezierCurveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-beziercurveto) and SVG’s [cubic Bézier curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataCubicBezierCommands).\n\n# path.arcTo(x1, y1, x2, y2, radius)\n\nDraws a circular arc segment with the specified *radius* that starts tangent to the line between the current point and the specified point ⟨*x1*, *y1*⟩ and ends tangent to the line between the specified points ⟨*x1*, *y1*⟩ and ⟨*x2*, *y2*⟩. If the first tangent point is not equal to the current point, a straight line is drawn between the current point and the first tangent point. Equivalent to [*context*.arcTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-arcto) and uses SVG’s [elliptical arc curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands).\n\n# path.arc(x, y, radius, startAngle, endAngle[, anticlockwise])\n\nDraws a circular arc segment with the specified center ⟨*x*, *y*⟩, *radius*, *startAngle* and *endAngle*. If *anticlockwise* is true, the arc is drawn in the anticlockwise direction; otherwise, it is drawn in the clockwise direction. If the current point is not equal to the starting point of the arc, a straight line is drawn from the current point to the start of the arc. Equivalent to [*context*.arc](http://www.w3.org/TR/2dcontext/#dom-context-2d-arc) and uses SVG’s [elliptical arc curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands).\n\n# path.rect(x, y, w, h)\n\nCreates a new subpath containing just the four points ⟨*x*, *y*⟩, ⟨*x* + *w*, *y*⟩, ⟨*x* + *w*, *y* + *h*⟩, ⟨*x*, *y* + *h*⟩, with those four points connected by straight lines, and then marks the subpath as closed. Equivalent to [*context*.rect](http://www.w3.org/TR/2dcontext/#dom-context-2d-rect) and uses SVG’s [“lineto” commands](http://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands).\n\n# path.toString()\n\nReturns the string representation of this *path* according to SVG’s [path data specification](http://www.w3.org/TR/SVG/paths.html#PathData).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-path", "error": "[Circular]", "extraneous": false, "_deduped": "d3-path" } }, "deprecated": false, "description": "Graphical primitives for visualization, such as lines and areas.", "devDependencies": { "d3-polygon": "1", "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-shape/", "jsdelivr": "dist/d3-shape.min.js", "keywords": [ "d3", "d3-module", "graphics", "visualization", "canvas", "svg" ], "license": "BSD-3-Clause", "main": "dist/d3-shape.js", "module": "src/index.js", "name": "d3-shape", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-shape.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "sideEffects": false, "unpkg": "dist/d3-shape.min.js", "version": "1.3.7", "readme": "# d3-shape\n\nVisualizations typically consist of discrete graphical marks, such as [symbols](#symbols), [arcs](#arcs), [lines](#lines) and [areas](#areas). While the rectangles of a bar chart may be easy enough to generate directly using [SVG](http://www.w3.org/TR/SVG/paths.html#PathData) or [Canvas](http://www.w3.org/TR/2dcontext/#canvaspathmethods), other shapes are complex, such as rounded annular sectors and centripetal Catmull–Rom splines. This module provides a variety of shape generators for your convenience.\n\nAs with other aspects of D3, these shapes are driven by data: each shape generator exposes accessors that control how the input data are mapped to a visual representation. For example, you might define a line generator for a time series by [scaling](https://github.com/d3/d3-scale) fields of your data to fit the chart:\n\n```js\nvar line = d3.line()\n .x(function(d) { return x(d.date); })\n .y(function(d) { return y(d.value); });\n```\n\nThis line generator can then be used to compute the `d` attribute of an SVG path element:\n\n```js\npath.datum(data).attr(\"d\", line);\n```\n\nOr you can use it to render to a Canvas 2D context:\n\n```js\nline.context(context)(data);\n```\n\nFor more, read [Introducing d3-shape](https://medium.com/@mbostock/introducing-d3-shape-73f8367e6d12).\n\n## Installing\n\nIf you use NPM, `npm install d3-shape`. Otherwise, download the [latest release](https://github.com/d3/d3-shape/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-shape.v1.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\n\n\n```\n\n\n## API Reference\n\n* [Arcs](#arcs)\n* [Pies](#pies)\n* [Lines](#lines)\n* [Areas](#areas)\n* [Curves](#curves)\n* [Custom Curves](#custom-curves)\n* [Links](#links)\n* [Symbols](#symbols)\n* [Custom Symbol Types](#custom-symbol-types)\n* [Stacks](#stacks)\n\n### Arcs\n\n[\"Pie](http://bl.ocks.org/mbostock/8878e7fd82034f1d63cf)[\"Donut](http://bl.ocks.org/mbostock/2394b23da1994fc202e1)\n\nThe arc generator produces a [circular](https://en.wikipedia.org/wiki/Circular_sector) or [annular](https://en.wikipedia.org/wiki/Annulus_\\(mathematics\\)) sector, as in a pie or donut chart. If the difference between the [start](#arc_startAngle) and [end](#arc_endAngle) angles (the *angular span*) is greater than [τ](https://en.wikipedia.org/wiki/Turn_\\(geometry\\)#Tau_proposal), the arc generator will produce a complete circle or annulus. If it is less than τ, arcs may have [rounded corners](#arc_cornerRadius) and [angular padding](#arc_padAngle). Arcs are always centered at ⟨0,0⟩; use a transform (see: [SVG](http://www.w3.org/TR/SVG/coords.html#TransformAttribute), [Canvas](http://www.w3.org/TR/2dcontext/#transformations)) to move the arc to a different position.\n\nSee also the [pie generator](#pies), which computes the necessary angles to represent an array of data as a pie or donut chart; these angles can then be passed to an arc generator.\n\n# d3.arc() · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nConstructs a new arc generator with the default settings.\n\n# arc(arguments…) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nGenerates an arc for the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the arc generator’s accessor functions along with the `this` object. For example, with the default settings, an object with radii and angles is expected:\n\n```js\nvar arc = d3.arc();\n\narc({\n innerRadius: 0,\n outerRadius: 100,\n startAngle: 0,\n endAngle: Math.PI / 2\n}); // \"M0,-100A100,100,0,0,1,100,0L0,0Z\"\n```\n\nIf the radii and angles are instead defined as constants, you can generate an arc without any arguments:\n\n```js\nvar arc = d3.arc()\n .innerRadius(0)\n .outerRadius(100)\n .startAngle(0)\n .endAngle(Math.PI / 2);\n\narc(); // \"M0,-100A100,100,0,0,1,100,0L0,0Z\"\n```\n\nIf the arc generator has a [context](#arc_context), then the arc is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls and this function returns void. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string is returned.\n\n# arc.centroid(arguments…) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nComputes the midpoint [*x*, *y*] of the center line of the arc that would be [generated](#_arc) by the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the arc generator’s accessor functions along with the `this` object. To be consistent with the generated arc, the accessors must be deterministic, *i.e.*, return the same value given the same arguments. The midpoint is defined as ([startAngle](#arc_startAngle) + [endAngle](#arc_endAngle)) / 2 and ([innerRadius](#arc_innerRadius) + [outerRadius](#arc_outerRadius)) / 2. For example:\n\n[\"Circular](http://bl.ocks.org/mbostock/9b5a2fd1ce1a146f27e4)[\"Annular](http://bl.ocks.org/mbostock/c274877f647361f3df7d)\n\nNote that this is **not the geometric center** of the arc, which may be outside the arc; this method is merely a convenience for positioning labels.\n\n# arc.innerRadius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nIf *radius* is specified, sets the inner radius to the specified function or number and returns this arc generator. If *radius* is not specified, returns the current inner radius accessor, which defaults to:\n\n```js\nfunction innerRadius(d) {\n return d.innerRadius;\n}\n```\n\nSpecifying the inner radius as a function is useful for constructing a stacked polar bar chart, often in conjunction with a [sqrt scale](https://github.com/d3/d3-scale#sqrt). More commonly, a constant inner radius is used for a donut or pie chart. If the outer radius is smaller than the inner radius, the inner and outer radii are swapped. A negative value is treated as zero.\n\n# arc.outerRadius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nIf *radius* is specified, sets the outer radius to the specified function or number and returns this arc generator. If *radius* is not specified, returns the current outer radius accessor, which defaults to:\n\n```js\nfunction outerRadius(d) {\n return d.outerRadius;\n}\n```\n\nSpecifying the outer radius as a function is useful for constructing a coxcomb or polar bar chart, often in conjunction with a [sqrt scale](https://github.com/d3/d3-scale#sqrt). More commonly, a constant outer radius is used for a pie or donut chart. If the outer radius is smaller than the inner radius, the inner and outer radii are swapped. A negative value is treated as zero.\n\n# arc.cornerRadius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nIf *radius* is specified, sets the corner radius to the specified function or number and returns this arc generator. If *radius* is not specified, returns the current corner radius accessor, which defaults to:\n\n```js\nfunction cornerRadius() {\n return 0;\n}\n```\n\nIf the corner radius is greater than zero, the corners of the arc are rounded using circles of the given radius. For a circular sector, the two outer corners are rounded; for an annular sector, all four corners are rounded. The corner circles are shown in this diagram:\n\n[\"Rounded](http://bl.ocks.org/mbostock/e5e3680f3079cf5c3437)[\"Rounded](http://bl.ocks.org/mbostock/f41f50e06a6c04828b6e)\n\nThe corner radius may not be larger than ([outerRadius](#arc_outerRadius) - [innerRadius](#arc_innerRadius)) / 2. In addition, for arcs whose angular span is less than π, the corner radius may be reduced as two adjacent rounded corners intersect. This is occurs more often with the inner corners. See the [arc corners animation](http://bl.ocks.org/mbostock/b7671cb38efdfa5da3af) for illustration.\n\n# arc.startAngle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nIf *angle* is specified, sets the start angle to the specified function or number and returns this arc generator. If *angle* is not specified, returns the current start angle accessor, which defaults to:\n\n```js\nfunction startAngle(d) {\n return d.startAngle;\n}\n```\n\nThe *angle* is specified in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise. If |endAngle - startAngle| ≥ τ, a complete circle or annulus is generated rather than a sector.\n\n# arc.endAngle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nIf *angle* is specified, sets the end angle to the specified function or number and returns this arc generator. If *angle* is not specified, returns the current end angle accessor, which defaults to:\n\n```js\nfunction endAngle(d) {\n return d.endAngle;\n}\n```\n\nThe *angle* is specified in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise. If |endAngle - startAngle| ≥ τ, a complete circle or annulus is generated rather than a sector.\n\n# arc.padAngle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nIf *angle* is specified, sets the pad angle to the specified function or number and returns this arc generator. If *angle* is not specified, returns the current pad angle accessor, which defaults to:\n\n```js\nfunction padAngle() {\n return d && d.padAngle;\n}\n```\n\nThe pad angle is converted to a fixed linear distance separating adjacent arcs, defined as [padRadius](#arc_padRadius) * padAngle. This distance is subtracted equally from the [start](#arc_startAngle) and [end](#arc_endAngle) of the arc. If the arc forms a complete circle or annulus, as when |endAngle - startAngle| ≥ τ, the pad angle is ignored.\n\nIf the [inner radius](#arc_innerRadius) or angular span is small relative to the pad angle, it may not be possible to maintain parallel edges between adjacent arcs. In this case, the inner edge of the arc may collapse to a point, similar to a circular sector. For this reason, padding is typically only applied to annular sectors (*i.e.*, when innerRadius is positive), as shown in this diagram:\n\n[\"Padded](http://bl.ocks.org/mbostock/f37b07b92633781a46f7)[\"Padded](http://bl.ocks.org/mbostock/99f0a6533f7c949cf8b8)\n\nThe recommended minimum inner radius when using padding is outerRadius \\* padAngle / sin(θ), where θ is the angular span of the smallest arc before padding. For example, if the outer radius is 200 pixels and the pad angle is 0.02 radians, a reasonable θ is 0.04 radians, and a reasonable inner radius is 100 pixels. See the [arc padding animation](http://bl.ocks.org/mbostock/053fcc2295a445afab07) for illustration.\n\nOften, the pad angle is not set directly on the arc generator, but is instead computed by the [pie generator](#pies) so as to ensure that the area of padded arcs is proportional to their value; see [*pie*.padAngle](#pie_padAngle). See the [pie padding animation](http://bl.ocks.org/mbostock/3e961b4c97a1b543fff2) for illustration. If you apply a constant pad angle to the arc generator directly, it tends to subtract disproportionately from smaller arcs, introducing distortion.\n\n# arc.padRadius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nIf *radius* is specified, sets the pad radius to the specified function or number and returns this arc generator. If *radius* is not specified, returns the current pad radius accessor, which defaults to null, indicating that the pad radius should be automatically computed as sqrt([innerRadius](#arc_innerRadius) * innerRadius + [outerRadius](#arc_outerRadius) * outerRadius). The pad radius determines the fixed linear distance separating adjacent arcs, defined as padRadius * [padAngle](#arc_padAngle).\n\n# arc.context([context]) · [Source](https://github.com/d3/d3-shape/blob/master/src/arc.js)\n\nIf *context* is specified, sets the context and returns this arc generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated arc](#_arc) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated arc is returned.\n\n### Pies\n\nThe pie generator does not produce a shape directly, but instead computes the necessary angles to represent a tabular dataset as a pie or donut chart; these angles can then be passed to an [arc generator](#arcs).\n\n# d3.pie() · [Source](https://github.com/d3/d3-shape/blob/master/src/pie.js)\n\nConstructs a new pie generator with the default settings.\n\n# pie(data[, arguments…]) · [Source](https://github.com/d3/d3-shape/blob/master/src/pie.js)\n\nGenerates a pie for the given array of *data*, returning an array of objects representing each datum’s arc angles. Any additional *arguments* are arbitrary; they are simply propagated to the pie generator’s accessor functions along with the `this` object. The length of the returned array is the same as *data*, and each element *i* in the returned array corresponds to the element *i* in the input data. Each object in the returned array has the following properties:\n\n* `data` - the input datum; the corresponding element in the input data array.\n* `value` - the numeric [value](#pie_value) of the arc.\n* `index` - the zero-based [sorted index](#pie_sort) of the arc.\n* `startAngle` - the [start angle](#pie_startAngle) of the arc.\n* `endAngle` - the [end angle](#pie_endAngle) of the arc.\n* `padAngle` - the [pad angle](#pie_padAngle) of the arc.\n\nThis representation is designed to work with the arc generator’s default [startAngle](#arc_startAngle), [endAngle](#arc_endAngle) and [padAngle](#arc_padAngle) accessors. The angular units are arbitrary, but if you plan to use the pie generator in conjunction with an [arc generator](#arcs), you should specify angles in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise.\n\nGiven a small dataset of numbers, here is how to compute the arc angles to render this data as a pie chart:\n\n```js\nvar data = [1, 1, 2, 3, 5, 8, 13, 21];\nvar arcs = d3.pie()(data);\n```\n\nThe first pair of parens, `pie()`, [constructs](#pie) a default pie generator. The second, `pie()(data)`, [invokes](#_pie) this generator on the dataset, returning an array of objects:\n\n```json\n[\n {\"data\": 1, \"value\": 1, \"index\": 6, \"startAngle\": 6.050474740247008, \"endAngle\": 6.166830023713296, \"padAngle\": 0},\n {\"data\": 1, \"value\": 1, \"index\": 7, \"startAngle\": 6.166830023713296, \"endAngle\": 6.283185307179584, \"padAngle\": 0},\n {\"data\": 2, \"value\": 2, \"index\": 5, \"startAngle\": 5.817764173314431, \"endAngle\": 6.050474740247008, \"padAngle\": 0},\n {\"data\": 3, \"value\": 3, \"index\": 4, \"startAngle\": 5.468698322915565, \"endAngle\": 5.817764173314431, \"padAngle\": 0},\n {\"data\": 5, \"value\": 5, \"index\": 3, \"startAngle\": 4.886921905584122, \"endAngle\": 5.468698322915565, \"padAngle\": 0},\n {\"data\": 8, \"value\": 8, \"index\": 2, \"startAngle\": 3.956079637853813, \"endAngle\": 4.886921905584122, \"padAngle\": 0},\n {\"data\": 13, \"value\": 13, \"index\": 1, \"startAngle\": 2.443460952792061, \"endAngle\": 3.956079637853813, \"padAngle\": 0},\n {\"data\": 21, \"value\": 21, \"index\": 0, \"startAngle\": 0.000000000000000, \"endAngle\": 2.443460952792061, \"padAngle\": 0}\n]\n```\n\nNote that the returned array is in the same order as the data, even though this pie chart is [sorted](#pie_sortValues) by descending value, starting with the arc for the last datum (value 21) at 12 o’clock.\n\n# pie.value([value]) · [Source](https://github.com/d3/d3-shape/blob/master/src/pie.js)\n\nIf *value* is specified, sets the value accessor to the specified function or number and returns this pie generator. If *value* is not specified, returns the current value accessor, which defaults to:\n\n```js\nfunction value(d) {\n return d;\n}\n```\n\nWhen a pie is [generated](#_pie), the value accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default value accessor assumes that the input data are numbers, or that they are coercible to numbers using [valueOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf). If your data are not simply numbers, then you should specify an accessor that returns the corresponding numeric value for a given datum. For example:\n\n```js\nvar data = [\n {\"number\": 4, \"name\": \"Locke\"},\n {\"number\": 8, \"name\": \"Reyes\"},\n {\"number\": 15, \"name\": \"Ford\"},\n {\"number\": 16, \"name\": \"Jarrah\"},\n {\"number\": 23, \"name\": \"Shephard\"},\n {\"number\": 42, \"name\": \"Kwon\"}\n];\n\nvar arcs = d3.pie()\n .value(function(d) { return d.number; })\n (data);\n```\n\nThis is similar to [mapping](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) your data to values before invoking the pie generator:\n\n```js\nvar arcs = d3.pie()(data.map(function(d) { return d.number; }));\n```\n\nThe benefit of an accessor is that the input data remains associated with the returned objects, thereby making it easier to access other fields of the data, for example to set the color or to add text labels.\n\n# pie.sort([compare]) · [Source](https://github.com/d3/d3-shape/blob/master/src/pie.js)\n\nIf *compare* is specified, sets the data comparator to the specified function and returns this pie generator. If *compare* is not specified, returns the current data comparator, which defaults to null. If both the data comparator and the value comparator are null, then arcs are positioned in the original input order. Otherwise, the data is sorted according to the data comparator, and the resulting order is used. Setting the data comparator implicitly sets the [value comparator](#pie_sortValues) to null.\n\nThe *compare* function takes two arguments *a* and *b*, each elements from the input data array. If the arc for *a* should be before the arc for *b*, then the comparator must return a number less than zero; if the arc for *a* should be after the arc for *b*, then the comparator must return a number greater than zero; returning zero means that the relative order of *a* and *b* is unspecified. For example, to sort arcs by their associated name:\n\n```js\npie.sort(function(a, b) { return a.name.localeCompare(b.name); });\n```\n\nSorting does not affect the order of the [generated arc array](#_pie) which is always in the same order as the input data array; it merely affects the computed angles of each arc. The first arc starts at the [start angle](#pie_startAngle) and the last arc ends at the [end angle](#pie_endAngle).\n\n# pie.sortValues([compare]) · [Source](https://github.com/d3/d3-shape/blob/master/src/pie.js)\n\nIf *compare* is specified, sets the value comparator to the specified function and returns this pie generator. If *compare* is not specified, returns the current value comparator, which defaults to descending value. The default value comparator is implemented as:\n\n```js\nfunction compare(a, b) {\n return b - a;\n}\n```\n\nIf both the data comparator and the value comparator are null, then arcs are positioned in the original input order. Otherwise, the data is sorted according to the data comparator, and the resulting order is used. Setting the value comparator implicitly sets the [data comparator](#pie_sort) to null.\n\nThe value comparator is similar to the [data comparator](#pie_sort), except the two arguments *a* and *b* are values derived from the input data array using the [value accessor](#pie_value), not the data elements. If the arc for *a* should be before the arc for *b*, then the comparator must return a number less than zero; if the arc for *a* should be after the arc for *b*, then the comparator must return a number greater than zero; returning zero means that the relative order of *a* and *b* is unspecified. For example, to sort arcs by ascending value:\n\n```js\npie.sortValues(function(a, b) { return a - b; });\n```\n\nSorting does not affect the order of the [generated arc array](#_pie) which is always in the same order as the input data array; it merely affects the computed angles of each arc. The first arc starts at the [start angle](#pie_startAngle) and the last arc ends at the [end angle](#pie_endAngle).\n\n# pie.startAngle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/pie.js)\n\nIf *angle* is specified, sets the overall start angle of the pie to the specified function or number and returns this pie generator. If *angle* is not specified, returns the current start angle accessor, which defaults to:\n\n```js\nfunction startAngle() {\n return 0;\n}\n```\n\nThe start angle here means the *overall* start angle of the pie, *i.e.*, the start angle of the first arc. The start angle accessor is invoked once, being passed the same arguments and `this` context as the [pie generator](#_pie). The units of *angle* are arbitrary, but if you plan to use the pie generator in conjunction with an [arc generator](#arcs), you should specify an angle in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise.\n\n# pie.endAngle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/pie.js)\n\nIf *angle* is specified, sets the overall end angle of the pie to the specified function or number and returns this pie generator. If *angle* is not specified, returns the current end angle accessor, which defaults to:\n\n```js\nfunction endAngle() {\n return 2 * Math.PI;\n}\n```\n\nThe end angle here means the *overall* end angle of the pie, *i.e.*, the end angle of the last arc. The end angle accessor is invoked once, being passed the same arguments and `this` context as the [pie generator](#_pie). The units of *angle* are arbitrary, but if you plan to use the pie generator in conjunction with an [arc generator](#arcs), you should specify an angle in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise.\n\nThe value of the end angle is constrained to [startAngle](#pie_startAngle) ± τ, such that |endAngle - startAngle| ≤ τ.\n\n# pie.padAngle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/pie.js)\n\nIf *angle* is specified, sets the pad angle to the specified function or number and returns this pie generator. If *angle* is not specified, returns the current pad angle accessor, which defaults to:\n\n```js\nfunction padAngle() {\n return 0;\n}\n```\n\nThe pad angle here means the angular separation between each adjacent arc. The total amount of padding reserved is the specified *angle* times the number of elements in the input data array, and at most |endAngle - startAngle|; the remaining space is then divided proportionally by [value](#pie_value) such that the relative area of each arc is preserved. See the [pie padding animation](http://bl.ocks.org/mbostock/3e961b4c97a1b543fff2) for illustration. The pad angle accessor is invoked once, being passed the same arguments and `this` context as the [pie generator](#_pie). The units of *angle* are arbitrary, but if you plan to use the pie generator in conjunction with an [arc generator](#arcs), you should specify an angle in radians.\n\n### Lines\n\n[\"Line](https://observablehq.com/@d3/line-chart)\n\nThe line generator produces a [spline](https://en.wikipedia.org/wiki/Spline_\\(mathematics\\)) or [polyline](https://en.wikipedia.org/wiki/Polygonal_chain), as in a line chart. Lines also appear in many other visualization types, such as the links in [hierarchical edge bundling](https://observablehq.com/@d3/hierarchical-edge-bundling).\n\n# d3.line() · [Source](https://github.com/d3/d3-shape/blob/master/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)\n\nConstructs a new line generator with the default settings.\n\n# line(data) · [Source](https://github.com/d3/d3-shape/blob/master/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)\n\nGenerates a line for the given array of *data*. Depending on this line generator’s associated [curve](#line_curve), the given input *data* may need to be sorted by *x*-value before being passed to the line generator. If the line generator has a [context](#line_context), then the line is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls and this function returns void. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string is returned.\n\n# line.x([x]) · [Source](https://github.com/d3/d3-shape/blob/master/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)\n\nIf *x* is specified, sets the x accessor to the specified function or number and returns this line generator. If *x* is not specified, returns the current x accessor, which defaults to:\n\n```js\nfunction x(d) {\n return d[0];\n}\n```\n\nWhen a line is [generated](#_line), the x accessor will be invoked for each [defined](#line_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default x accessor assumes that the input data are two-element arrays of numbers. If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor. For example, if `x` is a [time scale](https://github.com/d3/d3-scale#time-scales) and `y` is a [linear scale](https://github.com/d3/d3-scale#linear-scales):\n\n```js\nvar data = [\n {date: new Date(2007, 3, 24), value: 93.24},\n {date: new Date(2007, 3, 25), value: 95.35},\n {date: new Date(2007, 3, 26), value: 98.84},\n {date: new Date(2007, 3, 27), value: 99.92},\n {date: new Date(2007, 3, 30), value: 99.80},\n {date: new Date(2007, 4, 1), value: 99.47},\n …\n];\n\nvar line = d3.line()\n .x(function(d) { return x(d.date); })\n .y(function(d) { return y(d.value); });\n```\n\n# line.y([y]) · [Source](https://github.com/d3/d3-shape/blob/master/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)\n\nIf *y* is specified, sets the y accessor to the specified function or number and returns this line generator. If *y* is not specified, returns the current y accessor, which defaults to:\n\n```js\nfunction y(d) {\n return d[1];\n}\n```\n\nWhen a line is [generated](#_line), the y accessor will be invoked for each [defined](#line_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default y accessor assumes that the input data are two-element arrays of numbers. See [*line*.x](#line_x) for more information.\n\n# line.defined([defined]) · [Source](https://github.com/d3/d3-shape/blob/master/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)\n\nIf *defined* is specified, sets the defined accessor to the specified function or boolean and returns this line generator. If *defined* is not specified, returns the current defined accessor, which defaults to:\n\n```js\nfunction defined() {\n return true;\n}\n```\n\nThe default accessor thus assumes that the input data is always defined. When a line is [generated](#_line), the defined accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. If the given element is defined (*i.e.*, if the defined accessor returns a truthy value for this element), the [x](#line_x) and [y](#line_y) accessors will subsequently be evaluated and the point will be added to the current line segment. Otherwise, the element will be skipped, the current line segment will be ended, and a new line segment will be generated for the next defined point. As a result, the generated line may have several discrete segments. For example:\n\n[\"Line](http://bl.ocks.org/mbostock/0533f44f2cfabecc5e3a)\n\nNote that if a line segment consists of only a single point, it may appear invisible unless rendered with rounded or square [line caps](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap). In addition, some curves such as [curveCardinalOpen](#curveCardinalOpen) only render a visible segment if it contains multiple points.\n\n# line.curve([curve]) · [Source](https://github.com/d3/d3-shape/blob/master/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)\n\nIf *curve* is specified, sets the [curve factory](#curves) and returns this line generator. If *curve* is not specified, returns the current curve factory, which defaults to [curveLinear](#curveLinear).\n\n# line.context([context]) · [Source](https://github.com/d3/d3-shape/blob/master/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)\n\nIf *context* is specified, sets the context and returns this line generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated line](#_line) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated line is returned.\n\n# d3.lineRadial() · [Source](https://github.com/d3/d3-shape/blob/master/src/lineRadial.js), [Examples](https://observablehq.com/@d3/d3-lineradial)\n\n\"Radial\n\nConstructs a new radial line generator with the default settings. A radial line generator is equivalent to the standard Cartesian [line generator](#line), except the [x](#line_x) and [y](#line_y) accessors are replaced with [angle](#lineRadial_angle) and [radius](#lineRadial_radius) accessors. Radial lines are always positioned relative to ⟨0,0⟩; use a transform (see: [SVG](http://www.w3.org/TR/SVG/coords.html#TransformAttribute), [Canvas](http://www.w3.org/TR/2dcontext/#transformations)) to change the origin.\n\n# lineRadial(data) · [Source](https://github.com/d3/d3-shape/blob/master/src/lineRadial.js#L4), [Examples](https://observablehq.com/@d3/d3-lineradial)\n\nEquivalent to [*line*](#_line).\n\n# lineRadial.angle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/lineRadial.js#L7), [Examples](https://observablehq.com/@d3/d3-lineradial)\n\nEquivalent to [*line*.x](#line_x), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock).\n\n# lineRadial.radius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/lineRadial.js#L8), [Examples](https://observablehq.com/@d3/d3-lineradial)\n\nEquivalent to [*line*.y](#line_y), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.\n\n# lineRadial.defined([defined])\n\nEquivalent to [*line*.defined](#line_defined).\n\n# lineRadial.curve([curve]) · [Source](https://github.com/d3/d3-shape/blob/master/src/lineRadial.js), [Examples](https://observablehq.com/@d3/d3-lineradial)\n\nEquivalent to [*line*.curve](#line_curve). Note that [curveMonotoneX](#curveMonotoneX) or [curveMonotoneY](#curveMonotoneY) are not recommended for radial lines because they assume that the data is monotonic in *x* or *y*, which is typically untrue of radial lines.\n\n# lineRadial.context([context])\n\nEquivalent to [*line*.context](#line_context).\n\n### Areas\n\n[\"Area](https://observablehq.com/@d3/area-chart)[\"Stacked](https://observablehq.com/@d3/stacked-area-chart)[\"Difference](https://observablehq.com/@d3/difference-chart)\n\nThe area generator produces an area, as in an area chart. An area is defined by two bounding [lines](#lines), either splines or polylines. Typically, the two lines share the same [*x*-values](#area_x) ([x0](#area_x0) = [x1](#area_x1)), differing only in *y*-value ([y0](#area_y0) and [y1](#area_y1)); most commonly, y0 is defined as a constant representing [zero](http://www.vox.com/2015/11/19/9758062/y-axis-zero-chart). The first line (the topline) is defined by x1 and y1 and is rendered first; the second line (the baseline) is defined by x0 and y0 and is rendered second, with the points in reverse order. With a [curveLinear](#curveLinear) [curve](#area_curve), this produces a clockwise polygon.\n\n# d3.area() · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nConstructs a new area generator with the default settings.\n\n# area(data) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nGenerates an area for the given array of *data*. Depending on this area generator’s associated [curve](#area_curve), the given input *data* may need to be sorted by *x*-value before being passed to the area generator. If the area generator has a [context](#line_context), then the area is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls and this function returns void. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string is returned.\n\n# area.x([x]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *x* is specified, sets [x0](#area_x0) to *x* and [x1](#area_x1) to null and returns this area generator. If *x* is not specified, returns the current x0 accessor.\n\n# area.x0([x]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *x* is specified, sets the x0 accessor to the specified function or number and returns this area generator. If *x* is not specified, returns the current x0 accessor, which defaults to:\n\n```js\nfunction x(d) {\n return d[0];\n}\n```\n\nWhen an area is [generated](#_area), the x0 accessor will be invoked for each [defined](#area_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default x0 accessor assumes that the input data are two-element arrays of numbers. If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor. For example, if `x` is a [time scale](https://github.com/d3/d3-scale#time-scales) and `y` is a [linear scale](https://github.com/d3/d3-scale#linear-scales):\n\n```js\nvar data = [\n {date: new Date(2007, 3, 24), value: 93.24},\n {date: new Date(2007, 3, 25), value: 95.35},\n {date: new Date(2007, 3, 26), value: 98.84},\n {date: new Date(2007, 3, 27), value: 99.92},\n {date: new Date(2007, 3, 30), value: 99.80},\n {date: new Date(2007, 4, 1), value: 99.47},\n …\n];\n\nvar area = d3.area()\n .x(function(d) { return x(d.date); })\n .y1(function(d) { return y(d.value); })\n .y0(y(0));\n```\n\n# area.x1([x]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *x* is specified, sets the x1 accessor to the specified function or number and returns this area generator. If *x* is not specified, returns the current x1 accessor, which defaults to null, indicating that the previously-computed [x0](#area_x0) value should be reused for the x1 value.\n\nWhen an area is [generated](#_area), the x1 accessor will be invoked for each [defined](#area_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. See [*area*.x0](#area_x0) for more information.\n\n# area.y([y]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *y* is specified, sets [y0](#area_y0) to *y* and [y1](#area_y1) to null and returns this area generator. If *y* is not specified, returns the current y0 accessor.\n\n# area.y0([y]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *y* is specified, sets the y0 accessor to the specified function or number and returns this area generator. If *y* is not specified, returns the current y0 accessor, which defaults to:\n\n```js\nfunction y() {\n return 0;\n}\n```\n\nWhen an area is [generated](#_area), the y0 accessor will be invoked for each [defined](#area_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. See [*area*.x0](#area_x0) for more information.\n\n# area.y1([y]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *y* is specified, sets the y1 accessor to the specified function or number and returns this area generator. If *y* is not specified, returns the current y1 accessor, which defaults to:\n\n```js\nfunction y(d) {\n return d[1];\n}\n```\n\nA null accessor is also allowed, indicating that the previously-computed [y0](#area_y0) value should be reused for the y1 value. When an area is [generated](#_area), the y1 accessor will be invoked for each [defined](#area_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. See [*area*.x0](#area_x0) for more information.\n\n# area.defined([defined]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *defined* is specified, sets the defined accessor to the specified function or boolean and returns this area generator. If *defined* is not specified, returns the current defined accessor, which defaults to:\n\n```js\nfunction defined() {\n return true;\n}\n```\n\nThe default accessor thus assumes that the input data is always defined. When an area is [generated](#_area), the defined accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. If the given element is defined (*i.e.*, if the defined accessor returns a truthy value for this element), the [x0](#area_x0), [x1](#area_x1), [y0](#area_y0) and [y1](#area_y1) accessors will subsequently be evaluated and the point will be added to the current area segment. Otherwise, the element will be skipped, the current area segment will be ended, and a new area segment will be generated for the next defined point. As a result, the generated area may have several discrete segments. For example:\n\n[\"Area](http://bl.ocks.org/mbostock/3035090)\n\nNote that if an area segment consists of only a single point, it may appear invisible unless rendered with rounded or square [line caps](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap). In addition, some curves such as [curveCardinalOpen](#curveCardinalOpen) only render a visible segment if it contains multiple points.\n\n# area.curve([curve]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *curve* is specified, sets the [curve factory](#curves) and returns this area generator. If *curve* is not specified, returns the current curve factory, which defaults to [curveLinear](#curveLinear).\n\n# area.context([context]) · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nIf *context* is specified, sets the context and returns this area generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated area](#_area) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated area is returned.\n\n# area.lineX0() · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n
# area.lineY0() · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nReturns a new [line generator](#lines) that has this area generator’s current [defined accessor](#area_defined), [curve](#area_curve) and [context](#area_context). The line’s [*x*-accessor](#line_x) is this area’s [*x0*-accessor](#area_x0), and the line’s [*y*-accessor](#line_y) is this area’s [*y0*-accessor](#area_y0).\n\n# area.lineX1() · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nReturns a new [line generator](#lines) that has this area generator’s current [defined accessor](#area_defined), [curve](#area_curve) and [context](#area_context). The line’s [*x*-accessor](#line_x) is this area’s [*x1*-accessor](#area_x1), and the line’s [*y*-accessor](#line_y) is this area’s [*y0*-accessor](#area_y0).\n\n# area.lineY1() · [Source](https://github.com/d3/d3-shape/blob/master/src/area.js)\n\nReturns a new [line generator](#lines) that has this area generator’s current [defined accessor](#area_defined), [curve](#area_curve) and [context](#area_context). The line’s [*x*-accessor](#line_x) is this area’s [*x0*-accessor](#area_x0), and the line’s [*y*-accessor](#line_y) is this area’s [*y1*-accessor](#area_y1).\n\n# d3.areaRadial() · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\n\"Radial\n\nConstructs a new radial area generator with the default settings. A radial area generator is equivalent to the standard Cartesian [area generator](#area), except the [x](#area_x) and [y](#area_y) accessors are replaced with [angle](#areaRadial_angle) and [radius](#areaRadial_radius) accessors. Radial areas are always positioned relative to ⟨0,0⟩; use a transform (see: [SVG](http://www.w3.org/TR/SVG/coords.html#TransformAttribute), [Canvas](http://www.w3.org/TR/2dcontext/#transformations)) to change the origin.\n\n# areaRadial(data)\n\nEquivalent to [*area*](#_area).\n\n# areaRadial.angle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nEquivalent to [*area*.x](#area_x), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock).\n\n# areaRadial.startAngle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nEquivalent to [*area*.x0](#area_x0), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock). Note: typically [angle](#areaRadial_angle) is used instead of setting separate start and end angles.\n\n# areaRadial.endAngle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nEquivalent to [*area*.x1](#area_x1), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock). Note: typically [angle](#areaRadial_angle) is used instead of setting separate start and end angles.\n\n# areaRadial.radius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nEquivalent to [*area*.y](#area_y), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.\n\n# areaRadial.innerRadius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nEquivalent to [*area*.y0](#area_y0), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.\n\n# areaRadial.outerRadius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nEquivalent to [*area*.y1](#area_y1), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.\n\n# areaRadial.defined([defined])\n\nEquivalent to [*area*.defined](#area_defined).\n\n# areaRadial.curve([curve]) · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nEquivalent to [*area*.curve](#area_curve). Note that [curveMonotoneX](#curveMonotoneX) or [curveMonotoneY](#curveMonotoneY) are not recommended for radial areas because they assume that the data is monotonic in *x* or *y*, which is typically untrue of radial areas.\n\n# areaRadial.context([context])\n\nEquivalent to [*line*.context](#line_context).\n\n# areaRadial.lineStartAngle() · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n
# areaRadial.lineInnerRadius() · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nReturns a new [radial line generator](#lineRadial) that has this radial area generator’s current [defined accessor](#areaRadial_defined), [curve](#areaRadial_curve) and [context](#areaRadial_context). The line’s [angle accessor](#lineRadial_angle) is this area’s [start angle accessor](#areaRadial_startAngle), and the line’s [radius accessor](#lineRadial_radius) is this area’s [inner radius accessor](#areaRadial_innerRadius).\n\n# areaRadial.lineEndAngle() · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nReturns a new [radial line generator](#lineRadial) that has this radial area generator’s current [defined accessor](#areaRadial_defined), [curve](#areaRadial_curve) and [context](#areaRadial_context). The line’s [angle accessor](#lineRadial_angle) is this area’s [end angle accessor](#areaRadial_endAngle), and the line’s [radius accessor](#lineRadial_radius) is this area’s [inner radius accessor](#areaRadial_innerRadius).\n\n# areaRadial.lineOuterRadius() · [Source](https://github.com/d3/d3-shape/blob/master/src/areaRadial.js)\n\nReturns a new [radial line generator](#lineRadial) that has this radial area generator’s current [defined accessor](#areaRadial_defined), [curve](#areaRadial_curve) and [context](#areaRadial_context). The line’s [angle accessor](#lineRadial_angle) is this area’s [start angle accessor](#areaRadial_startAngle), and the line’s [radius accessor](#lineRadial_radius) is this area’s [outer radius accessor](#areaRadial_outerRadius).\n\n### Curves\n\nWhile [lines](#lines) are defined as a sequence of two-dimensional [*x*, *y*] points, and [areas](#areas) are similarly defined by a topline and a baseline, there remains the task of transforming this discrete representation into a continuous shape: *i.e.*, how to interpolate between the points. A variety of curves are provided for this purpose.\n\nCurves are typically not constructed or used directly, instead being passed to [*line*.curve](#line_curve) and [*area*.curve](#area_curve). For example:\n\n```js\nvar line = d3.line()\n .x(function(d) { return x(d.date); })\n .y(function(d) { return y(d.value); })\n .curve(d3.curveCatmullRom.alpha(0.5));\n```\n\n# d3.curveBasis(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/basis.js)\n\n\"basis\"\n\nProduces a cubic [basis spline](https://en.wikipedia.org/wiki/B-spline) using the specified control points. The first and last points are triplicated such that the spline starts at the first point and ends at the last point, and is tangent to the line between the first and second points, and to the line between the penultimate and last points.\n\n# d3.curveBasisClosed(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/basisClosed.js)\n\n\"basisClosed\"\n\nProduces a closed cubic [basis spline](https://en.wikipedia.org/wiki/B-spline) using the specified control points. When a line segment ends, the first three control points are repeated, producing a closed loop with C2 continuity.\n\n# d3.curveBasisOpen(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/basisOpen.js)\n\n\"basisOpen\"\n\nProduces a cubic [basis spline](https://en.wikipedia.org/wiki/B-spline) using the specified control points. Unlike [basis](#basis), the first and last points are not repeated, and thus the curve typically does not intersect these points.\n\n# d3.curveBundle(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/bundle.js)\n\n\"bundle\"\n\nProduces a straightened cubic [basis spline](https://en.wikipedia.org/wiki/B-spline) using the specified control points, with the spline straightened according to the curve’s [*beta*](#curveBundle_beta), which defaults to 0.85. This curve is typically used in [hierarchical edge bundling](https://observablehq.com/@d3/hierarchical-edge-bundling) to disambiguate connections, as proposed by [Danny Holten](https://www.win.tue.nl/vis1/home/dholten/) in [Hierarchical Edge Bundles: Visualization of Adjacency Relations in Hierarchical Data](https://www.win.tue.nl/vis1/home/dholten/papers/bundles_infovis.pdf). This curve does not implement [*curve*.areaStart](#curve_areaStart) and [*curve*.areaEnd](#curve_areaEnd); it is intended to work with [d3.line](#lines), not [d3.area](#areas).\n\n# bundle.beta(beta) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/bundle.js)\n\nReturns a bundle curve with the specified *beta* in the range [0, 1], representing the bundle strength. If *beta* equals zero, a straight line between the first and last point is produced; if *beta* equals one, a standard [basis](#basis) spline is produced. For example:\n\n```js\nvar line = d3.line().curve(d3.curveBundle.beta(0.5));\n```\n\n# d3.curveCardinal(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/cardinal.js)\n\n\"cardinal\"\n\nProduces a cubic [cardinal spline](https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline) using the specified control points, with one-sided differences used for the first and last piece. The default [tension](#curveCardinal_tension) is 0.\n\n# d3.curveCardinalClosed(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/cardinalClosed.js)\n\n\"cardinalClosed\"\n\nProduces a closed cubic [cardinal spline](https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline) using the specified control points. When a line segment ends, the first three control points are repeated, producing a closed loop. The default [tension](#curveCardinal_tension) is 0.\n\n# d3.curveCardinalOpen(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/cardinalOpen.js)\n\n\"cardinalOpen\"\n\nProduces a cubic [cardinal spline](https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline) using the specified control points. Unlike [curveCardinal](#curveCardinal), one-sided differences are not used for the first and last piece, and thus the curve starts at the second point and ends at the penultimate point. The default [tension](#curveCardinal_tension) is 0.\n\n# cardinal.tension(tension) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/cardinalOpen.js)\n\nReturns a cardinal curve with the specified *tension* in the range [0, 1]. The *tension* determines the length of the tangents: a *tension* of one yields all zero tangents, equivalent to [curveLinear](#curveLinear); a *tension* of zero produces a uniform [Catmull–Rom](#curveCatmullRom) spline. For example:\n\n```js\nvar line = d3.line().curve(d3.curveCardinal.tension(0.5));\n```\n\n# d3.curveCatmullRom(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/catmullRom.js)\n\n\"catmullRom\"\n\nProduces a cubic Catmull–Rom spline using the specified control points and the parameter [*alpha*](#curveCatmullRom_alpha), which defaults to 0.5, as proposed by Yuksel et al. in [On the Parameterization of Catmull–Rom Curves](http://www.cemyuksel.com/research/catmullrom_param/), with one-sided differences used for the first and last piece.\n\n# d3.curveCatmullRomClosed(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/catmullRomClosed.js)\n\n\"catmullRomClosed\"\n\nProduces a closed cubic Catmull–Rom spline using the specified control points and the parameter [*alpha*](#curveCatmullRom_alpha), which defaults to 0.5, as proposed by Yuksel et al. When a line segment ends, the first three control points are repeated, producing a closed loop.\n\n# d3.curveCatmullRomOpen(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/catmullRomOpen.js)\n\n\"catmullRomOpen\"\n\nProduces a cubic Catmull–Rom spline using the specified control points and the parameter [*alpha*](#curveCatmullRom_alpha), which defaults to 0.5, as proposed by Yuksel et al. Unlike [curveCatmullRom](#curveCatmullRom), one-sided differences are not used for the first and last piece, and thus the curve starts at the second point and ends at the penultimate point.\n\n# catmullRom.alpha(alpha) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/catmullRom.js)\n\nReturns a cubic Catmull–Rom curve with the specified *alpha* in the range [0, 1]. If *alpha* is zero, produces a uniform spline, equivalent to [curveCardinal](#curveCardinal) with a tension of zero; if *alpha* is one, produces a chordal spline; if *alpha* is 0.5, produces a [centripetal spline](https://en.wikipedia.org/wiki/Centripetal_Catmull–Rom_spline). Centripetal splines are recommended to avoid self-intersections and overshoot. For example:\n\n```js\nvar line = d3.line().curve(d3.curveCatmullRom.alpha(0.5));\n```\n\n# d3.curveLinear(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/linear.js)\n\n\"linear\"\n\nProduces a polyline through the specified points.\n\n# d3.curveLinearClosed(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/linearClosed.js)\n\n\"linearClosed\"\n\nProduces a closed polyline through the specified points by repeating the first point when the line segment ends.\n\n# d3.curveMonotoneX(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/monotone.js)\n\n\"monotoneX\"\n\nProduces a cubic spline that [preserves monotonicity](https://en.wikipedia.org/wiki/Monotone_cubic_interpolation) in *y*, assuming monotonicity in *x*, as proposed by Steffen in [A simple method for monotonic interpolation in one dimension](http://adsabs.harvard.edu/full/1990A%26A...239..443S): “a smooth curve with continuous first-order derivatives that passes through any given set of data points without spurious oscillations. Local extrema can occur only at grid points where they are given by the data, but not in between two adjacent grid points.”\n\n# d3.curveMonotoneY(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/monotone.js)\n\n\"monotoneY\"\n\nProduces a cubic spline that [preserves monotonicity](https://en.wikipedia.org/wiki/Monotone_cubic_interpolation) in *x*, assuming monotonicity in *y*, as proposed by Steffen in [A simple method for monotonic interpolation in one dimension](http://adsabs.harvard.edu/full/1990A%26A...239..443S): “a smooth curve with continuous first-order derivatives that passes through any given set of data points without spurious oscillations. Local extrema can occur only at grid points where they are given by the data, but not in between two adjacent grid points.”\n\n# d3.curveNatural(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/natural.js)\n\n\"natural\"\n\nProduces a [natural](https://en.wikipedia.org/wiki/Spline_interpolation) [cubic spline](http://mathworld.wolfram.com/CubicSpline.html) with the second derivative of the spline set to zero at the endpoints.\n\n# d3.curveStep(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/step.js)\n\n\"step\"\n\nProduces a piecewise constant function (a [step function](https://en.wikipedia.org/wiki/Step_function)) consisting of alternating horizontal and vertical lines. The *y*-value changes at the midpoint of each pair of adjacent *x*-values.\n\n# d3.curveStepAfter(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/step.js)\n\n\"stepAfter\"\n\nProduces a piecewise constant function (a [step function](https://en.wikipedia.org/wiki/Step_function)) consisting of alternating horizontal and vertical lines. The *y*-value changes after the *x*-value.\n\n# d3.curveStepBefore(context) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/step.js)\n\n\"stepBefore\"\n\nProduces a piecewise constant function (a [step function](https://en.wikipedia.org/wiki/Step_function)) consisting of alternating horizontal and vertical lines. The *y*-value changes before the *x*-value.\n\n### Custom Curves\n\nCurves are typically not used directly, instead being passed to [*line*.curve](#line_curve) and [*area*.curve](#area_curve). However, you can define your own curve implementation should none of the built-in curves satisfy your needs using the following interface. You can also use this low-level interface with a built-in curve type as an alternative to the line and area generators.\n\n# curve.areaStart() · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/step.js#L7)\n\nIndicates the start of a new area segment. Each area segment consists of exactly two [line segments](#curve_lineStart): the topline, followed by the baseline, with the baseline points in reverse order.\n\n# curve.areaEnd() · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/step.js)\n\nIndicates the end of the current area segment.\n\n# curve.lineStart() · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/step.js)\n\nIndicates the start of a new line segment. Zero or more [points](#curve_point) will follow.\n\n# curve.lineEnd() · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/step.js)\n\nIndicates the end of the current line segment.\n\n# curve.point(x, y) · [Source](https://github.com/d3/d3-shape/blob/master/src/curve/step.js)\n\nIndicates a new point in the current line segment with the given *x*- and *y*-values.\n\n### Links\n\n[\"Tidy](https://observablehq.com/@d3/tidy-tree)\n\nThe **link** shape generates a smooth cubic Bézier curve from a source point to a target point. The tangents of the curve at the start and end are either [vertical](#linkVertical), [horizontal](#linkHorizontal) or [radial](#linkRadial).\n\n# d3.linkVertical() · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nReturns a new [link generator](#_link) with vertical tangents. For example, to visualize [links](https://github.com/d3/d3-hierarchy/blob/master/README.md#node_links) in a [tree diagram](https://github.com/d3/d3-hierarchy/blob/master/README.md#tree) rooted on the top edge of the display, you might say:\n\n```js\nvar link = d3.linkVertical()\n .x(function(d) { return d.x; })\n .y(function(d) { return d.y; });\n```\n\n# d3.linkHorizontal() · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nReturns a new [link generator](#_link) with horizontal tangents. For example, to visualize [links](https://github.com/d3/d3-hierarchy/blob/master/README.md#node_links) in a [tree diagram](https://github.com/d3/d3-hierarchy/blob/master/README.md#tree) rooted on the left edge of the display, you might say:\n\n```js\nvar link = d3.linkHorizontal()\n .x(function(d) { return d.y; })\n .y(function(d) { return d.x; });\n```\n\n# link(arguments…) · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nGenerates a link for the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the link generator’s accessor functions along with the `this` object. For example, with the default settings, an object expected:\n\n```js\nlink({\n source: [100, 100],\n target: [300, 300]\n});\n```\n\n# link.source([source]) · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nIf *source* is specified, sets the source accessor to the specified function and returns this link generator. If *source* is not specified, returns the current source accessor, which defaults to:\n\n```js\nfunction source(d) {\n return d.source;\n}\n```\n\n# link.target([target]) · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nIf *target* is specified, sets the target accessor to the specified function and returns this link generator. If *target* is not specified, returns the current target accessor, which defaults to:\n\n```js\nfunction target(d) {\n return d.target;\n}\n```\n\n# link.x([x]) · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nIf *x* is specified, sets the *x*-accessor to the specified function or number and returns this link generator. If *x* is not specified, returns the current *x*-accessor, which defaults to:\n\n```js\nfunction x(d) {\n return d[0];\n}\n```\n\n# link.y([y]) · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nIf *y* is specified, sets the *y*-accessor to the specified function or number and returns this link generator. If *y* is not specified, returns the current *y*-accessor, which defaults to:\n\n```js\nfunction y(d) {\n return d[1];\n}\n```\n\n# link.context([context]) · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nIf *context* is specified, sets the context and returns this link generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated link](#_link) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated link is returned. See also [d3-path](https://github.com/d3/d3-path).\n\n# d3.linkRadial() · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nReturns a new [link generator](#_link) with radial tangents. For example, to visualize [links](https://github.com/d3/d3-hierarchy/blob/master/README.md#node_links) in a [tree diagram](https://github.com/d3/d3-hierarchy/blob/master/README.md#tree) rooted in the center of the display, you might say:\n\n```js\nvar link = d3.linkRadial()\n .angle(function(d) { return d.x; })\n .radius(function(d) { return d.y; });\n```\n\n# linkRadial.angle([angle]) · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nEquivalent to [*link*.x](#link_x), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock).\n\n# linkRadial.radius([radius]) · [Source](https://github.com/d3/d3-shape/blob/master/src/link/index.js)\n\nEquivalent to [*link*.y](#link_y), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.\n\n### Symbols\n\n\n\nSymbols provide a categorical shape encoding as is commonly used in scatterplots. Symbols are always centered at ⟨0,0⟩; use a transform (see: [SVG](http://www.w3.org/TR/SVG/coords.html#TransformAttribute), [Canvas](http://www.w3.org/TR/2dcontext/#transformations)) to move the symbol to a different position.\n\n# d3.symbol() · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol.js)\n\nConstructs a new symbol generator with the default settings.\n\n# symbol(arguments…) · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol.js)\n\nGenerates a symbol for the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the symbol generator’s accessor functions along with the `this` object. For example, with the default settings, no arguments are needed to produce a circle with area 64 square pixels. If the symbol generator has a [context](#symbol_context), then the symbol is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls and this function returns void. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string is returned.\n\n# symbol.type([type]) · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol.js)\n\nIf *type* is specified, sets the symbol type to the specified function or symbol type and returns this symbol generator. If *type* is a function, the symbol generator’s arguments and *this* are passed through. (See [*selection*.attr](https://github.com/d3/d3-selection/blob/master/README.md#selection_attr) if you are using d3-selection.) If *type* is not specified, returns the current symbol type accessor, which defaults to:\n\n```js\nfunction type() {\n return circle;\n}\n```\n\nSee [symbols](#symbols) for the set of built-in symbol types. To implement a custom symbol type, pass an object that implements [*symbolType*.draw](#symbolType_draw).\n\n# symbol.size([size]) · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol.js)\n\nIf *size* is specified, sets the size to the specified function or number and returns this symbol generator. If *size* is a function, the symbol generator’s arguments and *this* are passed through. (See [*selection*.attr](https://github.com/d3/d3-selection/blob/master/README.md#selection_attr) if you are using d3-selection.) If *size* is not specified, returns the current size accessor, which defaults to:\n\n```js\nfunction size() {\n return 64;\n}\n```\n\nSpecifying the size as a function is useful for constructing a scatterplot with a size encoding. If you wish to scale the symbol to fit a given bounding box, rather than by area, try [SVG’s getBBox](https://observablehq.com/d/1fac2626b9e1b65f).\n\n# symbol.context([context]) · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol.js)\n\nIf *context* is specified, sets the context and returns this symbol generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated symbol](#_symbol) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated symbol is returned.\n\n# d3.symbols\n\nAn array containing the set of all built-in symbol types: [circle](#symbolCircle), [cross](#symbolCross), [diamond](#symbolDiamond), [square](#symbolSquare), [star](#symbolStar), [triangle](#symbolTriangle), and [wye](#symbolWye). Useful for constructing the range of an [ordinal scale](https://github.com/d3/d3-scale#ordinal-scales) should you wish to use a shape encoding for categorical data.\n\n# d3.symbolCircle · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol/circle.js)\n\nThe circle symbol type.\n\n# d3.symbolCross · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol/cross.js)\n\nThe Greek cross symbol type, with arms of equal length.\n\n# d3.symbolDiamond · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol/diamond.js)\n\nThe rhombus symbol type.\n\n# d3.symbolSquare · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol/square.js)\n\nThe square symbol type.\n\n# d3.symbolStar · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol/star.js)\n\nThe pentagonal star (pentagram) symbol type.\n\n# d3.symbolTriangle · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol/triangle.js)\n\nThe up-pointing triangle symbol type.\n\n# d3.symbolWye · [Source](https://github.com/d3/d3-shape/blob/master/src/symbol/wye.js)\n\nThe Y-shape symbol type.\n\n# d3.pointRadial(angle, radius) · [Source](https://github.com/d3/d3-shape/blob/master/src/pointRadial.js)\n\nReturns the point [x, y] for the given *angle* in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise, and the given *radius*.\n\n### Custom Symbol Types\n\nSymbol types are typically not used directly, instead being passed to [*symbol*.type](#symbol_type). However, you can define your own symbol type implementation should none of the built-in types satisfy your needs using the following interface. You can also use this low-level interface with a built-in symbol type as an alternative to the symbol generator.\n\n# symbolType.draw(context, size)\n\nRenders this symbol type to the specified *context* with the specified *size* in square pixels. The *context* implements the [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods) interface. (Note that this is a subset of the CanvasRenderingContext2D interface!)\n\n### Stacks\n\n[\"Stacked](https://observablehq.com/@d3/stacked-bar-chart)[\"Streamgraph\"](https://observablehq.com/@mbostock/streamgraph-transitions)\n\nSome shape types can be stacked, placing one shape adjacent to another. For example, a bar chart of monthly sales might be broken down into a multi-series bar chart by product category, stacking bars vertically. This is equivalent to subdividing a bar chart by an ordinal dimension (such as product category) and applying a color encoding.\n\nStacked charts can show overall value and per-category value simultaneously; however, it is typically harder to compare across categories, as only the bottom layer of the stack is aligned. So, chose the [stack order](#stack_order) carefully, and consider a [streamgraph](#stackOffsetWiggle). (See also [grouped charts](https://observablehq.com/@d3/grouped-bar-chart).)\n\nLike the [pie generator](#pies), the stack generator does not produce a shape directly. Instead it computes positions which you can then pass to an [area generator](#areas) or use directly, say to position bars.\n\n# d3.stack() · [Source](https://github.com/d3/d3-shape/blob/master/src/stack.js)\n\nConstructs a new stack generator with the default settings.\n\n# stack(data[, arguments…]) · [Source](https://github.com/d3/d3-shape/blob/master/src/stack.js)\n\nGenerates a stack for the given array of *data*, returning an array representing each series. Any additional *arguments* are arbitrary; they are simply propagated to accessors along with the `this` object.\n\nThe series are determined by the [keys accessor](#stack_keys); each series *i* in the returned array corresponds to the *i*th key. Each series is an array of points, where each point *j* corresponds to the *j*th element in the input *data*. Lastly, each point is represented as an array [*y0*, *y1*] where *y0* is the lower value (baseline) and *y1* is the upper value (topline); the difference between *y0* and *y1* corresponds to the computed [value](#stack_value) for this point. The key for each series is available as *series*.key, and the [index](#stack_order) as *series*.index. The input data element for each point is available as *point*.data.\n\nFor example, consider the following table representing monthly sales of fruits:\n\nMonth | Apples | Bananas | Cherries | Dates\n--------|--------|---------|----------|-------\n 1/2015 | 3840 | 1920 | 960 | 400\n 2/2015 | 1600 | 1440 | 960 | 400\n 3/2015 | 640 | 960 | 640 | 400\n 4/2015 | 320 | 480 | 640 | 400\n\nThis might be represented in JavaScript as an array of objects:\n\n```js\nvar data = [\n {month: new Date(2015, 0, 1), apples: 3840, bananas: 1920, cherries: 960, dates: 400},\n {month: new Date(2015, 1, 1), apples: 1600, bananas: 1440, cherries: 960, dates: 400},\n {month: new Date(2015, 2, 1), apples: 640, bananas: 960, cherries: 640, dates: 400},\n {month: new Date(2015, 3, 1), apples: 320, bananas: 480, cherries: 640, dates: 400}\n];\n```\n\nTo produce a stack for this data:\n\n```js\nvar stack = d3.stack()\n .keys([\"apples\", \"bananas\", \"cherries\", \"dates\"])\n .order(d3.stackOrderNone)\n .offset(d3.stackOffsetNone);\n\nvar series = stack(data);\n```\n\nThe resulting array has one element per *series*. Each series has one point per month, and each point has a lower and upper value defining the baseline and topline:\n\n```js\n[\n [[ 0, 3840], [ 0, 1600], [ 0, 640], [ 0, 320]], // apples\n [[3840, 5760], [1600, 3040], [ 640, 1600], [ 320, 800]], // bananas\n [[5760, 6720], [3040, 4000], [1600, 2240], [ 800, 1440]], // cherries\n [[6720, 7120], [4000, 4400], [2240, 2640], [1440, 1840]], // dates\n]\n```\n\nEach series in then typically passed to an [area generator](#areas) to render an area chart, or used to construct rectangles for a bar chart.\n\n# stack.keys([keys]) · [Source](https://github.com/d3/d3-shape/blob/master/src/stack.js)\n\nIf *keys* is specified, sets the keys accessor to the specified function or array and returns this stack generator. If *keys* is not specified, returns the current keys accessor, which defaults to the empty array. A series (layer) is [generated](#_stack) for each key. Keys are typically strings, but they may be arbitrary values. The series’ key is passed to the [value accessor](#stack_value), along with each data point, to compute the point’s value.\n\n# stack.value([value]) · [Source](https://github.com/d3/d3-shape/blob/master/src/stack.js)\n\nIf *value* is specified, sets the value accessor to the specified function or number and returns this stack generator. If *value* is not specified, returns the current value accessor, which defaults to:\n\n```js\nfunction value(d, key) {\n return d[key];\n}\n```\n\nThus, by default the stack generator assumes that the input data is an array of objects, with each object exposing named properties with numeric values; see [*stack*](#_stack) for an example.\n\n# stack.order([order]) · [Source](https://github.com/d3/d3-shape/blob/master/src/stack.js)\n\nIf *order* is specified, sets the order accessor to the specified function or array and returns this stack generator. If *order* is not specified, returns the current order acccesor, which defaults to [stackOrderNone](#stackOrderNone); this uses the order given by the [key accessor](#stack_key). See [stack orders](#stack-orders) for the built-in orders.\n\nIf *order* is a function, it is passed the generated series array and must return an array of numeric indexes representing the stack order. For example, the default order is defined as:\n\n```js\nfunction orderNone(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n```\n\nThe stack order is computed prior to the [offset](#stack_offset); thus, the lower value for all points is zero at the time the order is computed. The index attribute for each series is also not set until after the order is computed.\n\n# stack.offset([offset]) · [Source](https://github.com/d3/d3-shape/blob/master/src/stack.js)\n\nIf *offset* is specified, sets the offset accessor to the specified function or array and returns this stack generator. If *offset* is not specified, returns the current offset acccesor, which defaults to [stackOffsetNone](#stackOffsetNone); this uses a zero baseline. See [stack offsets](#stack-offsets) for the built-in offsets.\n\nIf *offset* is a function, it is passed the generated series array and the order index array. The offset function is then responsible for updating the lower and upper values in the series array to layout the stack. For example, the default offset is defined as:\n\n```js\nfunction offsetNone(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (var j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = s0[j][1];\n }\n }\n}\n```\n\n### Stack Orders\n\nStack orders are typically not used directly, but are instead passed to [*stack*.order](#stack_order).\n\n# d3.stackOrderAppearance(series) · [Source](https://github.com/d3/d3-shape/blob/master/src/order/appearance.js)\n\nReturns a series order such that the earliest series (according to the maximum value) is at the bottom.\n\n# d3.stackOrderAscending(series) · [Source](https://github.com/d3/d3-shape/blob/master/src/order/ascending.js)\n\nReturns a series order such that the smallest series (according to the sum of values) is at the bottom.\n\n# d3.stackOrderDescending(series) · [Source](https://github.com/d3/d3-shape/blob/master/src/order/descending.js)\n\nReturns a series order such that the largest series (according to the sum of values) is at the bottom.\n\n# d3.stackOrderInsideOut(series) · [Source](https://github.com/d3/d3-shape/blob/master/src/order/insideOut.js)\n\nReturns a series order such that the earliest series (according to the maximum value) are on the inside and the later series are on the outside. This order is recommended for streamgraphs in conjunction with the [wiggle offset](#stackOffsetWiggle). See [Stacked Graphs—Geometry & Aesthetics](http://leebyron.com/streamgraph/) by Byron & Wattenberg for more information.\n\n# d3.stackOrderNone(series) · [Source](https://github.com/d3/d3-shape/blob/master/src/order/none.js)\n\nReturns the given series order [0, 1, … *n* - 1] where *n* is the number of elements in *series*. Thus, the stack order is given by the [key accessor](#stack_keys).\n\n# d3.stackOrderReverse(series) · [Source](https://github.com/d3/d3-shape/blob/master/src/order/reverse.js)\n\nReturns the reverse of the given series order [*n* - 1, *n* - 2, … 0] where *n* is the number of elements in *series*. Thus, the stack order is given by the reverse of the [key accessor](#stack_keys).\n\n### Stack Offsets\n\nStack offsets are typically not used directly, but are instead passed to [*stack*.offset](#stack_offset).\n\n# d3.stackOffsetExpand(series, order) · [Source](https://github.com/d3/d3-shape/blob/master/src/offset/expand.js)\n\nApplies a zero baseline and normalizes the values for each point such that the topline is always one.\n\n# d3.stackOffsetDiverging(series, order) · [Source](https://github.com/d3/d3-shape/blob/master/src/offset/diverging.js)\n\nPositive values are stacked above zero, negative values are [stacked below zero](https://bl.ocks.org/mbostock/b5935342c6d21928111928401e2c8608), and zero values are stacked at zero.\n\n# d3.stackOffsetNone(series, order) · [Source](https://github.com/d3/d3-shape/blob/master/src/offset/none.js)\n\nApplies a zero baseline.\n\n# d3.stackOffsetSilhouette(series, order) · [Source](https://github.com/d3/d3-shape/blob/master/src/offset/silhouette.js)\n\nShifts the baseline down such that the center of the streamgraph is always at zero.\n\n# d3.stackOffsetWiggle(series, order) · [Source](https://github.com/d3/d3-shape/blob/master/src/offset/wiggle.js)\n\nShifts the baseline so as to minimize the weighted wiggle of layers. This offset is recommended for streamgraphs in conjunction with the [inside-out order](#stackOrderInsideOut). See [Stacked Graphs—Geometry & Aesthetics](http://leebyron.com/streamgraph/) by Bryon & Wattenberg for more information.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-path": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-shape", "error": "[Circular]", "extraneous": false }, "d3-time": { "_from": "d3-time@1", "_id": "d3-time@1.1.0", "_inBundle": false, "_integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", "_location": "/d3-time", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", "_shasum": "b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1", "_spec": "d3-time@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "A calculator for humanity’s peculiar conventions of time.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-time/", "jsdelivr": "dist/d3-time.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-time.js", "module": "src/index.js", "name": "d3-time", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-time.min.js", "version": "1.1.0", "readme": "# d3-time\n\nWhen visualizing time series data, analyzing temporal patterns, or working with time in general, the irregularities of conventional time units quickly become apparent. In the [Gregorian calendar](https://en.wikipedia.org/wiki/Gregorian_calendar), for example, most months have 31 days but some have 28, 29 or 30; most years have 365 days but [leap years](https://en.wikipedia.org/wiki/Leap_year) have 366; and with [daylight saving](https://en.wikipedia.org/wiki/Daylight_saving_time), most days have 24 hours but some have 23 or 25. Adding to complexity, daylight saving conventions vary around the world.\n\nAs a result of these temporal peculiarities, it can be difficult to perform seemingly-trivial tasks. For example, if you want to compute the number of days that have passed between two dates, you can’t simply subtract and divide by 24 hours (86,400,000 ms):\n\n```js\nvar start = new Date(2015, 02, 01), // Sun Mar 01 2015 00:00:00 GMT-0800 (PST)\n end = new Date(2015, 03, 01); // Wed Apr 01 2015 00:00:00 GMT-0700 (PDT)\n(end - start) / 864e5; // 30.958333333333332, oops!\n```\n\nYou can, however, use [d3.timeDay](#timeDay).[count](#interval_count):\n\n```js\nd3.timeDay.count(start, end); // 31\n```\n\nThe [day](#day) [interval](#api-reference) is one of several provided by d3-time. Each interval represents a conventional unit of time—[hours](#timeHour), [weeks](#timeWeek), [months](#timeMonth), *etc.*—and has methods to calculate boundary dates. For example, [d3.timeDay](#timeDay) computes midnight (typically 12:00 AM local time) of the corresponding day. In addition to [rounding](#interval_round) and [counting](#interval_count), intervals can also be used to generate arrays of boundary dates. For example, to compute each Sunday in the current month:\n\n```js\nvar now = new Date;\nd3.timeWeek.range(d3.timeMonth.floor(now), d3.timeMonth.ceil(now));\n// [Sun Jun 07 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 14 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 21 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 28 2015 00:00:00 GMT-0700 (PDT)]\n```\n\nThe d3-time module does not implement its own calendaring system; it merely implements a convenient API for calendar math on top of ECMAScript [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date). Thus, it ignores leap seconds and can only work with the local time zone and [Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) (UTC).\n\nThis module is used by D3’s time scales to generate sensible ticks, by D3’s time format, and can also be used directly to do things like [calendar layouts](http://bl.ocks.org/mbostock/4063318).\n\n## Installing\n\nIf you use NPM, `npm install d3-time`. Otherwise, download the [latest release](https://github.com/d3/d3-time/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-time.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-time in your browser.](https://tonicdev.com/npm/d3-time)\n\n## API Reference\n\n# interval([date]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L6 \"Source\")\n\nEquivalent to [*interval*.floor](#interval_floor), except it *date* is not specified, it defaults to the current time. For example, [d3.timeYear](#timeYear)(*date*) and d3.timeYear.floor(*date*) are equivalent.\n\n```js\nvar monday = d3.timeMonday(); // The latest preceeding Monday, local time.\n```\n\n# interval.floor(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L10 \"Source\")\n\nReturns a new date representing the latest interval boundary date before or equal to *date*. For example, [d3.timeDay](#timeDay).floor(*date*) typically returns 12:00 AM local time on the given *date*.\n\nThis method is idempotent: if the specified *date* is already floored to the current interval, a new date with an identical time is returned. Furthermore, the returned date is the minimum expressible value of the associated interval, such that *interval*.floor(*interval*.floor(*date*) - 1) returns the preceeding interval boundary date.\n\nNote that the `==` and `===` operators do not compare by value with [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) objects, and thus you cannot use them to tell whether the specified *date* has already been floored. Instead, coerce to a number and then compare:\n\n```js\n// Returns true if the specified date is a day boundary.\nfunction isDay(date) {\n return +d3.timeDay.floor(date) === +date;\n}\n```\n\nThis is more reliable than testing whether the time is 12:00 AM, as in some time zones midnight may not exist due to daylight saving.\n\n# interval.round(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L16 \"Source\")\n\nReturns a new date representing the closest interval boundary date to *date*. For example, [d3.timeDay](#timeDay).round(*date*) typically returns 12:00 AM local time on the given *date* if it is on or before noon, and 12:00 AM of the following day if it is after noon.\n\nThis method is idempotent: if the specified *date* is already rounded to the current interval, a new date with an identical time is returned.\n\n# interval.ceil(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L12 \"Source\")\n\nReturns a new date representing the earliest interval boundary date after or equal to *date*. For example, [d3.timeDay](#timeDay).ceil(*date*) typically returns 12:00 AM local time on the date following the given *date*.\n\nThis method is idempotent: if the specified *date* is already ceilinged to the current interval, a new date with an identical time is returned. Furthermore, the returned date is the maximum expressible value of the associated interval, such that *interval*.ceil(*interval*.ceil(*date*) + 1) returns the following interval boundary date.\n\n# interval.offset(date[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L22 \"Source\")\n\nReturns a new date equal to *date* plus *step* intervals. If *step* is not specified it defaults to 1. If *step* is negative, then the returned date will be before the specified *date*; if *step* is zero, then a copy of the specified *date* is returned; if *step* is not an integer, it is [floored](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor). This method does not round the specified *date* to the interval. For example, if *date* is today at 5:34 PM, then [d3.timeDay](#timeDay).offset(*date*, 1) returns 5:34 PM tomorrow (even if daylight saving changes!).\n\n# interval.range(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L26 \"Source\")\n\nReturns an array of dates representing every interval boundary after or equal to *start* (inclusive) and before *stop* (exclusive). If *step* is specified, then every *step*th boundary will be returned; for example, for the [d3.timeDay](#timeDay) interval a *step* of 2 will return every other day. If *step* is not an integer, it is [floored](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor).\n\nThe first date in the returned array is the earliest boundary after or equal to *start*; subsequent dates are [offset](#interval_offset) by *step* intervals and [floored](#interval_floor). Thus, two overlapping ranges may be consistent. For example, this range contains odd days:\n\n```js\nd3.timeDay.range(new Date(2015, 0, 1), new Date(2015, 0, 7), 2);\n// [Thu Jan 01 2015 00:00:00 GMT-0800 (PST),\n// Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST)]\n```\n\nWhile this contains even days:\n\n```js\nd3.timeDay.range(new Date(2015, 0, 2), new Date(2015, 0, 8), 2);\n// [Fri Jan 02 2015 00:00:00 GMT-0800 (PST),\n// Sun Jan 04 2015 00:00:00 GMT-0800 (PST),\n// Tue Jan 06 2015 00:00:00 GMT-0800 (PST)]\n```\n\nTo make ranges consistent when a *step* is specified, use [*interval*.every](#interval_every) instead.\n\n# interval.filter(test) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L35 \"Source\")\n\nReturns a new interval that is a filtered subset of this interval using the specified *test* function. The *test* function is passed a date and should return true if and only if the specified date should be considered part of the interval. For example, to create an interval that returns the 1st, 11th, 21th and 31th (if it exists) of each month:\n\n```js\nvar i = d3.timeDay.filter(function(d) { return (d.getDate() - 1) % 10 === 0; });\n```\n\nThe returned filtered interval does not support [*interval*.count](#interval_count). See also [*interval*.every](#interval_every).\n\n# interval.every(step) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L50 \"Source\")\n\nReturns a [filtered](#interval_filter) view of this interval representing every *step*th date. The meaning of *step* is dependent on this interval’s parent interval as defined by the field function. For example, [d3.timeMinute](#timeMinute).every(15) returns an interval representing every fifteen minutes, starting on the hour: :00, :15, :30, :45, etc. Note that for some intervals, the resulting dates may not be uniformly-spaced; [d3.timeDay](#timeDay)’s parent interval is [d3.timeMonth](#timeMonth), and thus the interval number resets at the start of each month. If *step* is not valid, returns null. If *step* is one, returns this interval.\n\nThis method can be used in conjunction with [*interval*.range](#interval_range) to ensure that two overlapping ranges are consistent. For example, this range contains odd days:\n\n```js\nd3.timeDay.every(2).range(new Date(2015, 0, 1), new Date(2015, 0, 7));\n// [Thu Jan 01 2015 00:00:00 GMT-0800 (PST),\n// Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST)]\n```\n\nAs does this one:\n\n```js\nd3.timeDay.every(2).range(new Date(2015, 0, 2), new Date(2015, 0, 8));\n// [Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST),\n// Wed Jan 07 2015 00:00:00 GMT-0800 (PST)]\n```\n\nThe returned filtered interval does not support [*interval*.count](#interval_count). See also [*interval*.filter](#interval_filter).\n\n# interval.count(start, end) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L44 \"Source\")\n\nReturns the number of interval boundaries after *start* (exclusive) and before or equal to *end* (inclusive). Note that this behavior is slightly different than [*interval*.range](#interval_range) because its purpose is to return the zero-based number of the specified *end* date relative to the specified *start* date. For example, to compute the current zero-based day-of-year number:\n\n```js\nvar now = new Date;\nd3.timeDay.count(d3.timeYear(now), now); // 177\n```\n\nLikewise, to compute the current zero-based week-of-year number for weeks that start on Sunday:\n\n```js\nd3.timeSunday.count(d3.timeYear(now), now); // 25\n```\n\n# d3.timeInterval(floor, offset[, count[, field]]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L4 \"Source\")\n\nConstructs a new custom interval given the specified *floor* and *offset* functions and an optional *count* function.\n\nThe *floor* function takes a single date as an argument and rounds it down to the nearest interval boundary.\n\nThe *offset* function takes a date and an integer step as arguments and advances the specified date by the specified number of boundaries; the step may be positive, negative or zero.\n\nThe optional *count* function takes a start date and an end date, already floored to the current interval, and returns the number of boundaries between the start (exclusive) and end (inclusive). If a *count* function is not specified, the returned interval does not expose [*interval*.count](#interval_count) or [*interval*.every](#interval_every) methods. Note: due to an internal optimization, the specified *count* function must not invoke *interval*.count on other time intervals.\n\nThe optional *field* function takes a date, already floored to the current interval, and returns the field value of the specified date, corresponding to the number of boundaries between this date (exclusive) and the latest previous parent boundary. For example, for the [d3.timeDay](#timeDay) interval, this returns the number of days since the start of the month. If a *field* function is not specified, it defaults to counting the number of interval boundaries since the UNIX epoch of January 1, 1970 UTC. The *field* function defines the behavior of [*interval*.every](#interval_every).\n\n### Intervals\n\nThe following intervals are provided:\n\n# d3.timeMillisecond [<>](https://github.com/d3/d3-time/blob/master/src/millisecond.js \"Source\")\n
# d3.utcMillisecond\n\nMilliseconds; the shortest available time unit.\n\n# d3.timeSecond [<>](https://github.com/d3/d3-time/blob/master/src/second.js \"Source\")\n
# d3.utcSecond\n\nSeconds (e.g., 01:23:45.0000 AM); 1,000 milliseconds.\n\n# d3.timeMinute [<>](https://github.com/d3/d3-time/blob/master/src/minute.js \"Source\")\n
# d3.utcMinute [<>](https://github.com/d3/d3-time/blob/master/src/utcMinute.js \"Source\")\n\nMinutes (e.g., 01:02:00 AM); 60 seconds. Note that ECMAScript [ignores leap seconds](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.1).\n\n# d3.timeHour [<>](https://github.com/d3/d3-time/blob/master/src/hour.js \"Source\")\n
# d3.utcHour [<>](https://github.com/d3/d3-time/blob/master/src/utcHour.js \"Source\")\n\nHours (e.g., 01:00 AM); 60 minutes. Note that advancing time by one hour in local time can return the same hour or skip an hour due to daylight saving.\n\n# d3.timeDay [<>](https://github.com/d3/d3-time/blob/master/src/day.js \"Source\")\n
# d3.utcDay [<>](https://github.com/d3/d3-time/blob/master/src/utcDay.js \"Source\")\n\nDays (e.g., February 7, 2012 at 12:00 AM); typically 24 hours. Days in local time may range from 23 to 25 hours due to daylight saving.\n\n# d3.timeWeek [<>](https://github.com/d3/d3-time/blob/master/src/week.js \"Source\")\n
# d3.utcWeek [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js \"Source\")\n\nAlias for [d3.timeSunday](#timeSunday); 7 days and typically 168 hours. Weeks in local time may range from 167 to 169 hours due on daylight saving.\n\n# d3.timeSunday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L15 \"Source\")\n
# d3.utcSunday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L15 \"Source\")\n\nSunday-based weeks (e.g., February 5, 2012 at 12:00 AM).\n\n# d3.timeMonday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L16 \"Source\")\n
# d3.utcMonday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L16 \"Source\")\n\nMonday-based weeks (e.g., February 6, 2012 at 12:00 AM).\n\n# d3.timeTuesday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L17 \"Source\")\n
# d3.utcTuesday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L17 \"Source\")\n\nTuesday-based weeks (e.g., February 7, 2012 at 12:00 AM).\n\n# d3.timeWednesday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L18 \"Source\")\n
# d3.utcWednesday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L18 \"Source\")\n\nWednesday-based weeks (e.g., February 8, 2012 at 12:00 AM).\n\n# d3.timeThursday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L19 \"Source\")\n
# d3.utcThursday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L19 \"Source\")\n\nThursday-based weeks (e.g., February 9, 2012 at 12:00 AM).\n\n# d3.timeFriday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L20 \"Source\")\n
# d3.utcFriday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L20 \"Source\")\n\nFriday-based weeks (e.g., February 10, 2012 at 12:00 AM).\n\n# d3.timeSaturday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L21 \"Source\")\n
# d3.utcSaturday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L21 \"Source\")\n\nSaturday-based weeks (e.g., February 11, 2012 at 12:00 AM).\n\n# d3.timeMonth [<>](https://github.com/d3/d3-time/blob/master/src/month.js \"Source\")\n
# d3.utcMonth [<>](https://github.com/d3/d3-time/blob/master/src/utcMonth.js \"Source\")\n\nMonths (e.g., February 1, 2012 at 12:00 AM); ranges from 28 to 31 days.\n\n# d3.timeYear [<>](https://github.com/d3/d3-time/blob/master/src/year.js \"Source\")\n
# d3.utcYear [<>](https://github.com/d3/d3-time/blob/master/src/utcYear.js \"Source\")\n\nYears (e.g., January 1, 2012 at 12:00 AM); ranges from 365 to 366 days.\n\n### Ranges\n\nFor convenience, aliases for [*interval*.range](#interval_range) are also provided as plural forms of the corresponding interval.\n\n# d3.timeMilliseconds(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/millisecond.js#L26 \"Source\")\n
# d3.utcMilliseconds(start, stop[, step])\n\nAliases for [d3.timeMillisecond](#timeMillisecond).[range](#interval_range) and [d3.utcMillisecond](#timeMillisecond).[range](#interval_range).\n\n# d3.timeSeconds(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/second.js#L15 \"Source\")\n
# d3.utcSeconds(start, stop[, step])\n\nAliases for [d3.timeSecond](#timeSecond).[range](#interval_range) and [d3.utcSecond](#timeSecond).[range](#interval_range).\n\n# d3.timeMinutes(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/minute.js#L15 \"Source\")\n
# d3.utcMinutes(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcMinute.js#L15 \"Source\")\n\nAliases for [d3.timeMinute](#timeMinute).[range](#interval_range) and [d3.utcMinute](#timeMinute).[range](#interval_range).\n\n# d3.timeHours(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/hour.js#L17 \"Source\")\n
# d3.utcHours(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcHour.js#L15 \"Source\")\n\nAliases for [d3.timeHour](#timeHour).[range](#interval_range) and [d3.utcHour](#timeHour).[range](#interval_range).\n\n# d3.timeDays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/day.js#L15 \"Source\")\n
# d3.utcDays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcDay.js#L15 \"Source\")\n\nAliases for [d3.timeDay](#timeDay).[range](#interval_range) and [d3.utcDay](#timeDay).[range](#interval_range).\n\n# d3.timeWeeks(start, stop[, step])\n
# d3.utcWeeks(start, stop[, step])\n\nAliases for [d3.timeWeek](#timeWeek).[range](#interval_range) and [d3.utcWeek](#timeWeek).[range](#interval_range).\n\n# d3.timeSundays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L23 \"Source\")\n
# d3.utcSundays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L23 \"Source\")\n\nAliases for [d3.timeSunday](#timeSunday).[range](#interval_range) and [d3.utcSunday](#timeSunday).[range](#interval_range).\n\n# d3.timeMondays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L24 \"Source\")\n
# d3.utcMondays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L24 \"Source\")\n\nAliases for [d3.timeMonday](#timeMonday).[range](#interval_range) and [d3.utcMonday](#timeMonday).[range](#interval_range).\n\n# d3.timeTuesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L25 \"Source\")\n
# d3.utcTuesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L25 \"Source\")\n\nAliases for [d3.timeTuesday](#timeTuesday).[range](#interval_range) and [d3.utcTuesday](#timeTuesday).[range](#interval_range).\n\n# d3.timeWednesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L26 \"Source\")\n
# d3.utcWednesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L26 \"Source\")\n\nAliases for [d3.timeWednesday](#timeWednesday).[range](#interval_range) and [d3.utcWednesday](#timeWednesday).[range](#interval_range).\n\n# d3.timeThursdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L27 \"Source\")\n
# d3.utcThursdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L27 \"Source\")\n\nAliases for [d3.timeThursday](#timeThursday).[range](#interval_range) and [d3.utcThursday](#timeThursday).[range](#interval_range).\n\n# d3.timeFridays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L28 \"Source\")\n
# d3.utcFridays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L28 \"Source\")\n\nAliases for [d3.timeFriday](#timeFriday).[range](#interval_range) and [d3.utcFriday](#timeFriday).[range](#interval_range).\n\n# d3.timeSaturdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L29 \"Source\")\n
# d3.utcSaturdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L29 \"Source\")\n\nAliases for [d3.timeSaturday](#timeSaturday).[range](#interval_range) and [d3.utcSaturday](#timeSaturday).[range](#interval_range).\n\n# d3.timeMonths(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/month.js#L15 \"Source\")\n
# d3.utcMonths(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcMonth.js#L15 \"Source\")\n\nAliases for [d3.timeMonth](#timeMonth).[range](#interval_range) and [d3.utcMonth](#timeMonth).[range](#interval_range).\n\n# d3.timeYears(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/year.js#L26 \"Source\")\n
# d3.utcYears(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcYear.js#L26 \"Source\")\n\nAliases for [d3.timeYear](#timeYear).[range](#interval_range) and [d3.utcYear](#timeYear).[range](#interval_range).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-time", "error": "[Circular]", "extraneous": false }, "d3-time-format": { "_from": "d3-time-format@2", "_id": "d3-time-format@2.3.0", "_inBundle": false, "_integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", "_location": "/d3-time-format", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", "_shasum": "107bdc028667788a8924ba040faf1fbccd5a7850", "_spec": "d3-time-format@2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": { "d3-time": { "_from": "d3-time@1", "_id": "d3-time@1.1.0", "_inBundle": false, "_integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", "_location": "/d3-time", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", "_shasum": "b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1", "_spec": "d3-time@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "A calculator for humanity’s peculiar conventions of time.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-time/", "jsdelivr": "dist/d3-time.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-time.js", "module": "src/index.js", "name": "d3-time", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-time.min.js", "version": "1.1.0", "readme": "# d3-time\n\nWhen visualizing time series data, analyzing temporal patterns, or working with time in general, the irregularities of conventional time units quickly become apparent. In the [Gregorian calendar](https://en.wikipedia.org/wiki/Gregorian_calendar), for example, most months have 31 days but some have 28, 29 or 30; most years have 365 days but [leap years](https://en.wikipedia.org/wiki/Leap_year) have 366; and with [daylight saving](https://en.wikipedia.org/wiki/Daylight_saving_time), most days have 24 hours but some have 23 or 25. Adding to complexity, daylight saving conventions vary around the world.\n\nAs a result of these temporal peculiarities, it can be difficult to perform seemingly-trivial tasks. For example, if you want to compute the number of days that have passed between two dates, you can’t simply subtract and divide by 24 hours (86,400,000 ms):\n\n```js\nvar start = new Date(2015, 02, 01), // Sun Mar 01 2015 00:00:00 GMT-0800 (PST)\n end = new Date(2015, 03, 01); // Wed Apr 01 2015 00:00:00 GMT-0700 (PDT)\n(end - start) / 864e5; // 30.958333333333332, oops!\n```\n\nYou can, however, use [d3.timeDay](#timeDay).[count](#interval_count):\n\n```js\nd3.timeDay.count(start, end); // 31\n```\n\nThe [day](#day) [interval](#api-reference) is one of several provided by d3-time. Each interval represents a conventional unit of time—[hours](#timeHour), [weeks](#timeWeek), [months](#timeMonth), *etc.*—and has methods to calculate boundary dates. For example, [d3.timeDay](#timeDay) computes midnight (typically 12:00 AM local time) of the corresponding day. In addition to [rounding](#interval_round) and [counting](#interval_count), intervals can also be used to generate arrays of boundary dates. For example, to compute each Sunday in the current month:\n\n```js\nvar now = new Date;\nd3.timeWeek.range(d3.timeMonth.floor(now), d3.timeMonth.ceil(now));\n// [Sun Jun 07 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 14 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 21 2015 00:00:00 GMT-0700 (PDT),\n// Sun Jun 28 2015 00:00:00 GMT-0700 (PDT)]\n```\n\nThe d3-time module does not implement its own calendaring system; it merely implements a convenient API for calendar math on top of ECMAScript [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date). Thus, it ignores leap seconds and can only work with the local time zone and [Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) (UTC).\n\nThis module is used by D3’s time scales to generate sensible ticks, by D3’s time format, and can also be used directly to do things like [calendar layouts](http://bl.ocks.org/mbostock/4063318).\n\n## Installing\n\nIf you use NPM, `npm install d3-time`. Otherwise, download the [latest release](https://github.com/d3/d3-time/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-time.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-time in your browser.](https://tonicdev.com/npm/d3-time)\n\n## API Reference\n\n# interval([date]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L6 \"Source\")\n\nEquivalent to [*interval*.floor](#interval_floor), except it *date* is not specified, it defaults to the current time. For example, [d3.timeYear](#timeYear)(*date*) and d3.timeYear.floor(*date*) are equivalent.\n\n```js\nvar monday = d3.timeMonday(); // The latest preceeding Monday, local time.\n```\n\n# interval.floor(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L10 \"Source\")\n\nReturns a new date representing the latest interval boundary date before or equal to *date*. For example, [d3.timeDay](#timeDay).floor(*date*) typically returns 12:00 AM local time on the given *date*.\n\nThis method is idempotent: if the specified *date* is already floored to the current interval, a new date with an identical time is returned. Furthermore, the returned date is the minimum expressible value of the associated interval, such that *interval*.floor(*interval*.floor(*date*) - 1) returns the preceeding interval boundary date.\n\nNote that the `==` and `===` operators do not compare by value with [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) objects, and thus you cannot use them to tell whether the specified *date* has already been floored. Instead, coerce to a number and then compare:\n\n```js\n// Returns true if the specified date is a day boundary.\nfunction isDay(date) {\n return +d3.timeDay.floor(date) === +date;\n}\n```\n\nThis is more reliable than testing whether the time is 12:00 AM, as in some time zones midnight may not exist due to daylight saving.\n\n# interval.round(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L16 \"Source\")\n\nReturns a new date representing the closest interval boundary date to *date*. For example, [d3.timeDay](#timeDay).round(*date*) typically returns 12:00 AM local time on the given *date* if it is on or before noon, and 12:00 AM of the following day if it is after noon.\n\nThis method is idempotent: if the specified *date* is already rounded to the current interval, a new date with an identical time is returned.\n\n# interval.ceil(date) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L12 \"Source\")\n\nReturns a new date representing the earliest interval boundary date after or equal to *date*. For example, [d3.timeDay](#timeDay).ceil(*date*) typically returns 12:00 AM local time on the date following the given *date*.\n\nThis method is idempotent: if the specified *date* is already ceilinged to the current interval, a new date with an identical time is returned. Furthermore, the returned date is the maximum expressible value of the associated interval, such that *interval*.ceil(*interval*.ceil(*date*) + 1) returns the following interval boundary date.\n\n# interval.offset(date[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L22 \"Source\")\n\nReturns a new date equal to *date* plus *step* intervals. If *step* is not specified it defaults to 1. If *step* is negative, then the returned date will be before the specified *date*; if *step* is zero, then a copy of the specified *date* is returned; if *step* is not an integer, it is [floored](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor). This method does not round the specified *date* to the interval. For example, if *date* is today at 5:34 PM, then [d3.timeDay](#timeDay).offset(*date*, 1) returns 5:34 PM tomorrow (even if daylight saving changes!).\n\n# interval.range(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L26 \"Source\")\n\nReturns an array of dates representing every interval boundary after or equal to *start* (inclusive) and before *stop* (exclusive). If *step* is specified, then every *step*th boundary will be returned; for example, for the [d3.timeDay](#timeDay) interval a *step* of 2 will return every other day. If *step* is not an integer, it is [floored](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor).\n\nThe first date in the returned array is the earliest boundary after or equal to *start*; subsequent dates are [offset](#interval_offset) by *step* intervals and [floored](#interval_floor). Thus, two overlapping ranges may be consistent. For example, this range contains odd days:\n\n```js\nd3.timeDay.range(new Date(2015, 0, 1), new Date(2015, 0, 7), 2);\n// [Thu Jan 01 2015 00:00:00 GMT-0800 (PST),\n// Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST)]\n```\n\nWhile this contains even days:\n\n```js\nd3.timeDay.range(new Date(2015, 0, 2), new Date(2015, 0, 8), 2);\n// [Fri Jan 02 2015 00:00:00 GMT-0800 (PST),\n// Sun Jan 04 2015 00:00:00 GMT-0800 (PST),\n// Tue Jan 06 2015 00:00:00 GMT-0800 (PST)]\n```\n\nTo make ranges consistent when a *step* is specified, use [*interval*.every](#interval_every) instead.\n\n# interval.filter(test) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L35 \"Source\")\n\nReturns a new interval that is a filtered subset of this interval using the specified *test* function. The *test* function is passed a date and should return true if and only if the specified date should be considered part of the interval. For example, to create an interval that returns the 1st, 11th, 21th and 31th (if it exists) of each month:\n\n```js\nvar i = d3.timeDay.filter(function(d) { return (d.getDate() - 1) % 10 === 0; });\n```\n\nThe returned filtered interval does not support [*interval*.count](#interval_count). See also [*interval*.every](#interval_every).\n\n# interval.every(step) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L50 \"Source\")\n\nReturns a [filtered](#interval_filter) view of this interval representing every *step*th date. The meaning of *step* is dependent on this interval’s parent interval as defined by the field function. For example, [d3.timeMinute](#timeMinute).every(15) returns an interval representing every fifteen minutes, starting on the hour: :00, :15, :30, :45, etc. Note that for some intervals, the resulting dates may not be uniformly-spaced; [d3.timeDay](#timeDay)’s parent interval is [d3.timeMonth](#timeMonth), and thus the interval number resets at the start of each month. If *step* is not valid, returns null. If *step* is one, returns this interval.\n\nThis method can be used in conjunction with [*interval*.range](#interval_range) to ensure that two overlapping ranges are consistent. For example, this range contains odd days:\n\n```js\nd3.timeDay.every(2).range(new Date(2015, 0, 1), new Date(2015, 0, 7));\n// [Thu Jan 01 2015 00:00:00 GMT-0800 (PST),\n// Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST)]\n```\n\nAs does this one:\n\n```js\nd3.timeDay.every(2).range(new Date(2015, 0, 2), new Date(2015, 0, 8));\n// [Sat Jan 03 2015 00:00:00 GMT-0800 (PST),\n// Mon Jan 05 2015 00:00:00 GMT-0800 (PST),\n// Wed Jan 07 2015 00:00:00 GMT-0800 (PST)]\n```\n\nThe returned filtered interval does not support [*interval*.count](#interval_count). See also [*interval*.filter](#interval_filter).\n\n# interval.count(start, end) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L44 \"Source\")\n\nReturns the number of interval boundaries after *start* (exclusive) and before or equal to *end* (inclusive). Note that this behavior is slightly different than [*interval*.range](#interval_range) because its purpose is to return the zero-based number of the specified *end* date relative to the specified *start* date. For example, to compute the current zero-based day-of-year number:\n\n```js\nvar now = new Date;\nd3.timeDay.count(d3.timeYear(now), now); // 177\n```\n\nLikewise, to compute the current zero-based week-of-year number for weeks that start on Sunday:\n\n```js\nd3.timeSunday.count(d3.timeYear(now), now); // 25\n```\n\n# d3.timeInterval(floor, offset[, count[, field]]) [<>](https://github.com/d3/d3-time/blob/master/src/interval.js#L4 \"Source\")\n\nConstructs a new custom interval given the specified *floor* and *offset* functions and an optional *count* function.\n\nThe *floor* function takes a single date as an argument and rounds it down to the nearest interval boundary.\n\nThe *offset* function takes a date and an integer step as arguments and advances the specified date by the specified number of boundaries; the step may be positive, negative or zero.\n\nThe optional *count* function takes a start date and an end date, already floored to the current interval, and returns the number of boundaries between the start (exclusive) and end (inclusive). If a *count* function is not specified, the returned interval does not expose [*interval*.count](#interval_count) or [*interval*.every](#interval_every) methods. Note: due to an internal optimization, the specified *count* function must not invoke *interval*.count on other time intervals.\n\nThe optional *field* function takes a date, already floored to the current interval, and returns the field value of the specified date, corresponding to the number of boundaries between this date (exclusive) and the latest previous parent boundary. For example, for the [d3.timeDay](#timeDay) interval, this returns the number of days since the start of the month. If a *field* function is not specified, it defaults to counting the number of interval boundaries since the UNIX epoch of January 1, 1970 UTC. The *field* function defines the behavior of [*interval*.every](#interval_every).\n\n### Intervals\n\nThe following intervals are provided:\n\n# d3.timeMillisecond [<>](https://github.com/d3/d3-time/blob/master/src/millisecond.js \"Source\")\n
# d3.utcMillisecond\n\nMilliseconds; the shortest available time unit.\n\n# d3.timeSecond [<>](https://github.com/d3/d3-time/blob/master/src/second.js \"Source\")\n
# d3.utcSecond\n\nSeconds (e.g., 01:23:45.0000 AM); 1,000 milliseconds.\n\n# d3.timeMinute [<>](https://github.com/d3/d3-time/blob/master/src/minute.js \"Source\")\n
# d3.utcMinute [<>](https://github.com/d3/d3-time/blob/master/src/utcMinute.js \"Source\")\n\nMinutes (e.g., 01:02:00 AM); 60 seconds. Note that ECMAScript [ignores leap seconds](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.1).\n\n# d3.timeHour [<>](https://github.com/d3/d3-time/blob/master/src/hour.js \"Source\")\n
# d3.utcHour [<>](https://github.com/d3/d3-time/blob/master/src/utcHour.js \"Source\")\n\nHours (e.g., 01:00 AM); 60 minutes. Note that advancing time by one hour in local time can return the same hour or skip an hour due to daylight saving.\n\n# d3.timeDay [<>](https://github.com/d3/d3-time/blob/master/src/day.js \"Source\")\n
# d3.utcDay [<>](https://github.com/d3/d3-time/blob/master/src/utcDay.js \"Source\")\n\nDays (e.g., February 7, 2012 at 12:00 AM); typically 24 hours. Days in local time may range from 23 to 25 hours due to daylight saving.\n\n# d3.timeWeek [<>](https://github.com/d3/d3-time/blob/master/src/week.js \"Source\")\n
# d3.utcWeek [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js \"Source\")\n\nAlias for [d3.timeSunday](#timeSunday); 7 days and typically 168 hours. Weeks in local time may range from 167 to 169 hours due on daylight saving.\n\n# d3.timeSunday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L15 \"Source\")\n
# d3.utcSunday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L15 \"Source\")\n\nSunday-based weeks (e.g., February 5, 2012 at 12:00 AM).\n\n# d3.timeMonday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L16 \"Source\")\n
# d3.utcMonday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L16 \"Source\")\n\nMonday-based weeks (e.g., February 6, 2012 at 12:00 AM).\n\n# d3.timeTuesday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L17 \"Source\")\n
# d3.utcTuesday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L17 \"Source\")\n\nTuesday-based weeks (e.g., February 7, 2012 at 12:00 AM).\n\n# d3.timeWednesday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L18 \"Source\")\n
# d3.utcWednesday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L18 \"Source\")\n\nWednesday-based weeks (e.g., February 8, 2012 at 12:00 AM).\n\n# d3.timeThursday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L19 \"Source\")\n
# d3.utcThursday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L19 \"Source\")\n\nThursday-based weeks (e.g., February 9, 2012 at 12:00 AM).\n\n# d3.timeFriday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L20 \"Source\")\n
# d3.utcFriday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L20 \"Source\")\n\nFriday-based weeks (e.g., February 10, 2012 at 12:00 AM).\n\n# d3.timeSaturday [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L21 \"Source\")\n
# d3.utcSaturday [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L21 \"Source\")\n\nSaturday-based weeks (e.g., February 11, 2012 at 12:00 AM).\n\n# d3.timeMonth [<>](https://github.com/d3/d3-time/blob/master/src/month.js \"Source\")\n
# d3.utcMonth [<>](https://github.com/d3/d3-time/blob/master/src/utcMonth.js \"Source\")\n\nMonths (e.g., February 1, 2012 at 12:00 AM); ranges from 28 to 31 days.\n\n# d3.timeYear [<>](https://github.com/d3/d3-time/blob/master/src/year.js \"Source\")\n
# d3.utcYear [<>](https://github.com/d3/d3-time/blob/master/src/utcYear.js \"Source\")\n\nYears (e.g., January 1, 2012 at 12:00 AM); ranges from 365 to 366 days.\n\n### Ranges\n\nFor convenience, aliases for [*interval*.range](#interval_range) are also provided as plural forms of the corresponding interval.\n\n# d3.timeMilliseconds(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/millisecond.js#L26 \"Source\")\n
# d3.utcMilliseconds(start, stop[, step])\n\nAliases for [d3.timeMillisecond](#timeMillisecond).[range](#interval_range) and [d3.utcMillisecond](#timeMillisecond).[range](#interval_range).\n\n# d3.timeSeconds(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/second.js#L15 \"Source\")\n
# d3.utcSeconds(start, stop[, step])\n\nAliases for [d3.timeSecond](#timeSecond).[range](#interval_range) and [d3.utcSecond](#timeSecond).[range](#interval_range).\n\n# d3.timeMinutes(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/minute.js#L15 \"Source\")\n
# d3.utcMinutes(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcMinute.js#L15 \"Source\")\n\nAliases for [d3.timeMinute](#timeMinute).[range](#interval_range) and [d3.utcMinute](#timeMinute).[range](#interval_range).\n\n# d3.timeHours(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/hour.js#L17 \"Source\")\n
# d3.utcHours(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcHour.js#L15 \"Source\")\n\nAliases for [d3.timeHour](#timeHour).[range](#interval_range) and [d3.utcHour](#timeHour).[range](#interval_range).\n\n# d3.timeDays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/day.js#L15 \"Source\")\n
# d3.utcDays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcDay.js#L15 \"Source\")\n\nAliases for [d3.timeDay](#timeDay).[range](#interval_range) and [d3.utcDay](#timeDay).[range](#interval_range).\n\n# d3.timeWeeks(start, stop[, step])\n
# d3.utcWeeks(start, stop[, step])\n\nAliases for [d3.timeWeek](#timeWeek).[range](#interval_range) and [d3.utcWeek](#timeWeek).[range](#interval_range).\n\n# d3.timeSundays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L23 \"Source\")\n
# d3.utcSundays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L23 \"Source\")\n\nAliases for [d3.timeSunday](#timeSunday).[range](#interval_range) and [d3.utcSunday](#timeSunday).[range](#interval_range).\n\n# d3.timeMondays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L24 \"Source\")\n
# d3.utcMondays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L24 \"Source\")\n\nAliases for [d3.timeMonday](#timeMonday).[range](#interval_range) and [d3.utcMonday](#timeMonday).[range](#interval_range).\n\n# d3.timeTuesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L25 \"Source\")\n
# d3.utcTuesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L25 \"Source\")\n\nAliases for [d3.timeTuesday](#timeTuesday).[range](#interval_range) and [d3.utcTuesday](#timeTuesday).[range](#interval_range).\n\n# d3.timeWednesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L26 \"Source\")\n
# d3.utcWednesdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L26 \"Source\")\n\nAliases for [d3.timeWednesday](#timeWednesday).[range](#interval_range) and [d3.utcWednesday](#timeWednesday).[range](#interval_range).\n\n# d3.timeThursdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L27 \"Source\")\n
# d3.utcThursdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L27 \"Source\")\n\nAliases for [d3.timeThursday](#timeThursday).[range](#interval_range) and [d3.utcThursday](#timeThursday).[range](#interval_range).\n\n# d3.timeFridays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L28 \"Source\")\n
# d3.utcFridays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L28 \"Source\")\n\nAliases for [d3.timeFriday](#timeFriday).[range](#interval_range) and [d3.utcFriday](#timeFriday).[range](#interval_range).\n\n# d3.timeSaturdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/week.js#L29 \"Source\")\n
# d3.utcSaturdays(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcWeek.js#L29 \"Source\")\n\nAliases for [d3.timeSaturday](#timeSaturday).[range](#interval_range) and [d3.utcSaturday](#timeSaturday).[range](#interval_range).\n\n# d3.timeMonths(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/month.js#L15 \"Source\")\n
# d3.utcMonths(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcMonth.js#L15 \"Source\")\n\nAliases for [d3.timeMonth](#timeMonth).[range](#interval_range) and [d3.utcMonth](#timeMonth).[range](#interval_range).\n\n# d3.timeYears(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/year.js#L26 \"Source\")\n
# d3.utcYears(start, stop[, step]) [<>](https://github.com/d3/d3-time/blob/master/src/utcYear.js#L26 \"Source\")\n\nAliases for [d3.timeYear](#timeYear).[range](#interval_range) and [d3.utcYear](#timeYear).[range](#interval_range).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-time", "error": "[Circular]", "extraneous": false, "_deduped": "d3-time" } }, "deprecated": false, "description": "A JavaScript time formatter and parser inspired by strftime and strptime.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-time-format/", "jsdelivr": "dist/d3-time-format.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-time-format.js", "module": "src/index.js", "name": "d3-time-format", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": "[Circular]", "unpkg": "dist/d3-time-format.min.js", "version": "2.3.0", "readme": "# d3-time-format\n\nThis module provides a JavaScript implementation of the venerable [strptime](http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html) and [strftime](http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html) functions from the C standard library, and can be used to parse or format [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) in a variety of locale-specific representations. To format a date, create a [formatter](#locale_format) from a specifier (a string with the desired format *directives*, indicated by `%`); then pass a date to the formatter, which returns a string. For example, to convert the current date to a human-readable string:\n\n```js\nvar formatTime = d3.timeFormat(\"%B %d, %Y\");\nformatTime(new Date); // \"June 30, 2015\"\n```\n\nLikewise, to convert a string back to a date, create a [parser](#locale_parse):\n\n```js\nvar parseTime = d3.timeParse(\"%B %d, %Y\");\nparseTime(\"June 30, 2015\"); // Tue Jun 30 2015 00:00:00 GMT-0700 (PDT)\n```\n\nYou can implement more elaborate conditional time formats, too. For example, here’s a [multi-scale time format](http://bl.ocks.org/mbostock/4149176) using [time intervals](https://github.com/d3/d3-time):\n\n```js\nvar formatMillisecond = d3.timeFormat(\".%L\"),\n formatSecond = d3.timeFormat(\":%S\"),\n formatMinute = d3.timeFormat(\"%I:%M\"),\n formatHour = d3.timeFormat(\"%I %p\"),\n formatDay = d3.timeFormat(\"%a %d\"),\n formatWeek = d3.timeFormat(\"%b %d\"),\n formatMonth = d3.timeFormat(\"%B\"),\n formatYear = d3.timeFormat(\"%Y\");\n\nfunction multiFormat(date) {\n return (d3.timeSecond(date) < date ? formatMillisecond\n : d3.timeMinute(date) < date ? formatSecond\n : d3.timeHour(date) < date ? formatMinute\n : d3.timeDay(date) < date ? formatHour\n : d3.timeMonth(date) < date ? (d3.timeWeek(date) < date ? formatDay : formatWeek)\n : d3.timeYear(date) < date ? formatMonth\n : formatYear)(date);\n}\n```\n\nThis module is used by D3 [time scales](https://github.com/d3/d3-scale/blob/master/README.md#time-scales) to generate human-readable ticks.\n\n## Installing\n\nIf you use NPM, `npm install d3-time-format`. Otherwise, download the [latest release](https://github.com/d3/d3-time-format/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-time-format.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\n\n\n```\n\nLocale files are published to npm and can be loaded using [d3.json](https://github.com/d3/d3-request/blob/master/README.md#json). For example, to set Russian as the default locale:\n\n```js\nd3.json(\"https://cdn.jsdelivr.net/npm/d3-time-format@2/locale/ru-RU.json\", function(error, locale) {\n if (error) throw error;\n\n d3.timeFormatDefaultLocale(locale);\n\n var format = d3.timeFormat(\"%c\");\n\n console.log(format(new Date)); // понедельник, 5 декабря 2016 г. 10:31:59\n});\n```\n\n## API Reference\n\n# d3.timeFormat(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js#L4 \"Source\")\n\nAn alias for [*locale*.format](#locale_format) on the [default locale](#timeFormatDefaultLocale).\n\n# d3.timeParse(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js#L5 \"Source\")\n\nAn alias for [*locale*.parse](#locale_parse) on the [default locale](#timeFormatDefaultLocale).\n\n# d3.utcFormat(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js#L6 \"Source\")\n\nAn alias for [*locale*.utcFormat](#locale_utcFormat) on the [default locale](#timeFormatDefaultLocale).\n\n# d3.utcParse(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js#L7 \"Source\")\n\nAn alias for [*locale*.utcParse](#locale_utcParse) on the [default locale](#timeFormatDefaultLocale).\n\n# d3.isoFormat [<>](https://github.com/d3/d3-time-format/blob/master/src/isoFormat.js \"Source\")\n\nThe full [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC time formatter. Where available, this method will use [Date.toISOString](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toISOString) to format.\n\n# d3.isoParse [<>](https://github.com/d3/d3-time-format/blob/master/src/isoParse.js \"Source\")\n\nThe full [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC time parser. Where available, this method will use the [Date constructor](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date) to parse strings. If you depend on strict validation of the input format according to ISO 8601, you should construct a [UTC parser function](#utcParse):\n\n```js\nvar strictIsoParse = d3.utcParse(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n```\n\n# locale.format(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js#L293 \"Source\")\n\nReturns a new formatter for the given string *specifier*. The specifier string may contain the following directives:\n\n* `%a` - abbreviated weekday name.*\n* `%A` - full weekday name.*\n* `%b` - abbreviated month name.*\n* `%B` - full month name.*\n* `%c` - the locale’s date and time, such as `%x, %X`.*\n* `%d` - zero-padded day of the month as a decimal number [01,31].\n* `%e` - space-padded day of the month as a decimal number [ 1,31]; equivalent to `%_d`.\n* `%f` - microseconds as a decimal number [000000, 999999].\n* `%g` - ISO 8601 week-based year without century as a decimal number [00,99].\n* `%G` - ISO 8601 week-based year with century as a decimal number.\n* `%H` - hour (24-hour clock) as a decimal number [00,23].\n* `%I` - hour (12-hour clock) as a decimal number [01,12].\n* `%j` - day of the year as a decimal number [001,366].\n* `%m` - month as a decimal number [01,12].\n* `%M` - minute as a decimal number [00,59].\n* `%L` - milliseconds as a decimal number [000, 999].\n* `%p` - either AM or PM.*\n* `%q` - quarter of the year as a decimal number [1,4].\n* `%Q` - milliseconds since UNIX epoch.\n* `%s` - seconds since UNIX epoch.\n* `%S` - second as a decimal number [00,61].\n* `%u` - Monday-based (ISO 8601) weekday as a decimal number [1,7].\n* `%U` - Sunday-based week of the year as a decimal number [00,53].\n* `%V` - ISO 8601 week of the year as a decimal number [01, 53].\n* `%w` - Sunday-based weekday as a decimal number [0,6].\n* `%W` - Monday-based week of the year as a decimal number [00,53].\n* `%x` - the locale’s date, such as `%-m/%-d/%Y`.*\n* `%X` - the locale’s time, such as `%-I:%M:%S %p`.*\n* `%y` - year without century as a decimal number [00,99].\n* `%Y` - year with century as a decimal number, such as `1999`.\n* `%Z` - time zone offset, such as `-0700`, `-07:00`, `-07`, or `Z`.\n* `%%` - a literal percent sign (`%`).\n\nDirectives marked with an asterisk (\\*) may be affected by the [locale definition](#locales).\n\nFor `%U`, all days in a new year preceding the first Sunday are considered to be in week 0. For `%W`, all days in a new year preceding the first Monday are considered to be in week 0. Week numbers are computed using [*interval*.count](https://github.com/d3/d3-time/blob/master/README.md#interval_count). For example, 2015-52 and 2016-00 represent Monday, December 28, 2015, while 2015-53 and 2016-01 represent Monday, January 4, 2016. This differs from the [ISO week date](https://en.wikipedia.org/wiki/ISO_week_date) specification (`%V`), which uses a more complicated definition!\n\nFor `%V`,`%g` and `%G`, per the [strftime man page](http://man7.org/linux/man-pages/man3/strftime.3.html):\n\n> In this system, weeks start on a Monday, and are numbered from 01, for the first week, up to 52 or 53, for the last week. Week 1 is the first week where four or more days fall within the new year (or, synonymously, week 01 is: the first week of the year that contains a Thursday; or, the week that has 4 January in it). If the ISO week number belongs to the previous or next year, that year is used instead.\n\nThe `%` sign indicating a directive may be immediately followed by a padding modifier:\n\n* `0` - zero-padding\n* `_` - space-padding\n* `-` - disable padding\n\nIf no padding modifier is specified, the default is `0` for all directives except `%e`, which defaults to `_`. (In some implementations of strftime and strptime, a directive may include an optional field width or precision; this feature is not yet implemented.)\n\nThe returned function formats a specified *[date](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)*, returning the corresponding string.\n\n```js\nvar formatMonth = d3.timeFormat(\"%B\"),\n formatDay = d3.timeFormat(\"%A\"),\n date = new Date(2014, 4, 1); // Thu May 01 2014 00:00:00 GMT-0700 (PDT)\n\nformatMonth(date); // \"May\"\nformatDay(date); // \"Thursday\"\n```\n\n# locale.parse(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js#L298 \"Source\")\n\nReturns a new parser for the given string *specifier*. The specifier string may contain the same directives as [*locale*.format](#locale_format). The `%d` and `%e` directives are considered equivalent for parsing.\n\nThe returned function parses a specified *string*, returning the corresponding [date](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date) or null if the string could not be parsed according to this format’s specifier. Parsing is strict: if the specified string does not exactly match the associated specifier, this method returns null. For example, if the associated specifier is `%Y-%m-%dT%H:%M:%SZ`, then the string `\"2011-07-01T19:15:28Z\"` will be parsed as expected, but `\"2011-07-01T19:15:28\"`, `\"2011-07-01 19:15:28\"` and `\"2011-07-01\"` will return null. (Note that the literal `Z` here is different from the time zone offset directive `%Z`.) If a more flexible parser is desired, try multiple formats sequentially until one returns non-null.\n\n# locale.utcFormat(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js#L303 \"Source\")\n\nEquivalent to [*locale*.format](#locale_format), except all directives are interpreted as [Coordinated Universal Time (UTC)](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) rather than local time.\n\n# locale.utcParse(specifier) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js#L308 \"Source\")\n\nEquivalent to [*locale*.parse](#locale_parse), except all directives are interpreted as [Coordinated Universal Time (UTC)](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) rather than local time.\n\n### Locales\n\n# d3.timeFormatLocale(definition) [<>](https://github.com/d3/d3-time-format/blob/master/src/locale.js \"Source\")\n\nReturns a *locale* object for the specified *definition* with [*locale*.format](#locale_format), [*locale*.parse](#locale_parse), [*locale*.utcFormat](#locale_utcFormat), [*locale*.utcParse](#locale_utcParse) methods. The *definition* must include the following properties:\n\n* `dateTime` - the date and time (`%c`) format specifier (e.g., `\"%a %b %e %X %Y\"`).\n* `date` - the date (`%x`) format specifier (e.g., `\"%m/%d/%Y\"`).\n* `time` - the time (`%X`) format specifier (e.g., `\"%H:%M:%S\"`).\n* `periods` - the A.M. and P.M. equivalents (e.g., `[\"AM\", \"PM\"]`).\n* `days` - the full names of the weekdays, starting with Sunday.\n* `shortDays` - the abbreviated names of the weekdays, starting with Sunday.\n* `months` - the full names of the months (starting with January).\n* `shortMonths` - the abbreviated names of the months (starting with January).\n\nFor an example, see [Localized Time Axis II](https://bl.ocks.org/mbostock/805115ebaa574e771db1875a6d828949).\n\n# d3.timeFormatDefaultLocale(definition) [<>](https://github.com/d3/d3-time-format/blob/master/src/defaultLocale.js \"Source\")\n\nEquivalent to [d3.timeFormatLocale](#timeFormatLocale), except it also redefines [d3.timeFormat](#timeFormat), [d3.timeParse](#timeParse), [d3.utcFormat](#utcFormat) and [d3.utcParse](#utcParse) to the new locale’s [*locale*.format](#locale_format), [*locale*.parse](#locale_parse), [*locale*.utcFormat](#locale_utcFormat) and [*locale*.utcParse](#locale_utcParse). If you do not set a default locale, it defaults to [U.S. English](https://github.com/d3/d3-time-format/blob/master/locale/en-US.json).\n\nFor an example, see [Localized Time Axis](https://bl.ocks.org/mbostock/6f1cc065d4d172bcaf322e399aa8d62f).\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-time-format", "error": "[Circular]", "extraneous": false }, "d3-timer": { "_from": "d3-timer@1", "_id": "d3-timer@1.0.10", "_inBundle": false, "_integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", "_location": "/d3-timer", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", "_shasum": "dfe76b8a91748831b13b6d9c793ffbd508dd9de5", "_spec": "d3-timer@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "An efficient queue capable of managing thousands of concurrent animations.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-timer/", "jsdelivr": "dist/d3-timer.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-timer.js", "module": "src/index.js", "name": "d3-timer", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-timer.min.js", "version": "1.0.10", "readme": "# d3-timer\n\nThis module provides an efficient queue capable of managing thousands of concurrent animations, while guaranteeing consistent, synchronized timing with concurrent or staged animations. Internally, it uses [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) for fluid animation (if available), switching to [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) for delays longer than 24ms.\n\n## Installing\n\nIf you use NPM, `npm install d3-timer`. Otherwise, download the [latest release](https://github.com/d3/d3-timer/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-timer.v1.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\n\n```\n\n## API Reference\n\n# d3.now() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L15 \"Source\")\n\nReturns the current time as defined by [performance.now](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) if available, and [Date.now](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now) if not. The current time is updated at the start of a frame; it is thus consistent during the frame, and any timers scheduled during the same frame will be synchronized. If this method is called outside of a frame, such as in response to a user event, the current time is calculated and then fixed until the next frame, again ensuring consistent timing during event handling.\n\n# d3.timer(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L52 \"Source\")\n\nSchedules a new timer, invoking the specified *callback* repeatedly until the timer is [stopped](#timer_stop). An optional numeric *delay* in milliseconds may be specified to invoke the given *callback* after a delay; if *delay* is not specified, it defaults to zero. The delay is relative to the specified *time* in milliseconds; if *time* is not specified, it defaults to [now](#now).\n\nThe *callback* is passed the (apparent) *elapsed* time since the timer became active. For example:\n\n```js\nvar t = d3.timer(function(elapsed) {\n console.log(elapsed);\n if (elapsed > 200) t.stop();\n}, 150);\n```\n\nThis produces roughly the following console output:\n\n```\n3\n25\n48\n65\n85\n106\n125\n146\n167\n189\n209\n```\n\n(The exact values may vary depending on your JavaScript runtime and what else your computer is doing.) Note that the first *elapsed* time is 3ms: this is the elapsed time since the timer started, not since the timer was scheduled. Here the timer started 150ms after it was scheduled due to the specified delay. The apparent *elapsed* time may be less than the true *elapsed* time if the page is backgrounded and [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) is paused; in the background, apparent time is frozen.\n\nIf [timer](#timer) is called within the callback of another timer, the new timer callback (if eligible as determined by the specified *delay* and *time*) will be invoked immediately at the end of the current frame, rather than waiting until the next frame. Within a frame, timer callbacks are guaranteed to be invoked in the order they were scheduled, regardless of their start time.\n\n# timer.restart(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L31 \"Source\")\n\nRestart a timer with the specified *callback* and optional *delay* and *time*. This is equivalent to stopping this timer and creating a new timer with the specified arguments, although this timer retains the original invocation priority.\n\n# timer.stop() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L43 \"Source\")\n\nStops this timer, preventing subsequent callbacks. This method has no effect if the timer has already stopped.\n\n# d3.timerFlush() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L58 \"Source\")\n\nImmediately invoke any eligible timer callbacks. Note that zero-delay timers are normally first executed after one frame (~17ms). This can cause a brief flicker because the browser renders the page twice: once at the end of the first event loop, then again immediately on the first timer callback. By flushing the timer queue at the end of the first event loop, you can run any zero-delay timers immediately and avoid the flicker.\n\n# d3.timeout(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timeout.js \"Source\")\n\nLike [timer](#timer), except the timer automatically [stops](#timer_stop) on its first callback. A suitable replacement for [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) that is guaranteed to not run in the background. The *callback* is passed the elapsed time.\n\n# d3.interval(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/interval.js \"Source\")\n\nLike [timer](#timer), except the *callback* is invoked only every *delay* milliseconds; if *delay* is not specified, this is equivalent to [timer](#timer). A suitable replacement for [setInterval](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval) that is guaranteed to not run in the background. The *callback* is passed the elapsed time.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-timer", "error": "[Circular]", "extraneous": false }, "d3-transition": { "_from": "d3-transition@1", "_id": "d3-transition@1.3.2", "_inBundle": false, "_integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", "_location": "/d3-transition", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", "_shasum": "a98ef2151be8d8600543434c1ca80140ae23b398", "_spec": "d3-transition@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": { "d3-color": { "_from": "d3-color@1", "_id": "d3-color@1.4.1", "_inBundle": false, "_integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", "_location": "/d3-color", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", "_shasum": "c52002bf8846ada4424d55d97982fef26eb3bc8a", "_spec": "d3-color@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Color spaces! RGB, HSL, Cubehelix, Lab and HCL (Lch).", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-color/", "jsdelivr": "dist/d3-color.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-color.js", "module": "src/index.js", "name": "d3-color", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-color.min.js", "version": "1.4.1", "readme": "# d3-color\n\nEven though your browser understands a lot about colors, it doesn’t offer much help in manipulating colors through JavaScript. The d3-color module therefore provides representations for various color spaces, allowing specification, conversion and manipulation. (Also see [d3-interpolate](https://github.com/d3/d3-interpolate) for color interpolation.)\n\nFor example, take the color named “steelblue”:\n\n```js\nvar c = d3.color(\"steelblue\"); // {r: 70, g: 130, b: 180, opacity: 1}\n```\n\nLet’s try converting it to HSL:\n\n```js\nvar c = d3.hsl(\"steelblue\"); // {h: 207.27…, s: 0.44, l: 0.4902…, opacity: 1}\n```\n\nNow rotate the hue by 90°, bump up the saturation, and format as a string for CSS:\n\n```js\nc.h += 90;\nc.s += 0.2;\nc + \"\"; // rgb(198, 45, 205)\n```\n\nTo fade the color slightly:\n\n```js\nc.opacity = 0.8;\nc + \"\"; // rgba(198, 45, 205, 0.8)\n```\n\nIn addition to the ubiquitous and machine-friendly [RGB](#rgb) and [HSL](#hsl) color space, d3-color supports color spaces that are designed for humans:\n\n* [CIELAB](#lab) (*a.k.a.* “Lab”)\n* [CIELChab](#lch) (*a.k.a.* “LCh” or “HCL”)\n* Dave Green’s [Cubehelix](#cubehelix)\n\nCubehelix features monotonic lightness, while CIELAB and its polar form CIELChab are perceptually uniform.\n\nFor additional color spaces, see:\n\n* [d3-cam16](https://github.com/d3/d3-cam16)\n* [d3-cam02](https://github.com/connorgr/d3-cam02)\n* [d3-hsv](https://github.com/d3/d3-hsv)\n* [d3-hcg](https://github.com/d3/d3-hcg)\n* [d3-hsluv](https://github.com/petulla/d3-hsluv)\n\n## Installing\n\nIf you use NPM, `npm install d3-color`. Otherwise, download the [latest release](https://github.com/d3/d3-color/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-color.v1.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\n\n```\n\n[Try d3-color in your browser.](https://observablehq.com/collection/@d3/d3-color)\n\n## API Reference\n\n# d3.color(specifier) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nParses the specified [CSS Color Module Level 3](http://www.w3.org/TR/css3-color/#colorunits) *specifier* string, returning an [RGB](#rgb) or [HSL](#hsl) color, along with [CSS Color Module Level 4 hex](https://www.w3.org/TR/css-color-4/#hex-notation) *specifier* strings. If the specifier was not valid, null is returned. Some examples:\n\n* `rgb(255, 255, 255)`\n* `rgb(10%, 20%, 30%)`\n* `rgba(255, 255, 255, 0.4)`\n* `rgba(10%, 20%, 30%, 0.4)`\n* `hsl(120, 50%, 20%)`\n* `hsla(120, 50%, 20%, 0.4)`\n* `#ffeeaa`\n* `#fea`\n* `#ffeeaa22`\n* `#fea2`\n* `steelblue`\n\nThe list of supported [named colors](http://www.w3.org/TR/SVG/types.html#ColorKeywords) is specified by CSS.\n\nNote: this function may also be used with `instanceof` to test if an object is a color instance. The same is true of color subclasses, allowing you to test whether a color is in a particular color space.\n\n# *color*.opacity\n\nThis color’s opacity, typically in the range [0, 1].\n\n# *color*.rgb() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns the [RGB equivalent](#rgb) of this color. For RGB colors, that’s `this`.\n\n# color.copy([values]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a copy of this color. If *values* is specified, any enumerable own properties of *values* are assigned to the new returned color. For example, to derive a copy of a *color* with opacity 0.5, say\n\n```js\ncolor.copy({opacity: 0.5})\n```\n\n# *color*.brighter([k]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a brighter copy of this color. If *k* is specified, it controls how much brighter the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.\n\n# *color*.darker([k]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a darker copy of this color. If *k* is specified, it controls how much darker the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.\n\n# *color*.displayable() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns true if and only if the color is displayable on standard hardware. For example, this returns false for an RGB color if any channel value is less than zero or greater than 255 when rounded, or if the opacity is not in the range [0, 1].\n\n# *color*.formatHex() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a hexadecimal string representing this color in RGB space, such as `#f7eaba`. If this color is not displayable, a suitable displayable color is returned instead. For example, RGB channel values greater than 255 are clamped to 255.\n\n# *color*.formatHsl() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a string representing this color according to the [CSS Color Module Level 3 specification](https://www.w3.org/TR/css-color-3/#hsl-color), such as `hsl(257, 50%, 80%)` or `hsla(257, 50%, 80%, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping S and L channel values to the interval [0, 100].\n\n# *color*.formatRgb() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nReturns a string representing this color according to the [CSS Object Model specification](https://drafts.csswg.org/cssom/#serialize-a-css-component-value), such as `rgb(247, 234, 186)` or `rgba(247, 234, 186, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping RGB channel values to the interval [0, 255].\n\n# *color*.toString() [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")\n\nAn alias for [*color*.formatRgb](#color_formatRgb).\n\n# d3.rgb(r, g, b[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")
\n# d3.rgb(specifier)
\n# d3.rgb(color)
\n\nConstructs a new [RGB](https://en.wikipedia.org/wiki/RGB_color_model) color. The channel values are exposed as `r`, `g` and `b` properties on the returned instance. Use the [RGB color picker](http://bl.ocks.org/mbostock/78d64ca7ef013b4dcf8f) to explore this color space.\n\nIf *r*, *g* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the RGB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb). Note that unlike [*color*.rgb](#color_rgb) this method *always* returns a new instance, even if *color* is already an RGB color.\n\n# d3.hsl(h, s, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js \"Source\")
\n# d3.hsl(specifier)
\n# d3.hsl(color)
\n\nConstructs a new [HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [HSL color picker](http://bl.ocks.org/mbostock/debaad4fcce9bcee14cf) to explore this color space.\n\nIf *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the HSL color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to HSL. (Colors already in the HSL color space skip the conversion to RGB.)\n\n# d3.lab(l, a, b[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.lab(specifier)
\n# d3.lab(color)
\n\nConstructs a new [CIELAB](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) color. The channel values are exposed as `l`, `a` and `b` properties on the returned instance. Use the [CIELAB color picker](http://bl.ocks.org/mbostock/9f37cc207c0cb166921b) to explore this color space. The value of *l* is typically in the range [0, 100], while *a* and *b* are typically in [-160, +160].\n\nIf *l*, *a* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the CIELAB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELAB. (Colors already in the CIELAB color space skip the conversion to RGB, and colors in the HCL color space are converted directly to CIELAB.)\n\n# d3.gray(l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n\nConstructs a new [CIELAB](#lab) color with the specified *l* value and *a* = *b* = 0.\n\n# d3.hcl(h, c, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.hcl(specifier)
\n# d3.hcl(color)
\n\nEquivalent to [d3.lch](#lch), but with reversed argument order.\n\n# d3.lch(l, c, h[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js \"Source\")
\n# d3.lch(specifier)
\n# d3.lch(color)
\n\nConstructs a new [CIELChab](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) color. The channel values are exposed as `l`, `c` and `h` properties on the returned instance. Use the [CIELChab color picker](http://bl.ocks.org/mbostock/3e115519a1b495e0bd95) to explore this color space. The value of *l* is typically in the range [0, 100], *c* is typically in [0, 230], and *h* is typically in [0, 360).\n\nIf *l*, *c*, and *h* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to CIELChab color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELChab. (Colors already in CIELChab color space skip the conversion to RGB, and colors in CIELAB color space are converted directly to CIELChab.)\n\n# d3.cubehelix(h, s, l[, opacity]) [<>](https://github.com/d3/d3-color/blob/master/src/cubehelix.js \"Source\")
\n# d3.cubehelix(specifier)
\n# d3.cubehelix(color)
\n\nConstructs a new [Cubehelix](http://www.mrao.cam.ac.uk/~dag/CUBEHELIX/) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [Cubehelix color picker](http://bl.ocks.org/mbostock/ba8d75e45794c27168b5) to explore this color space.\n\nIf *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the Cubehelix color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to Cubehelix. (Colors already in the Cubehelix color space skip the conversion to RGB.)\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-color", "error": "[Circular]", "extraneous": false, "_deduped": "d3-color" }, "d3-dispatch": { "_from": "d3-dispatch@1", "_id": "d3-dispatch@1.0.6", "_inBundle": false, "_integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", "_location": "/d3-dispatch", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", "_shasum": "00d37bcee4dd8cd97729dd893a0ac29caaba5d58", "_spec": "d3-dispatch@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Register named callbacks and call them with arguments.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-dispatch/", "jsdelivr": "dist/d3-dispatch.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-dispatch.js", "module": "src/index.js", "name": "d3-dispatch", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-dispatch.min.js", "version": "1.0.6", "readme": "# d3-dispatch\n\nDispatching is a convenient mechanism for separating concerns with loosely-coupled code: register named callbacks and then call them with arbitrary arguments. A variety of D3 components, such as [d3-request](https://github.com/d3/d3-request), use this mechanism to emit events to listeners. Think of this like Node’s [EventEmitter](https://nodejs.org/api/events.html), except every listener has a well-defined name so it’s easy to remove or replace them.\n\nFor example, to create a dispatch for *start* and *end* events:\n\n```js\nvar dispatch = d3.dispatch(\"start\", \"end\");\n```\n\nYou can then register callbacks for these events using [*dispatch*.on](#dispatch_on):\n\n```js\ndispatch.on(\"start\", callback1);\ndispatch.on(\"start.foo\", callback2);\ndispatch.on(\"end\", callback3);\n```\n\nThen, you can invoke all the *start* callbacks using [*dispatch*.call](#dispatch_call) or [*dispatch*.apply](#dispatch_apply):\n\n```js\ndispatch.call(\"start\");\n```\n\nLike *function*.call, you may also specify the `this` context and any arguments:\n\n```js\ndispatch.call(\"start\", {about: \"I am a context object\"}, \"I am an argument\");\n```\n\nWant a more involved example? See how to use [d3-dispatch for coordinated views](http://bl.ocks.org/mbostock/5872848).\n\n## Installing\n\nIf you use NPM, `npm install d3-dispatch`. Otherwise, download the [latest release](https://github.com/d3/d3-dispatch/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-dispatch.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-dispatch in your browser.](https://tonicdev.com/npm/d3-dispatch)\n\n## API Reference\n\n# d3.dispatch(types…) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js \"Source\")\n\nCreates a new dispatch for the specified event *types*. Each *type* is a string, such as `\"start\"` or `\"end\"`.\n\n# *dispatch*.on(typenames[, callback]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L26 \"Source\")\n\nAdds, removes or gets the *callback* for the specified *typenames*. If a *callback* function is specified, it is registered for the specified (fully-qualified) *typenames*. If a callback was already registered for the given *typenames*, the existing callback is removed before the new callback is added.\n\nThe specified *typenames* is a string, such as `start` or `end.foo`. The 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 `start end` or `start.foo start.bar`.\n\nTo remove all callbacks for a given name `foo`, say `dispatch.on(\".foo\", null)`.\n\nIf *callback* is not specified, returns the current callback for the specified *typenames*, if any. If multiple typenames are specified, the first matching callback is returned.\n\n# *dispatch*.copy() [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L49 \"Source\")\n\nReturns a copy of this dispatch object. Changes to this dispatch do not affect the returned copy and vice versa.\n\n# *dispatch*.call(type[, that[, arguments…]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L54 \"Source\")\n\nLike [*function*.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. See [*dispatch*.apply](#dispatch_apply) for more information.\n\n# *dispatch*.apply(type[, that[, arguments]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L59 \"Source\")\n\nLike [*function*.apply](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. For example, if you wanted to dispatch your *custom* callbacks after handling a native *click* event, while preserving the current `this` context and arguments, you could say:\n\n```js\nselection.on(\"click\", function() {\n dispatch.apply(\"custom\", this, arguments);\n});\n```\n\nYou can pass whatever arguments you want to callbacks; most commonly, you might create an object that represents an event, or pass the current datum (*d*) and index (*i*). See [function.call](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call) and [function.apply](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Apply) for further information.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-dispatch", "error": "[Circular]", "extraneous": false, "_deduped": "d3-dispatch" }, "d3-ease": { "_from": "d3-ease@1", "_id": "d3-ease@1.0.7", "_inBundle": false, "_integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", "_location": "/d3-ease", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", "_shasum": "9a834890ef8b8ae8c558b2fe55bd57f5993b85e2", "_spec": "d3-ease@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Easing functions for smooth animation.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-ease/", "jsdelivr": "dist/d3-ease.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-ease.js", "module": "src/index.js", "name": "d3-ease", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-ease.min.js", "version": "1.0.7", "readme": "# d3-ease\n\n*Easing* is a method of distorting time to control apparent motion in animation. It is most commonly used for [slow-in, slow-out](https://en.wikipedia.org/wiki/12_basic_principles_of_animation#Slow_In_and_Slow_Out). By easing time, [animated transitions](https://github.com/d3/d3-transition) are smoother and exhibit more plausible motion.\n\nThe easing types in this module implement the [ease method](#ease_ease), which takes a normalized time *t* and returns the corresponding “eased” time *tʹ*. Both the normalized time and the eased time are typically in the range [0,1], where 0 represents the start of the animation and 1 represents the end; some easing types, such as [elastic](#easeElastic), may return eased times slightly outside this range. A good easing type should return 0 if *t* = 0 and 1 if *t* = 1. See the [easing explorer](https://observablehq.com/@d3/easing) for a visual demonstration.\n\nThese easing types are largely based on work by [Robert Penner](http://robertpenner.com/easing/).\n\n## Installing\n\nIf you use NPM, `npm install d3-ease`. Otherwise, download the [latest release](https://github.com/d3/d3-ease/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-ease.v1.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\n\n```\n\n[Try d3-ease in your browser.](https://observablehq.com/@d3/easing-animations)\n\n## API Reference\n\n# ease(t)\n\nGiven the specified normalized time *t*, typically in the range [0,1], returns the “eased” time *tʹ*, also typically in [0,1]. 0 represents the start of the animation and 1 represents the end. A good implementation returns 0 if *t* = 0 and 1 if *t* = 1. See the [easing explorer](https://observablehq.com/@d3/easing) for a visual demonstration. For example, to apply [cubic](#easeCubic) easing:\n\n```js\nvar te = d3.easeCubic(t);\n```\n\nSimilarly, to apply custom [elastic](#easeElastic) easing:\n\n```js\n// Before the animation starts, create your easing function.\nvar customElastic = d3.easeElastic.period(0.4);\n\n// During the animation, apply the easing function.\nvar te = customElastic(t);\n```\n\n# d3.easeLinear(t) [<>](https://github.com/d3/d3-ease/blob/master/src/linear.js \"Source\")\n\nLinear easing; the identity function; *linear*(*t*) returns *t*.\n\n[\"linear\"](https://observablehq.com/@d3/easing#linear)\n\n# d3.easePolyIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L3 \"Source\")\n\nPolynomial easing; raises *t* to the specified [exponent](#poly_exponent). If the exponent is not specified, it defaults to 3, equivalent to [cubicIn](#easeCubicIn).\n\n[\"polyIn\"](https://observablehq.com/@d3/easing#polyIn)\n\n# d3.easePolyOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L15 \"Source\")\n\nReverse polynomial easing; equivalent to 1 - [polyIn](#easePolyIn)(1 - *t*). If the [exponent](#poly_exponent) is not specified, it defaults to 3, equivalent to [cubicOut](#easeCubicOut).\n\n[\"polyOut\"](https://observablehq.com/@d3/easing#polyOut)\n\n# d3.easePoly(t) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js \"Source\")\n
# d3.easePolyInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L27 \"Source\")\n\nSymmetric polynomial easing; scales [polyIn](#easePolyIn) for *t* in [0, 0.5] and [polyOut](#easePolyOut) for *t* in [0.5, 1]. If the [exponent](#poly_exponent) is not specified, it defaults to 3, equivalent to [cubic](#easeCubic).\n\n[\"polyInOut\"](https://observablehq.com/@d3/easing#polyInOut)\n\n# poly.exponent(e) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L1 \"Source\")\n\nReturns a new polynomial easing with the specified exponent *e*. For example, to create equivalents of [linear](#easeLinear), [quad](#easeQuad), and [cubic](#easeCubic):\n\n```js\nvar linear = d3.easePoly.exponent(1),\n quad = d3.easePoly.exponent(2),\n cubic = d3.easePoly.exponent(3);\n```\n\n# d3.easeQuadIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L1 \"Source\")\n\nQuadratic easing; equivalent to [polyIn](#easePolyIn).[exponent](#poly_exponent)(2).\n\n[\"quadIn\"](https://observablehq.com/@d3/easing#quadIn)\n\n# d3.easeQuadOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L5 \"Source\")\n\nReverse quadratic easing; equivalent to 1 - [quadIn](#easeQuadIn)(1 - *t*). Also equivalent to [polyOut](#easePolyOut).[exponent](#poly_exponent)(2).\n\n[\"quadOut\"](https://observablehq.com/@d3/easing#quadOut)\n\n# d3.easeQuad(t) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js \"Source\")\n
# d3.easeQuadInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L9 \"Source\")\n\nSymmetric quadratic easing; scales [quadIn](#easeQuadIn) for *t* in [0, 0.5] and [quadOut](#easeQuadOut) for *t* in [0.5, 1]. Also equivalent to [poly](#easePoly).[exponent](#poly_exponent)(2).\n\n[\"quadInOut\"](https://observablehq.com/@d3/easing#quadInOut)\n\n# d3.easeCubicIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L1 \"Source\")\n\nCubic easing; equivalent to [polyIn](#easePolyIn).[exponent](#poly_exponent)(3).\n\n[\"cubicIn\"](https://observablehq.com/@d3/easing#cubicIn)\n\n# d3.easeCubicOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L5 \"Source\")\n\nReverse cubic easing; equivalent to 1 - [cubicIn](#easeCubicIn)(1 - *t*). Also equivalent to [polyOut](#easePolyOut).[exponent](#poly_exponent)(3).\n\n[\"cubicOut\"](https://observablehq.com/@d3/easing#cubicOut)\n\n# d3.easeCubic(t) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js \"Source\")\n
# d3.easeCubicInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L9 \"Source\")\n\nSymmetric cubic easing; scales [cubicIn](#easeCubicIn) for *t* in [0, 0.5] and [cubicOut](#easeCubicOut) for *t* in [0.5, 1]. Also equivalent to [poly](#easePoly).[exponent](#poly_exponent)(3).\n\n[\"cubicInOut\"](https://observablehq.com/@d3/easing#cubicInOut)\n\n# d3.easeSinIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L4 \"Source\")\n\nSinusoidal easing; returns sin(*t*).\n\n[\"sinIn\"](https://observablehq.com/@d3/easing#sinIn)\n\n# d3.easeSinOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L8 \"Source\")\n\nReverse sinusoidal easing; equivalent to 1 - [sinIn](#easeSinIn)(1 - *t*).\n\n[\"sinOut\"](https://observablehq.com/@d3/easing#sinOut)\n\n# d3.easeSin(t) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js \"Source\")\n
# d3.easeSinInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L12 \"Source\")\n\nSymmetric sinusoidal easing; scales [sinIn](#easeSinIn) for *t* in [0, 0.5] and [sinOut](#easeSinOut) for *t* in [0.5, 1].\n\n[\"sinInOut\"](https://observablehq.com/@d3/easing#sinInOut)\n\n# d3.easeExpIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L1 \"Source\")\n\nExponential easing; raises 2 to the exponent 10 \\* (*t* - 1).\n\n[\"expIn\"](https://observablehq.com/@d3/easing#expIn)\n\n# d3.easeExpOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L5 \"Source\")\n\nReverse exponential easing; equivalent to 1 - [expIn](#easeExpIn)(1 - *t*).\n\n[\"expOut\"](https://observablehq.com/@d3/easing#expOut)\n\n# d3.easeExp(t) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js \"Source\")\n
# d3.easeExpInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L9 \"Source\")\n\nSymmetric exponential easing; scales [expIn](#easeExpIn) for *t* in [0, 0.5] and [expOut](#easeExpOut) for *t* in [0.5, 1].\n\n[\"expInOut\"](https://observablehq.com/@d3/easing#expInOut)\n\n# d3.easeCircleIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L1 \"Source\")\n\nCircular easing.\n\n[\"circleIn\"](https://observablehq.com/@d3/easing#circleIn)\n\n# d3.easeCircleOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L5 \"Source\")\n\nReverse circular easing; equivalent to 1 - [circleIn](#easeCircleIn)(1 - *t*).\n\n[\"circleOut\"](https://observablehq.com/@d3/easing#circleOut)\n\n# d3.easeCircle(t) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js \"Source\")\n
# d3.easeCircleInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L9 \"Source\")\n\nSymmetric circular easing; scales [circleIn](#easeCircleIn) for *t* in [0, 0.5] and [circleOut](#easeCircleOut) for *t* in [0.5, 1].\n\n[\"circleInOut\"](https://observablehq.com/@d3/easing#circleInOut)\n\n# d3.easeElasticIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L5 \"Source\")\n\nElastic easing, like a rubber band. The [amplitude](#elastic_amplitude) and [period](#elastic_period) of the oscillation are configurable; if not specified, they default to 1 and 0.3, respectively.\n\n[\"elasticIn\"](https://observablehq.com/@d3/easing#elasticIn)\n\n# d3.easeElastic(t) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js \"Source\")\n
# d3.easeElasticOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L18 \"Source\")\n\nReverse elastic easing; equivalent to 1 - [elasticIn](#easeElasticIn)(1 - *t*).\n\n[\"elasticOut\"](https://observablehq.com/@d3/easing#elasticOut)\n\n# d3.easeElasticInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L31 \"Source\")\n\nSymmetric elastic easing; scales [elasticIn](#easeElasticIn) for *t* in [0, 0.5] and [elasticOut](#easeElasticOut) for *t* in [0.5, 1].\n\n[\"elasticInOut\"](https://observablehq.com/@d3/easing#elasticInOut)\n\n# elastic.amplitude(a) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L40 \"Source\")\n\nReturns a new elastic easing with the specified amplitude *a*.\n\n# elastic.period(p) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L41 \"Source\")\n\nReturns a new elastic easing with the specified period *p*.\n\n# d3.easeBackIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L3 \"Source\")\n\n[Anticipatory](https://en.wikipedia.org/wiki/12_basic_principles_of_animation#Anticipation) easing, like a dancer bending his knees before jumping off the floor. The degree of [overshoot](#back_overshoot) is configurable; if not specified, it defaults to 1.70158.\n\n[\"backIn\"](https://observablehq.com/@d3/easing#backIn)\n\n# d3.easeBackOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L15 \"Source\")\n\nReverse anticipatory easing; equivalent to 1 - [backIn](#easeBackIn)(1 - *t*).\n\n[\"backOut\"](https://observablehq.com/@d3/easing#backOut)\n\n# d3.easeBack(t) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js \"Source\")\n
# d3.easeBackInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L27 \"Source\")\n\nSymmetric anticipatory easing; scales [backIn](#easeBackIn) for *t* in [0, 0.5] and [backOut](#easeBackOut) for *t* in [0.5, 1].\n\n[\"backInOut\"](https://observablehq.com/@d3/easing#backInOut)\n\n# back.overshoot(s) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L1 \"Source\")\n\nReturns a new back easing with the specified overshoot *s*.\n\n# d3.easeBounceIn(t) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L12 \"Source\")\n\nBounce easing, like a rubber ball.\n\n[\"bounceIn\"](https://observablehq.com/@d3/easing#bounceIn)\n\n# d3.easeBounce(t) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js \"Source\")\n
# d3.easeBounceOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L16 \"Source\")\n\nReverse bounce easing; equivalent to 1 - [bounceIn](#easeBounceIn)(1 - *t*).\n\n[\"bounceOut\"](https://observablehq.com/@d3/easing#bounceOut)\n\n# d3.easeBounceInOut(t) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L20 \"Source\")\n\nSymmetric bounce easing; scales [bounceIn](#easeBounceIn) for *t* in [0, 0.5] and [bounceOut](#easeBounceOut) for *t* in [0.5, 1].\n\n[\"bounceInOut\"](https://observablehq.com/@d3/easing#bounceInOut)\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-ease", "error": "[Circular]", "extraneous": false, "_deduped": "d3-ease" }, "d3-interpolate": { "_from": "d3-interpolate@1", "_id": "d3-interpolate@1.4.0", "_inBundle": false, "_integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "_location": "/d3-interpolate", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", "_shasum": "526e79e2d80daa383f9e0c1c1c7dcc0f0583e987", "_spec": "d3-interpolate@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Interpolate numbers, colors, strings, arrays, objects, whatever!", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-interpolate/", "jsdelivr": "dist/d3-interpolate.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-interpolate.js", "module": "src/index.js", "name": "d3-interpolate", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-interpolate.min.js", "version": "1.4.0", "readme": "# d3-interpolate\n\nThis module provides a variety of interpolation methods for blending between two values. Values may be numbers, colors, strings, arrays, or even deeply-nested objects. For example:\n\n```js\nvar i = d3.interpolateNumber(10, 20);\ni(0.0); // 10\ni(0.2); // 12\ni(0.5); // 15\ni(1.0); // 20\n```\n\nThe returned function `i` is called an *interpolator*. Given a starting value *a* and an ending value *b*, it takes a parameter *t* in the domain [0, 1] and returns the corresponding interpolated value between *a* and *b*. An interpolator typically returns a value equivalent to *a* at *t* = 0 and a value equivalent to *b* at *t* = 1.\n\nYou can interpolate more than just numbers. To find the perceptual midpoint between steelblue and brown:\n\n```js\nd3.interpolateLab(\"steelblue\", \"brown\")(0.5); // \"rgb(142, 92, 109)\"\n```\n\nHere’s a more elaborate example demonstrating type inference used by [interpolate](#interpolate):\n\n```js\nvar i = d3.interpolate({colors: [\"red\", \"blue\"]}, {colors: [\"white\", \"black\"]});\ni(0.0); // {colors: [\"rgb(255, 0, 0)\", \"rgb(0, 0, 255)\"]}\ni(0.5); // {colors: [\"rgb(255, 128, 128)\", \"rgb(0, 0, 128)\"]}\ni(1.0); // {colors: [\"rgb(255, 255, 255)\", \"rgb(0, 0, 0)\"]}\n```\n\nNote that the generic value interpolator detects not only nested objects and arrays, but also color strings and numbers embedded in strings!\n\n## Installing\n\nIf you use NPM, `npm install d3-interpolate`. Otherwise, download the [latest release](https://github.com/d3/d3-interpolate/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-interpolate.v1.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\n\n\n```\n\n## API Reference\n\n# d3.interpolate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/value.js), [Examples](https://observablehq.com/@d3/d3-interpolate)\n\nReturns an interpolator between the two arbitrary values *a* and *b*. The interpolator implementation is based on the type of the end value *b*, using the following algorithm:\n\n1. If *b* is null, undefined or a boolean, use the constant *b*.\n2. If *b* is a number, use [interpolateNumber](#interpolateNumber).\n3. If *b* is a [color](https://github.com/d3/d3-color/blob/master/README.md#color) or a string coercible to a color, use [interpolateRgb](#interpolateRgb).\n4. If *b* is a [date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), use [interpolateDate](#interpolateDate).\n5. If *b* is a string, use [interpolateString](#interpolateString).\n6. If *b* is a [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) of numbers, use [interpolateNumberArray](#interpolateNumberArray).\n7. If *b* is a generic [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray), use [interpolateArray](#interpolateArray).\n8. If *b* is coercible to a number, use [interpolateNumber](#interpolateNumber).\n9. Use [interpolateObject](#interpolateObject).\n\nBased on the chosen interpolator, *a* is coerced to the suitable corresponding type.\n\n# d3.interpolateNumber(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/number.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*. The returned interpolator is equivalent to:\n\n```js\nfunction interpolator(t) {\n return a * (1 - t) + b * t;\n}\n```\n\nCaution: avoid interpolating to or from the number zero when the interpolator is used to generate a string. When very small values are stringified, they may be converted to scientific notation, which is an invalid attribute or style property value in older browsers. For example, the number `0.0000001` is converted to the string `\"1e-7\"`. This is particularly noticeable with interpolating opacity. To avoid scientific notation, start or end the transition at 1e-6: the smallest value that is not stringified in scientific notation.\n\n# d3.interpolateRound(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/round.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*; the interpolator is similar to [interpolateNumber](#interpolateNumber), except it will round the resulting value to the nearest integer.\n\n# d3.interpolateString(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/string.js), [Examples](https://observablehq.com/@d3/d3-interpolatestring)\n\nReturns an interpolator between the two strings *a* and *b*. The string interpolator finds numbers embedded in *a* and *b*, where each number is of the form understood by JavaScript. A few examples of numbers that will be detected within a string: `-1`, `42`, `3.14159`, and `6.0221413e+23`.\n\nFor each number embedded in *b*, the interpolator will attempt to find a corresponding number in *a*. If a corresponding number is found, a numeric interpolator is created using [interpolateNumber](#interpolateNumber). The remaining parts of the string *b* are used as a template: the static parts of the string *b* remain constant for the interpolation, with the interpolated numeric values embedded in the template.\n\nFor example, if *a* is `\"300 12px sans-serif\"`, and *b* is `\"500 36px Comic-Sans\"`, two embedded numbers are found. The remaining static parts (of string *b*) are a space between the two numbers (`\" \"`), and the suffix (`\"px Comic-Sans\"`). The result of the interpolator at *t* = 0.5 is `\"400 24px Comic-Sans\"`.\n\n# d3.interpolateDate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/date.js), [Examples](https://observablehq.com/@d3/d3-interpolatedate)\n\nReturns an interpolator between the two [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) *a* and *b*.\n\nNote: **no defensive copy** of the returned date is created; the same Date instance is returned for every evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/array.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two arrays *a* and *b*. If *b* is a typed array (e.g., Float64Array), [interpolateNumberArray](#interpolateNumberArray) is called instead.\n\nInternally, an array template is created that is the same length as *b*. For each element in *b*, if there exists a corresponding element in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such element, the static value from *b* is used in the template. Then, for the given parameter *t*, the template’s embedded interpolators are evaluated. The updated array template is then returned.\n\nFor example, if *a* is the array `[0, 1]` and *b* is the array `[1, 10, 100]`, then the result of the interpolator for *t* = 0.5 is the array `[0.5, 5.5, 100]`.\n\nNote: **no defensive copy** of the template array is created; modifications of the returned array may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateNumberArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/numberArray.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumberarray)\n\nReturns an interpolator between the two arrays of numbers *a* and *b*. Internally, an array template is created that is the same type and length as *b*. For each element in *b*, if there exists a corresponding element in *a*, the values are directly interpolated in the array template. If there is no such element, the static value from *b* is copied. The updated array template is then returned.\n\nNote: For performance reasons, **no defensive copy** is made of the template array and the arguments *a* and *b*; modifications of these arrays may affect subsequent evaluation of the interpolator.\n\n# d3.interpolateObject(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/object.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two objects *a* and *b*. Internally, an object template is created that has the same properties as *b*. For each property in *b*, if there exists a corresponding property in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such property, the static value from *b* is used in the template. Then, for the given parameter *t*, the template's embedded interpolators are evaluated and the updated object template is then returned.\n\nFor example, if *a* is the object `{x: 0, y: 1}` and *b* is the object `{x: 1, y: 10, z: 100}`, the result of the interpolator for *t* = 0.5 is the object `{x: 0.5, y: 5.5, z: 100}`.\n\nObject interpolation is particularly useful for *dataspace interpolation*, where data is interpolated rather than attribute values. For example, you can interpolate an object which describes an arc in a pie chart, and then use [d3.arc](https://github.com/d3/d3-shape/blob/master/README.md#arc) to compute the new SVG path data.\n\nNote: **no defensive copy** of the template object is created; modifications of the returned object may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateTransformCss(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L62), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D CSS transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateTransformSvg(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L63), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D SVG transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateZoom(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/zoom.js), [Examples](https://observablehq.com/@d3/d3-interpolatezoom)\n\nReturns an interpolator between the two views *a* and *b* of a two-dimensional plane, based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf) by Jarke J. van Wijk and Wim A.A. Nuij. Each view is defined as an array of three numbers: *cx*, *cy* and *width*. The first two coordinates *cx*, *cy* represent the center of the viewport; the last coordinate *width* represents the size of the viewport.\n\nThe returned interpolator exposes a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *x,y* space. If you want a slower or faster transition, multiply this by an arbitrary scale factor (V as described in the original paper).\n\n# d3.interpolateDiscrete(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/discrete.js), [Examples](https://observablehq.com/@d3/d3-interpolatediscrete)\n\nReturns a discrete interpolator for the given array of *values*. The returned interpolator maps *t* in [0, 1 / *n*) to *values*[0], *t* in [1 / *n*, 2 / *n*) to *values*[1], and so on, where *n* = *values*.length. In effect, this is a lightweight [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) with a fixed domain of [0, 1].\n\n### Sampling\n\n# d3.quantize(interpolator, n) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/d3-quantize)\n\nReturns *n* uniformly-spaced samples from the specified *interpolator*, where *n* is an integer greater than one. The first sample is always at *t* = 0, and the last sample is always at *t* = 1. This can be useful in generating a fixed number of samples from a given interpolator, such as to derive the range of a [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) from a [continuous interpolator](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateWarm).\n\nCaution: this method will not work with interpolators that do not return defensive copies of their output, such as [d3.interpolateArray](#interpolateArray), [d3.interpolateDate](#interpolateDate) and [d3.interpolateObject](#interpolateObject). For those interpolators, you must wrap the interpolator and create a copy for each returned value.\n\n### Color Spaces\n\n# d3.interpolateRgb(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"rgb\"\n\nOr, with a corrected [gamma](#interpolate_gamma) of 2.2:\n\n\"rgbGamma\"\n\nReturns an RGB color space interpolator between the two colors *a* and *b* with a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in RGB; they will be converted to RGB using [d3.rgb](https://github.com/d3/d3-color/blob/master/README.md#rgb). The return value of the interpolator is an RGB string.\n\n# d3.interpolateRgbBasis(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L54), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). Implicit control points are generated such that the interpolator returns *colors*[0] at *t* = 0 and *colors*[*colors*.length - 1] at *t* = 1. Opacity interpolation is not currently supported. See also [d3.interpolateBasis](#interpolateBasis), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateRgbBasisClosed(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L55), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). The control points are implicitly repeated such that the resulting spline has cyclical C² continuity when repeated around *t* in [0,1]; this is useful, for example, to create cyclical color scales. Opacity interpolation is not currently supported. See also [d3.interpolateBasisClosed](#interpolateBasisClosed), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateHsl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hsl\"\n\nReturns an HSL color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in HSL; they will be converted to HSL using [d3.hsl](https://github.com/d3/d3-color/blob/master/README.md#hsl). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHslLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hslLong\"\n\nLike [interpolateHsl](#interpolateHsl), but does not use the shortest path between hues.\n\n# d3.interpolateLab(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/lab.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"lab\"\n\nReturns a [CIELAB color space](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELAB; they will be converted to CIELAB using [d3.lab](https://github.com/d3/d3-color/blob/master/README.md#lab). The return value of the interpolator is an RGB string.\n\n# d3.interpolateHcl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hcl\"\n\nReturns a [CIELChab color space](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELChab; they will be converted to CIELChab using [d3.hcl](https://github.com/d3/d3-color/blob/master/README.md#hcl). If either color’s hue or chroma is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHclLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hclLong\"\n\nLike [interpolateHcl](#interpolateHcl), but does not use the shortest path between hues.\n\n# d3.interpolateCubehelix(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelix\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGamma\"\n\nReturns a Cubehelix color space interpolator between the two colors *a* and *b* using a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in Cubehelix; they will be converted to Cubehelix using [d3.cubehelix](https://github.com/d3/d3-color/blob/master/README.md#cubehelix). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateCubehelixLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js#L29), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelixLong\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGammaLong\"\n\nLike [interpolateCubehelix](#interpolateCubehelix), but does not use the shortest path between hues.\n\n# interpolate.gamma(gamma)\n\nGiven that *interpolate* is one of [interpolateRgb](#interpolateRgb), [interpolateCubehelix](#interpolateCubehelix) or [interpolateCubehelixLong](#interpolateCubehelixLong), returns a new interpolator factory of the same type using the specified *gamma*. For example, to interpolate from purple to orange with a gamma of 2.2 in RGB space:\n\n```js\nvar interpolator = d3.interpolateRgb.gamma(2.2)(\"purple\", \"orange\");\n```\n\nSee Eric Brasseur’s article, [Gamma error in picture scaling](https://web.archive.org/web/20160112115812/http://www.4p8.com/eric.brasseur/gamma.html), for more on gamma correction.\n\n# d3.interpolateHue(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hue.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns an interpolator between the two hue angles *a* and *b*. If either hue is NaN, the opposing value is used. The shortest path between hues is used. The return value of the interpolator is a number in [0, 360).\n\n### Splines\n\nWhereas standard interpolators blend from a starting value *a* at *t* = 0 to an ending value *b* at *t* = 1, spline interpolators smoothly blend multiple input values for *t* in [0,1] using piecewise polynomial functions. Only cubic uniform nonrational [B-splines](https://en.wikipedia.org/wiki/B-spline) are currently supported, also known as basis splines.\n\n# d3.interpolateBasis(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basis.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. Implicit control points are generated such that the interpolator returns *values*[0] at *t* = 0 and *values*[*values*.length - 1] at *t* = 1. See also [d3.curveBasis](https://github.com/d3/d3-shape/blob/master/README.md#curveBasis).\n\n# d3.interpolateBasisClosed(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basisClosed.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. The control points are implicitly repeated such that the resulting one-dimensional spline has cyclical C² continuity when repeated around *t* in [0,1]. See also [d3.curveBasisClosed](https://github.com/d3/d3-shape/blob/master/README.md#curveBasisClosed).\n\n### Piecewise\n\n# d3.piecewise(interpolate, values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/piecewise.js), [Examples](https://observablehq.com/@d3/d3-piecewise)\n\nReturns a piecewise interpolator, composing interpolators for each adjacent pair of *values*. The returned interpolator maps *t* in [0, 1 / (*n* - 1)] to *interpolate*(*values*[0], *values*[1]), *t* in [1 / (*n* - 1), 2 / (*n* - 1)] to *interpolate*(*values*[1], *values*[2]), and so on, where *n* = *values*.length. In effect, this is a lightweight [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales). For example, to blend through red, green and blue:\n\n```js\nvar interpolate = d3.piecewise(d3.interpolateRgb.gamma(2.2), [\"red\", \"green\", \"blue\"]);\n```\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-interpolate", "error": "[Circular]", "extraneous": false, "_deduped": "d3-interpolate" }, "d3-selection": { "_from": "d3-selection@1", "_id": "d3-selection@1.4.2", "_inBundle": false, "_integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", "_location": "/d3-selection", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", "_shasum": "dcaa49522c0dbf32d6c1858afc26b6094555bc5c", "_spec": "d3-selection@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Data-driven DOM manipulation: select elements and join them to data.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-selection/", "jsdelivr": "dist/d3-selection.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-selection.js", "module": "src/index.js", "name": "d3-selection", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-selection.min.js", "version": "1.4.2", "readme": "# d3-selection\n\nSelections allow powerful data-driven transformation of the document object model (DOM): set [attributes](#selection_attr), [styles](#selection_style), [properties](#selection_property), [HTML](#selection_html) or [text](#selection_text) content, and more. Using the [data join](#joining-data)’s [enter](#selection_enter) and [exit](#selection_enter) selections, you can also [add](#selection_append) or [remove](#selection_remove) elements to correspond to data.\n\nSelection methods typically return the current selection, or a new selection, allowing the concise application of multiple operations on a given selection via method chaining. For example, to set the class and color style of all paragraph elements in the current document:\n\n```js\nd3.selectAll(\"p\")\n .attr(\"class\", \"graf\")\n .style(\"color\", \"red\");\n```\n\nThis is equivalent to:\n\n```js\nconst p = d3.selectAll(\"p\");\np.attr(\"class\", \"graf\");\np.style(\"color\", \"red\");\n```\n\nBy convention, selection methods that return the current selection use *four* spaces of indent, while methods that return a new selection use only *two*. This helps reveal changes of context by making them stick out of the chain:\n\n```js\nd3.select(\"body\")\n .append(\"svg\")\n .attr(\"width\", 960)\n .attr(\"height\", 500)\n .append(\"g\")\n .attr(\"transform\", \"translate(20,20)\")\n .append(\"rect\")\n .attr(\"width\", 920)\n .attr(\"height\", 460);\n```\n\nSelections are immutable. All selection methods that affect which elements are selected (or their order) return a new selection rather than modifying the current selection. However, note that elements are necessarily mutable, as selections drive transformations of the document!\n\n## Installing\n\nIf you use NPM, `npm install d3-selection`. Otherwise, download the [latest release](https://github.com/d3/d3-selection/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-selection.v1.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\n\n```\n\n[Try d3-selection in your browser.](https://observablehq.com/collection/@d3/d3-selection)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Joining Data](#joining-data)\n* [Handling Events](#handling-events)\n* [Control Flow](#control-flow)\n* [Local Variables](#local-variables)\n* [Namespaces](#namespaces)\n\n### Selecting Elements\n\nSelection methods accept [W3C selector strings](http://www.w3.org/TR/selectors-api/) such as `.fancy` to select elements with the class *fancy*, or `div` to select DIV elements. Selection methods come in two forms: select and selectAll: the former selects only the first matching element, while the latter selects all matching elements in document order. The top-level selection methods, [d3.select](#select) and [d3.selectAll](#selectAll), query the entire document; the subselection methods, [*selection*.select](#selection_select) and [*selection*.selectAll](#selection_selectAll), restrict selection to descendants of the selected elements.\n\n# d3.selection() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/index.js#L38 \"Source\")\n\n[Selects](#select) the root element, `document.documentElement`. This function can also be used to test for selections (`instanceof d3.selection`) or to extend the selection prototype. For example, to add a method to check checkboxes:\n\n```js\nd3.selection.prototype.checked = function(value) {\n return arguments.length < 1\n ? this.property(\"checked\")\n : this.property(\"checked\", !!value);\n};\n```\n\nAnd then to use:\n\n```js\nd3.selectAll(\"input[type=checkbox]\").checked(true);\n```\n\n# d3.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/select.js#L3 \"Source\")\n\nSelects the first element that matches the specified *selector* string. If no elements match the *selector*, returns an empty selection. If multiple elements match the *selector*, only the first matching element (in document order) will be selected. For example, to select the first anchor element:\n\n```js\nconst anchor = d3.select(\"a\");\n```\n\nIf the *selector* is not a string, instead selects the specified node; this is useful if you already have a reference to a node, such as `this` within an event listener or a global such as `document.body`. For example, to make a clicked paragraph red:\n\n```js\nd3.selectAll(\"p\").on(\"click\", function() {\n d3.select(this).style(\"color\", \"red\");\n});\n```\n\n# d3.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js#L3 \"Source\")\n\nSelects all elements that match the specified *selector* string. The elements will be selected in document order (top-to-bottom). If no elements in the document match the *selector*, or if the *selector* is null or undefined, returns an empty selection. For example, to select all paragraphs:\n\n```js\nconst paragraph = d3.selectAll(\"p\");\n```\n\nIf the *selector* is not a string, instead selects the specified array of nodes; this is useful if you already have a reference to nodes, such as `this.childNodes` within an event listener or a global such as `document.links`. The nodes may instead be a pseudo-array such as a `NodeList` or `arguments`. For example, to color all links red:\n\n```js\nd3.selectAll(document.links).style(\"color\", \"red\");\n```\n\n# selection.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/select.js \"Source\")\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string. If no element matches the specified selector for the current element, the element at the current index will be null in the returned selection. (If the *selector* is null, every element in the returned selection will be null, resulting in an empty selection.) If the current element has associated data, this data is propagated to the corresponding selected element. If multiple elements match the selector, only the first matching element in document order is selected. For example, to select the first bold element in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").select(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an element, or null if there is no matching element. For example, to select the previous sibling of each paragraph:\n\n```js\nconst previous = d3.selectAll(\"p\").select(function() {\n return this.previousElementSibling;\n});\n```\n\nUnlike [*selection*.selectAll](#selection_selectAll), *selection*.select does not affect grouping: it preserves the existing group structure and indexes, and propagates data (if any) to selected children. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/selectAll.js \"Source\")\n\nFor each selected element, selects the descendant elements that match the specified *selector* string. The elements in the returned selection are grouped by their corresponding parent node in this selection. If no element matches the specified selector for the current element, or if the *selector* is null, the group at the current index will be empty. The selected elements do not inherit data from this selection; use [*selection*.data](#selection_data) to propagate data to children. For example, to select the bold elements in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").selectAll(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an array of elements (or a pseudo-array, such as a NodeList), or the empty array if there are no matching elements. For example, to select the previous and next siblings of each paragraph:\n\n```js\nconst sibling = d3.selectAll(\"p\").selectAll(function() {\n return [\n this.previousElementSibling,\n this.nextElementSibling\n ];\n});\n```\n\nUnlike [*selection*.select](#selection_select), *selection*.selectAll does affect grouping: each selected descendant is grouped by the parent element in the originating selection. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.filter(filter) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/filter.js \"Source\")\n\nFilters the selection, returning a new selection that contains only the elements for which the specified *filter* is true. The *filter* may be specified either as a selector string or a function. If the *filter* is 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 (*nodes*[*i*]).\n\nFor example, to filter a selection of table rows to contain only even rows:\n\n```js\nconst even = d3.selectAll(\"tr\").filter(\":nth-child(even)\");\n```\n\nThis is approximately equivalent to using [d3.selectAll](#selectAll) directly, although the indexes may be different:\n\n```js\nconst even = d3.selectAll(\"tr:nth-child(even)\");\n```\n\nSimilarly, using a function:\n\n```js\nconst even = d3.selectAll(\"tr\").filter((d, i) => i & 1);\n```\n\nOr using [*selection*.select](#selection_select) (and avoiding an arrow function, since *this* is needed to refer to the current element):\n\n```js\nconst even = d3.selectAll(\"tr\").select(function(d, i) { return i & 1 ? this : null; });\n```\n\nNote that the `:nth-child` pseudo-class is a one-based index rather than a zero-based index. Also, the above filter functions do not have precisely the same meaning as `:nth-child`; they rely on the selection index rather than the number of preceding sibling elements in the DOM.\n\nThe returned filtered selection preserves the parents of this selection, but like [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), it does not preserve indexes as some elements may be removed; use [*selection*.select](#selection_select) to preserve the index, if needed.\n\n# selection.merge(other) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/merge.js \"Source\")\n\nReturns a new selection merging this selection with the specified *other* selection. The returned selection has the same number of groups and the same parents as this selection. Any missing (null) elements in this selection are filled with the corresponding element, if present (not null), from the specified *selection*. (If the *other* selection has additional groups or parents, they are ignored.)\n\nThis method is used internally by [*selection*.join](#selection_join) to merge the [enter](#selection_enter) and [update](#selection_data) selections after [binding data](#joining-data). You can also merge explicitly, although note that since merging is based on element index, you should use operations that preserve index, such as [*selection*.select](#selection_select) instead of [*selection*.filter](#selection_filter). For example:\n\n```js\nconst odd = selection.select(function(d, i) { return i & 1 ? this : null; ));\nconst even = selection.select(function(d, i) { return i & 1 ? null : this; ));\nconst merged = odd.merge(even);\n```\n\nSee [*selection*.data](#selection_data) for more.\n\nThis method is not intended for concatenating arbitrary selections, however: if both this selection and the specified *other* selection have (non-null) elements at the same index, this selection’s element is returned in the merge and the *other* selection’s element is ignored.\n\n# d3.matcher(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/matcher.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns true if `this` element [matches](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) the specified selector. This method is used internally by [*selection*.filter](#selection_filter). For example, this:\n\n```js\nconst div = selection.filter(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.filter(d3.matcher(\"div\"));\n```\n\n(Although D3 is not a compatibility layer, this implementation does support vendor-prefixed implementations due to the recent standardization of *element*.matches.)\n\n# d3.selector(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selector.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns the first descendant of `this` element that matches the specified selector. This method is used internally by [*selection*.select](#selection_select). For example, this:\n\n```js\nconst div = selection.select(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.select(d3.selector(\"div\"));\n```\n\n# d3.selectorAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns all descendants of `this` element that match the specified selector. This method is used internally by [*selection*.selectAll](#selection_selectAll). For example, this:\n\n```js\nconst div = selection.selectAll(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.selectAll(d3.selectorAll(\"div\"));\n```\n\n# d3.window(node) [<>](https://github.com/d3/d3-selection/blob/master/src/window.js \"Source\")\n\nReturns the owner window for the specified *node*. If *node* is a node, returns the owner document’s default view; if *node* is a document, returns its default view; otherwise returns the *node*.\n\n# d3.style(node, name) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js#L32 \"Source\")\n\nReturns the value of the style property with the specified *name* for the specified *node*. If the *node* has an inline style with the specified *name*, its value is returned; otherwise, the [computed property value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value) is returned. See also [*selection*.style](#selection_style).\n\n### Modifying Elements\n\nAfter selecting elements, use the selection’s transformation methods to affect document content. For example, to set the name attribute and color style of an anchor element:\n\n```js\nd3.select(\"a\")\n .attr(\"name\", \"fred\")\n .style(\"color\", \"red\");\n```\n\nTo experiment with selections, visit [d3js.org](https://d3js.org) and open your browser’s developer console! (In Chrome, open the console with ⌥⌘J.) Select elements and then inspect the returned selection to see which elements are selected and how they are grouped. Call selection methods and see how the page content changes.\n\n# selection.attr(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/attr.js \"Source\")\n\nIf a *value* is specified, sets the attribute with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, all elements are given the same attribute value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s attribute. A null value will remove the specified attribute.\n\nIf a *value* is not specified, returns the current value of the specified attribute for the first (non-null) element in the selection. This is generally useful only if you know that the selection contains exactly one element.\n\nThe specified *name* may have a namespace prefix, such as `xlink:href` to specify the `href` attribute in the XLink namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map.\n\n# selection.classed(names[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/classed.js \"Source\")\n\nIf a *value* is specified, assigns or unassigns the specified CSS class *names* on the selected elements by setting the `class` attribute or modifying the `classList` property and returns this selection. The specified *names* is a string of space-separated class names. For example, to assign the classes `foo` and `bar` to the selected elements:\n\n```js\nselection.classed(\"foo bar\", true);\n```\n\nIf the *value* is truthy, then all elements are assigned the specified classes; otherwise, the classes are unassigned. If the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to assign or unassign classes on each element. For example, to randomly associate the class *foo* with on average half the selected elements:\n\n```js\nselection.classed(\"foo\", () => Math.random() > 0.5);\n```\n\nIf a *value* is not specified, returns true if and only if the first (non-null) selected element has the specified *classes*. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.style(name[, value[, priority]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js \"Source\")\n\nIf a *value* is specified, sets the style property with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, then all elements are given the same style property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s style property. A null value will remove the style property. An optional *priority* may also be specified, either as null or the string `important` (without the exclamation point).\n\nIf a *value* is not specified, returns the current value of the specified style property for the first (non-null) element in the selection. The current value is defined as the element’s inline value, if present, and otherwise its [computed value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value). Accessing the current style value is generally useful only if you know the selection contains exactly one element.\n\nCaution: unlike many SVG attributes, CSS styles typically have associated units. For example, `3px` is a valid stroke-width property value, while `3` is not. Some browsers implicitly assign the `px` (pixel) unit to numeric values, but not all browsers do: IE, for example, throws an “invalid arguments” error!\n\n# selection.property(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/property.js \"Source\")\n\nSome HTML elements have special properties that are not addressable using attributes or styles, such as a form field’s text `value` and a checkbox’s `checked` boolean. Use this method to get or set these properties.\n\nIf a *value* is specified, sets the property with the specified *name* to the specified value on selected elements. If the *value* is a constant, then all elements are given the same property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s property. A null value will delete the specified property.\n\nIf a *value* is not specified, returns the value of the specified property for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.text([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/text.js \"Source\")\n\nIf a *value* is specified, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same text content; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nIf a *value* is not specified, returns the text content for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.html([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/html.js \"Source\")\n\nIf a *value* is specified, sets the [inner HTML](http://dev.w3.org/html5/spec-LC/apis-in-html-documents.html#innerhtml) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same inner HTML; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s inner HTML. A null value will clear the content.\n\nIf a *value* is not specified, returns the inner HTML for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nUse [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) instead to create data-driven content; this method is intended for when you want a little bit of HTML, say for rich formatting. Also, *selection*.html is only supported on HTML elements. SVG elements and other non-HTML elements do not support the innerHTML property, and thus are incompatible with *selection*.html. Consider using [XMLSerializer](https://developer.mozilla.org/en-US/docs/XMLSerializer) to convert a DOM subtree to text. See also the [innersvg polyfill](https://code.google.com/p/innersvg/), which provides a shim to support the innerHTML property on SVG elements.\n\n# selection.append(type) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/append.js \"Source\")\n\nIf the specified *type* is a string, appends a new element of this type (tag name) as the last child of each selected element, or before the next following sibling in the update selection if this is an [enter selection](#selection_enter). The latter behavior for enter selections allows you to insert elements into the DOM in an order consistent with the new bound data; however, note that [*selection*.order](#selection_order) may still be required if updating elements change order (*i.e.*, if the order of new data is inconsistent with old data).\n\nIf the specified *type* is 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 (*nodes*[*i*]). This function should return an element to be appended. (The function typically creates a new element, but it may instead return an existing element.) For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").append(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").append(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.appendChild(document.createElement(\"p\"));\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.insert(type[, before]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/insert.js \"Source\")\n\nIf the specified *type* is a string, inserts a new element of this type (tag name) before the first element matching the specified *before* selector for each selected element. For example, a *before* selector `:first-child` will prepend nodes before the first child. If *before* is not specified, it defaults to null. (To append elements in an order consistent with [bound data](#joining-data), use [*selection*.append](#selection_append).)\n\nBoth *type* and *before* may instead be specified as functions which are 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 (*nodes*[*i*]). The *type* function should return an element to be inserted; the *before* function should return the child element before which the element should be inserted. For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").insert(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").insert(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.insertBefore(document.createElement(\"p\"), null);\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.remove() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/remove.js \"Source\")\n\nRemoves the selected elements from the document. Returns this selection (the removed elements) which are now detached from the DOM. There is not currently a dedicated API to add removed elements back to the document; however, you can pass a function to [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) to re-add elements.\n\n# selection.clone([deep]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/clone.js \"Source\")\n\nInserts clones of the selected elements immediately following the selected elements and returns a selection of the newly added clones. If *deep* is truthy, the descendant nodes of the selected elements will be cloned as well. Otherwise, only the elements themselves will be cloned. Equivalent to:\n\n```js\nselection.select(function() {\n return this.parentNode.insertBefore(this.cloneNode(deep), this.nextSibling);\n});\n```\n\n# selection.sort(compare) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/sort.js \"Source\")\n\nReturns a new selection that contains a copy of each group in this selection sorted according to the *compare* function. After sorting, re-inserts elements to match the resulting order (per [*selection*.order](#selection_order)).\n\nThe compare function, which defaults to [ascending](https://github.com/d3/d3-array#ascending), is passed two elements’ data *a* and *b* to compare. It should return either a negative, positive, or zero value. If negative, then *a* should be before *b*; if positive, then *a* should be after *b*; otherwise, *a* and *b* are considered equal and the order is arbitrary.\n\nNote that sorting is not guaranteed to be stable; however, it is guaranteed to have the same behavior as your browser’s built-in [sort](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort) method on arrays.\n\n# selection.order() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/order.js \"Source\")\n\nRe-inserts elements into the document such that the document order of each group matches the selection order. This is equivalent to calling [*selection*.sort](#selection_sort) if the data is already sorted, but much faster.\n\n# selection.raise() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/raise.js \"Source\")\n\nRe-inserts each selected element, in order, as the last child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.appendChild(this);\n});\n```\n\n# selection.lower() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/lower.js \"Source\")\n\nRe-inserts each selected element, in order, as the first child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.insertBefore(this, this.parentNode.firstChild);\n});\n```\n\n# d3.create(name) [<>](https://github.com/d3/d3-selection/blob/master/src/create.js \"Source\")\n\nGiven the specified element *name*, returns a single-element selection containing a detached element of the given name in the current document. This method assumes the HTML namespace, so you must specify a namespace explicitly when creating SVG or other non-HTML elements; see [namespace](#namespace) for details on supported namespace prefixes.\n\n```js\nd3.create(\"svg\") // equivalent to svg:svg\nd3.create(\"svg:svg\") // more explicitly\nd3.create(\"svg:g\") // an SVG G element\nd3.create(\"g\") // an HTML G (unknown) element\n```\n\n# d3.creator(name) [<>](https://github.com/d3/d3-selection/blob/master/src/creator.js \"Source\")\n\nGiven the specified element *name*, returns a function which creates an element of the given name, assuming that `this` is the parent element. This method is used internally by [*selection*.append](#selection_append) and [*selection*.insert](#selection_insert) to create new elements. For example, this:\n\n```js\nselection.append(\"div\");\n```\n\nIs equivalent to:\n\n```js\nselection.append(d3.creator(\"div\"));\n```\n\nSee [namespace](#namespace) for details on supported namespace prefixes, such as for SVG elements.\n\n### Joining Data\n\nFor an introduction to D3’s data joins, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join). Also see [Thinking With Joins](http://bost.ocks.org/mike/join/).\n\n# selection.data([data[, key]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/data.js \"Source\")\n\nBinds the specified array of *data* with the selected elements, returning a new selection that represents the *update* selection: the elements successfully bound to data. Also defines the [enter](#selection_enter) and [exit](#selection_exit) selections on the returned selection, which can be used to add or remove elements to correspond to the new data. The specified *data* is an array of arbitrary values (*e.g.*, numbers or objects), or a function that returns an array of values for each group. When data is assigned to an element, it is stored in the property `__data__`, thus making the data “sticky” and available on re-selection.\n\nThe *data* is specified **for each group** in the selection. If the selection has multiple groups (such as [d3.selectAll](#selectAll) followed by [*selection*.selectAll](#selection_selectAll)), then *data* should typically be specified as a function. This function will be evaluated for each group in order, being passed the group’s parent datum (*d*, which may be undefined), the group index (*i*), and the selection’s parent nodes (*nodes*), with *this* as the group’s parent element.\n\nIn conjunction with [*selection*.join](#selection_join) (or more explicitly with [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append) and [*selection*.remove](#selection_remove)), *selection*.data can be used to enter, update and exit elements to match data. For example, to create an HTML table from a matrix of numbers:\n\n```js\nconst matrix = [\n [11975, 5871, 8916, 2868],\n [ 1951, 10048, 2060, 6171],\n [ 8010, 16145, 8090, 8045],\n [ 1013, 990, 940, 6907]\n];\n\nd3.select(\"body\")\n .append(\"table\")\n .selectAll(\"tr\")\n .data(matrix)\n .join(\"tr\")\n .selectAll(\"td\")\n .data(d => d)\n .join(\"td\")\n .text(d => d);\n```\n\nIn this example the *data* function is the identity function: for each table row, it returns the corresponding row from the data matrix.\n\nIf a *key* function is not specified, then the first datum in *data* is assigned to the first selected element, the second datum to the second selected element, and so on. A *key* function may be specified to control which datum is assigned to which element, replacing the default join-by-index, by computing a string identifier for each datum and element. This key 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 (*nodes*[*i*]); the returned string is the element’s key. The key function is then also evaluated for each new datum in *data*, being passed the current datum (*d*), the current index (*i*), and the group’s new *data*, with *this* as the group’s parent DOM element; the returned string is the datum’s key. The datum for a given key is assigned to the element with the matching key. If multiple elements have the same key, the duplicate elements are put into the exit selection; if multiple data have the same key, the duplicate data are put into the enter selection.\n\nFor example, given this document:\n\n```html\n
\n
\n
\n
\n
\n
\n```\n\nYou could join data by key as follows:\n\n\n```js\nconst data = [\n {name: \"Locke\", number: 4},\n {name: \"Reyes\", number: 8},\n {name: \"Ford\", number: 15},\n {name: \"Jarrah\", number: 16},\n {name: \"Shephard\", number: 23},\n {name: \"Kwon\", number: 42}\n];\n\nd3.selectAll(\"div\")\n .data(data, function(d) { return d ? d.name : this.id; })\n .text(d => d.number);\n```\n\nThis example key function uses the datum *d* if present, and otherwise falls back to the element’s id property. Since these elements were not previously bound to data, the datum *d* is null when the key function is evaluated on selected elements, and non-null when the key function is evaluated on the new data.\n\nThe *update* and *enter* selections are returned in data order, while the *exit* selection preserves the selection order prior to the join. If a key function is specified, the order of elements in the selection may not match their order in the document; use [*selection*.order](#selection_order) or [*selection*.sort](#selection_sort) as needed. For more on how the key function affects the join, see [A Bar Chart, Part 2](http://bost.ocks.org/mike/bar/2/) and [Object Constancy](http://bost.ocks.org/mike/constancy/).\n\nIf *data* is not specified, this method returns the array of data for the selected elements.\n\nThis method cannot be used to clear bound data; use [*selection*.datum](#selection_datum) instead.\n\n# selection.join(enter[, update][, exit]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/join.js \"Source\")\n\nAppends, removes and reorders elements as necessary to match the data that was previously bound by [*selection*.data](#selection_data), returning the [merged](#selection_merge) enter and update selection. This method is a convenient alternative to the explicit [general update pattern](https://bl.ocks.org/mbostock/3808218), replacing [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append), [*selection*.remove](#selection_remove), and [*selection*.order](#selection_order). For example:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\"circle\")\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n```\n\nThe *enter* function may be specified as a string shorthand, as above, which is equivalent to [*selection*.append](#selection_append) with the given element name. Likewise, optional *update* and *exit* functions may be specified, which default to the identity function and calling [*selection*.remove](#selection_remove), respectively. The shorthand above is thus equivalent to:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\"),\n update => update,\n exit => exit.remove()\n )\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n````\n\nBy passing separate functions on enter, update and exit, you have greater control over what happens. And by specifying a key function to [*selection*.data](#selection_data), you can minimize changes to the DOM to optimize performance. For example, to set different fill colors for enter and update:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\").attr(\"fill\", \"green\"),\n update => update.attr(\"fill\", \"blue\")\n )\n .attr(\"stroke\", \"black\");\n```\n\nThe selections returned by the *enter* and *update* functions are merged and then returned by *selection*.join.\n\nYou also animate enter, update and exit by creating transitions inside the *enter*, *update* and *exit* functions. To avoid breaking the method chain, use *selection*.call to create transitions, or return an undefined enter or update selection to prevent merging: the return value of the *enter* and *update* functions specifies the two selections to merge and return by *selection*.join.\n\nFor more, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join).\n\n# selection.enter() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/enter.js \"Source\")\n\nReturns the enter selection: placeholder nodes for each datum that had no corresponding DOM element in the selection. (The enter selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe enter selection is typically used to create “missing” elements corresponding to new data. For example, to create DIV elements from an array of numbers:\n\n```js\nconst div = d3.select(\"body\")\n .selectAll(\"div\")\n .data([4, 8, 15, 16, 23, 42])\n .enter().append(\"div\")\n .text(d => d);\n```\n\nIf the body is initially empty, the above code will create six new DIV elements, append them to the body in-order, and assign their text content as the associated (string-coerced) number:\n\n```html\n
4
\n
8
\n
15
\n
16
\n
23
\n
42
\n```\n\nConceptually, the enter selection’s placeholders are pointers to the parent element (in this example, the document body). The enter selection is typically only used transiently to append elements, and is often [merged](#selection_merge) with the update selection after appending, such that modifications can be applied to both entering and updating elements.\n\n# selection.exit() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/exit.js \"Source\")\n\nReturns the exit selection: existing DOM elements in the selection for which no new datum was found. (The exit selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe exit selection is typically used to remove “superfluous” elements corresponding to old data. For example, to update the DIV elements created previously with a new array of numbers:\n\n```js\ndiv = div.data([1, 2, 4, 8, 16, 32], d => d);\n```\n\nSince a key function was specified (as the identity function), and the new data contains the numbers [4, 8, 16] which match existing elements in the document, the update selection contains three DIV elements. Leaving those elements as-is, we can append new elements for [1, 2, 32] using the enter selection:\n\n```js\ndiv.enter().append(\"div\").text(d => d);\n```\n\nLikewise, to remove the exiting elements [15, 23, 42]:\n\n```js\ndiv.exit().remove();\n```\n\nNow the document body looks like this:\n\n```html\n
1
\n
2
\n
4
\n
8
\n
16
\n
32
\n```\n\nThe order of the DOM elements matches the order of the data because the old data’s order and the new data’s order were consistent. If the new data’s order is different, use [*selection*.order](#selection_order) to reorder the elements in the DOM. See the [General Update Pattern](http://bl.ocks.org/mbostock/3808218) example thread for more on data joins.\n\n# selection.datum([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/datum.js \"Source\")\n\nGets or sets the bound data for each selected element. Unlike [*selection*.data](#selection_data), this method does not compute a join and does not affect indexes or the enter and exit selections.\n\nIf a *value* is specified, sets the element’s bound data to the specified value on all selected elements. If the *value* is a constant, all elements are given the same datum; otherwise, if the *value* is 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 (*nodes*[*i*]). The function is then used to set each element’s new data. A null value will delete the bound data.\n\nIf a *value* is not specified, returns the bound datum for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nThis method is useful for accessing HTML5 [custom data attributes](http://www.w3.org/TR/html5/dom.html#custom-data-attribute). For example, given the following elements:\n\n```html\n
    \n
  • Shawn Allen
  • \n
  • Mike Bostock
  • \n
\n```\n\nYou can expose the custom data attributes by setting each element’s data as the built-in [dataset](http://www.w3.org/TR/html5/dom.html#dom-dataset) property:\n\n```js\nselection.datum(function() { return this.dataset; })\n```\n\n### Handling Events\n\nFor interaction, selections allow listening for and dispatching of events.\n\n# selection.on(typenames[, listener[, options]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js \"Source\")\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is a string event type, such as `click`, `mouseover`, or `submit`; any [DOM event type](https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events) supported by your browser may be used. The 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 `click.foo` and `click.bar`. To specify multiple typenames, separate typenames with spaces, such as `input change` or `click.foo click.bar`.\n\nWhen a specified event is dispatched on a selected element, the specified *listener* will be evaluated for the element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element (*nodes*[*i*]). 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. To access the current event within a listener, use [d3.event](#event).\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\nAn optional *options* object may specify characteristics about the event listener, such as whether it is capturing or passive; see [*element*.addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener).\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# selection.dispatch(type[, parameters]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/dispatch.js \"Source\")\n\nDispatches a [custom event](http://www.w3.org/TR/dom/#interface-customevent) of the specified *type* to each selected element, in order. An optional *parameters* map may be specified to set additional properties of the event. It may contain the following fields:\n\n* [`bubbles`](https://www.w3.org/TR/dom/#dom-event-bubbles) - if true, the event is dispatched to ancestors in reverse tree order.\n* [`cancelable`](https://www.w3.org/TR/dom/#dom-event-cancelable) - if true, *event*.preventDefault is allowed.\n* [`detail`](https://www.w3.org/TR/dom/#dom-customevent-detail) - any custom data associated with the event.\n\nIf *parameters* is 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 (*nodes*[*i*]). It must return the parameters map for the current element.\n\n# d3.event\n\nThe current [event](https://developer.mozilla.org/en-US/docs/DOM/event), if any. This is set during the invocation of an event listener, and is reset after the listener terminates. Use this to access standard event fields such as [*event*.timeStamp](https://www.w3.org/TR/dom/#dom-event-timestamp) and methods such as [*event*.preventDefault](https://www.w3.org/TR/dom/#dom-event-preventdefault). While you can use the native [*event*.pageX](https://developer.mozilla.org/en/DOM/event.pageX) and [*event*.pageY](https://developer.mozilla.org/en/DOM/event.pageY), it is often more convenient to transform the event position to the local coordinate system of the container that received the event using [d3.mouse](#mouse), [d3.touch](#touch) or [d3.touches](#touches).\n\nIf you use Babel, Webpack, or another ES6-to-ES5 bundler, be aware that the value of d3.event changes during an event! An import of d3.event must be a [live binding](http://www.2ality.com/2015/07/es6-module-exports.html), so you may need to configure the bundler to import from D3’s ES6 modules rather than from the generated UMD bundle; not all bundlers observe [jsnext:main](https://github.com/rollup/rollup/wiki/jsnext:main). Also beware of conflicts with the [*window*.event](https://developer.mozilla.org/en-US/docs/Web/API/Window/event) global.\n\n# d3.customEvent(event, listener[, that[, arguments]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js#L98 \"Source\")\n\nInvokes the specified *listener*, using the specified *that* `this` context and passing the specified *arguments*, if any. During the invocation, [d3.event](#event) is set to the specified *event*; after the listener returns (or throws an error), d3.event is restored to its previous value. In addition, sets *event*.sourceEvent to the prior value of d3.event, allowing custom events to retain a reference to the originating native event. Returns the value returned by the *listener*.\n\n# d3.mouse(container) [<>](https://github.com/d3/d3-selection/blob/master/src/mouse.js \"Source\")\n\nReturns the *x* and *y* coordinates of the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n# d3.touch(container[, touches], identifier) [<>](https://github.com/d3/d3-selection/blob/master/src/touch.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touch with the specified *identifier* associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*]. If there is no touch with the specified identifier in *touches*, returns null; this can be useful for ignoring touchmove events where the only some touches have moved. If *touches* is not specified, it defaults to the current event’s [changedTouches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/changedTouches) property.\n\n# d3.touches(container[, touches]) [<>](https://github.com/d3/d3-selection/blob/master/src/touches.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touches associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as an array of two-element arrays of numbers \\[\\[*x1*, *y1*], [*x2*, *y2*], …\\]. If *touches* is not specified, it defaults to the current event’s [touches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/touches) property.\n\n# d3.clientPoint(container, event) [<>](https://github.com/d3/d3-selection/blob/master/src/point.js \"Source\")\n\nReturns the *x* and *y* coordinates of the specified *event* relative to the specified *container*. (The *event* may also be a [touch](https://www.w3.org/TR/touch-events/#touch-interface).) The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n### Control Flow\n\nFor advanced usage, selections provide methods for custom control flow.\n\n# selection.each(function) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/each.js \"Source\")\n\nInvokes the specified *function* 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 (*nodes*[*i*]). 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, such as:\n\n```js\nparent.each(function(p, j) {\n d3.select(this)\n .selectAll(\".child\")\n .text(d => `child ${d.name} of ${p.name}`);\n});\n```\n\nSee [Sized Donut Multiples](http://bl.ocks.org/mbostock/4c5fad723c87d2fd8273) for an example.\n\n# selection.call(function[, arguments…]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/call.js \"Source\")\n\nInvokes the specified *function* exactly once, passing in this selection along with any optional *arguments*. Returns this selection. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several styles in a reusable function:\n\n```js\nfunction name(selection, first, last) {\n selection\n .attr(\"first-name\", first)\n .attr(\"last-name\", last);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").call(name, \"John\", \"Snow\");\n```\n\nThis is roughly equivalent to:\n\n```js\nname(d3.selectAll(\"div\"), \"John\", \"Snow\");\n```\n\nThe only difference is that *selection*.call always returns the *selection* and not the return value of the called *function*, `name`.\n\n# selection.empty() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js \"Source\")\n\nReturns true if this selection contains no (non-null) elements.\n\n# selection.nodes() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js \"Source\")\n\nReturns an array of all (non-null) elements in this selection.\n\n# selection.node() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/node.js \"Source\")\n\nReturns the first (non-null) element in this selection. If the selection is empty, returns null.\n\n# selection.size() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/size.js \"Source\")\n\nReturns the total number of elements in this selection.\n\n### Local Variables\n\nD3 locals allow you to define local state independent of data. For instance, when rendering [small multiples](http://bl.ocks.org/mbostock/e1192fe405703d8321a5187350910e08) of time-series data, you might want the same *x*-scale for all charts but distinct *y*-scales to compare the relative performance of each metric. D3 locals are scoped by DOM elements: on set, the value is stored on the given element; on get, the value is retrieved from given element or the nearest ancestor that defines it.\n\n# d3.local() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js \"Source\")\n\nDeclares a new local variable. For example:\n\n```js\nconst foo = d3.local();\n```\n\nLike `var`, each local is a distinct symbolic reference; unlike `var`, the value of each local is also scoped by the DOM.\n\n# local.set(node, value) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L18 \"Source\")\n\nSets the value of this local on the specified *node* to the *value*, and returns the specified *value*. This is often performed using [*selection*.each](#selection_each):\n\n```js\nselection.each(function(d) { foo.set(this, d.value); });\n```\n\nIf you are just setting a single variable, consider using [*selection*.property](#selection_property):\n\n```js\nselection.property(foo, d => d.value);\n```\n\n# local.get(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L13 \"Source\")\n\nReturns the value of this local on the specified *node*. If the *node* does not define this local, returns the value from the nearest ancestor that defines it. Returns undefined if no ancestor defines this local.\n\n# local.remove(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L21 \"Source\")\n\nDeletes this local’s value from the specified *node*. Returns true if the *node* defined this local prior to removal, and false otherwise. If ancestors also define this local, those definitions are unaffected, and thus [*local*.get](#local_get) will still return the inherited value.\n\n# local.toString() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L24 \"Source\")\n\nReturns the automatically-generated identifier for this local. This is the name of the property that is used to store the local’s value on elements, and thus you can also set or get the local’s value using *element*[*local*] or by using [*selection*.property](#selection_property).\n\n### Namespaces\n\nXML namespaces are fun! Right? Fortunately you can mostly ignore them.\n\n# d3.namespace(name) [<>](https://github.com/d3/d3-selection/blob/master/src/namespace.js \"Source\")\n\nQualifies the specified *name*, which may or may not have a namespace prefix. If the name contains a colon (`:`), the substring before the colon is interpreted as the namespace prefix, which must be registered in [d3.namespaces](#namespaces). Returns an object `space` and `local` attributes describing the full namespace URL and the local name. For example:\n\n```js\nd3.namespace(\"svg:text\"); // {space: \"http://www.w3.org/2000/svg\", local: \"text\"}\n```\n\nIf the name does not contain a colon, this function merely returns the input name.\n\n# d3.namespaces [<>](https://github.com/d3/d3-selection/blob/master/src/namespaces.js \"Source\")\n\nThe map of registered namespace prefixes. The initial value is:\n\n```js\n{\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: \"http://www.w3.org/1999/xhtml\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n}\n```\n\nAdditional prefixes may be assigned as needed to create elements or attributes in other namespaces.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-selection", "error": "[Circular]", "extraneous": false, "_deduped": "d3-selection" }, "d3-timer": { "_from": "d3-timer@1", "_id": "d3-timer@1.0.10", "_inBundle": false, "_integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", "_location": "/d3-timer", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", "_shasum": "dfe76b8a91748831b13b6d9c793ffbd508dd9de5", "_spec": "d3-timer@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "An efficient queue capable of managing thousands of concurrent animations.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-timer/", "jsdelivr": "dist/d3-timer.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-timer.js", "module": "src/index.js", "name": "d3-timer", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-timer.min.js", "version": "1.0.10", "readme": "# d3-timer\n\nThis module provides an efficient queue capable of managing thousands of concurrent animations, while guaranteeing consistent, synchronized timing with concurrent or staged animations. Internally, it uses [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) for fluid animation (if available), switching to [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) for delays longer than 24ms.\n\n## Installing\n\nIf you use NPM, `npm install d3-timer`. Otherwise, download the [latest release](https://github.com/d3/d3-timer/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-timer.v1.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\n\n```\n\n## API Reference\n\n# d3.now() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L15 \"Source\")\n\nReturns the current time as defined by [performance.now](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) if available, and [Date.now](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now) if not. The current time is updated at the start of a frame; it is thus consistent during the frame, and any timers scheduled during the same frame will be synchronized. If this method is called outside of a frame, such as in response to a user event, the current time is calculated and then fixed until the next frame, again ensuring consistent timing during event handling.\n\n# d3.timer(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L52 \"Source\")\n\nSchedules a new timer, invoking the specified *callback* repeatedly until the timer is [stopped](#timer_stop). An optional numeric *delay* in milliseconds may be specified to invoke the given *callback* after a delay; if *delay* is not specified, it defaults to zero. The delay is relative to the specified *time* in milliseconds; if *time* is not specified, it defaults to [now](#now).\n\nThe *callback* is passed the (apparent) *elapsed* time since the timer became active. For example:\n\n```js\nvar t = d3.timer(function(elapsed) {\n console.log(elapsed);\n if (elapsed > 200) t.stop();\n}, 150);\n```\n\nThis produces roughly the following console output:\n\n```\n3\n25\n48\n65\n85\n106\n125\n146\n167\n189\n209\n```\n\n(The exact values may vary depending on your JavaScript runtime and what else your computer is doing.) Note that the first *elapsed* time is 3ms: this is the elapsed time since the timer started, not since the timer was scheduled. Here the timer started 150ms after it was scheduled due to the specified delay. The apparent *elapsed* time may be less than the true *elapsed* time if the page is backgrounded and [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) is paused; in the background, apparent time is frozen.\n\nIf [timer](#timer) is called within the callback of another timer, the new timer callback (if eligible as determined by the specified *delay* and *time*) will be invoked immediately at the end of the current frame, rather than waiting until the next frame. Within a frame, timer callbacks are guaranteed to be invoked in the order they were scheduled, regardless of their start time.\n\n# timer.restart(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L31 \"Source\")\n\nRestart a timer with the specified *callback* and optional *delay* and *time*. This is equivalent to stopping this timer and creating a new timer with the specified arguments, although this timer retains the original invocation priority.\n\n# timer.stop() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L43 \"Source\")\n\nStops this timer, preventing subsequent callbacks. This method has no effect if the timer has already stopped.\n\n# d3.timerFlush() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js#L58 \"Source\")\n\nImmediately invoke any eligible timer callbacks. Note that zero-delay timers are normally first executed after one frame (~17ms). This can cause a brief flicker because the browser renders the page twice: once at the end of the first event loop, then again immediately on the first timer callback. By flushing the timer queue at the end of the first event loop, you can run any zero-delay timers immediately and avoid the flicker.\n\n# d3.timeout(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timeout.js \"Source\")\n\nLike [timer](#timer), except the timer automatically [stops](#timer_stop) on its first callback. A suitable replacement for [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) that is guaranteed to not run in the background. The *callback* is passed the elapsed time.\n\n# d3.interval(callback[, delay[, time]]) [<>](https://github.com/d3/d3-timer/blob/master/src/interval.js \"Source\")\n\nLike [timer](#timer), except the *callback* is invoked only every *delay* milliseconds; if *delay* is not specified, this is equivalent to [timer](#timer). A suitable replacement for [setInterval](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval) that is guaranteed to not run in the background. The *callback* is passed the elapsed time.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-timer", "error": "[Circular]", "extraneous": false, "_deduped": "d3-timer" } }, "deprecated": false, "description": "Animated transitions for D3 selections.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-transition/", "jsdelivr": "dist/d3-transition.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-transition.js", "module": "src/index.js", "name": "d3-transition", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": true, "unpkg": "dist/d3-transition.min.js", "version": "1.3.2", "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.v1.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\n\n\n\n\n\n\n\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# selection.transition([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js \"Source\")\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# selection.interrupt([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js \"Source\")\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# d3.interrupt(node[, name]) [<>](https://github.com/d3/d3-transition/blob/master/src/interrupt.js \"Source\")\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# d3.transition([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29 \"Source\")\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# transition.select(selector) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/select.js \"Source\")\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` and index `i`, with the `this` context 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# transition.selectAll(selector) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js \"Source\")\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` and index `i`, with the `this` context 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# transition.filter(filter) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js \"Source\")\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` and index `i`, with the `this` context 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# transition.merge(other) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js \"Source\")\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# transition.transition() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js \"Source\")\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# transition.selection() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js \"Source\")\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n# d3.active(node[, name]) [<>](https://github.com/d3/d3-transition/blob/master/src/active.js \"Source\")\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](http://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# transition.attr(name, value) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js \"Source\")\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` and index `i`, with the `this` context 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# transition.attrTween(name[, factory]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js \"Source\")\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` 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 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](http://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# transition.style(name, value[, priority]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/style.js \"Source\")\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` and index `i`, with the `this` context 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# transition.styleTween(name[, factory[, priority]])) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js \"Source\")\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` 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 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# transition.text(value) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/text.js \"Source\")\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` and index `i`, with the `this` context 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) ([for example](http://bl.ocks.org/mbostock/7004f92cac972edef365)) or append a replacement element and cross-fade opacity ([for example](http://bl.ocks.org/mbostock/f7dcecb19c4af317e464)). Text is not interpolated by default because it is usually undesirable.\n\n# transition.textTween(factory) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js \"Source\")\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# transition.remove() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js \"Source\")\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# transition.tween(name[, value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js \"Source\")\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` and index `i`, with the `this` context 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](http://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](http://bl.ocks.org/mbostock/3885705) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n# transition.delay([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js \"Source\")\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` and index `i`, with the `this` context 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# transition.duration([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js \"Source\")\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` and index `i`, with the `this` context 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# transition.ease([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js \"Source\")\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### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n# transition.end() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/end.js \"Source\")\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# transition.on(typenames[, listener]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/on.js \"Source\")\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` and index `i`, with the `this` context 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# transition.each(function) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/each.js \"Source\")\n\nInvokes the specified *function* for each selected element, passing in the current datum `d` and index `i`, with the `this` context of 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# transition.call(function[, arguments…]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/call.js \"Source\")\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# transition.empty() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js \"Source\")\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# transition.nodes() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js \"Source\")\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# transition.node() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/node.js \"Source\")\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# transition.size() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/size.js \"Source\")\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", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-transition", "error": "[Circular]", "extraneous": false }, "d3-voronoi": { "_from": "d3-voronoi@1", "_id": "d3-voronoi@1.1.4", "_inBundle": false, "_integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", "_location": "/d3-voronoi", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-voronoi@1", "name": "d3-voronoi", "escapedName": "d3-voronoi", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", "_shasum": "dd3c78d7653d2bb359284ae478645d95944c8297", "_spec": "d3-voronoi@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-voronoi/issues" }, "deprecated": false, "description": "Compute the Voronoi diagram of a set of two-dimensional points.", "devDependencies": { "eslint": "5", "rollup": "0.64", "rollup-plugin-terser": "1", "tape": "4" }, "homepage": "https://d3js.org/d3-voronoi/", "jsdelivr": "dist/d3-voronoi.min.js", "keywords": [ "d3", "d3-module", "voronoi", "delaunay" ], "license": "BSD-3-Clause", "main": "dist/d3-voronoi.js", "module": "src/index.js", "name": "d3-voronoi", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-voronoi.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "unpkg": "dist/d3-voronoi.min.js", "version": "1.1.4", "readme": "# d3-voronoi\n\n**Deprecation notice**: Consider using the newer [d3-delaunay](https://github.com/d3/d3-delaunay) instead of d3-voronoi. Based on [Delaunator](https://github.com/mapbox/delaunator), d3-delaunay is 5-10× faster than d3-voronoi to construct the Delaunay triangulation or the Voronoi diagram, is more robust numerically, has Canvas rendering built-in, allows traversal of the Delaunay graph, and a variety of other improvements.\n\n---\n\nThis module implements [Steven J. Fortune’s algorithm](https://en.wikipedia.org/wiki/Fortune's_algorithm) for computing the [Voronoi diagram](https://en.wikipedia.org/wiki/Voronoi_diagram) or [Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation) of a set of two-dimensional points. This implementation is largely based on [work by Raymond Hill](http://www.raymondhill.net/voronoi/rhill-voronoi.html).\n\nVoronoi diagrams are not only [visually](http://bl.ocks.org/mbostock/4360892) [attractive](http://bl.ocks.org/mbostock/4636377) but practical tools for interaction, such as to increase the target area of points in a scatterplot. See [“Strikeouts on the Rise”](http://www.nytimes.com/interactive/2013/03/29/sports/baseball/Strikeouts-Are-Still-Soaring.html) in *The New York Times* and this [multi-line chart](http://bl.ocks.org/mbostock/8033015) for examples; also see Tovi Grossman’s paper on [bubble cursors](http://www.tovigrossman.com/BubbleCursor) for a related technique. Voronoi diagrams can also be used to [automate label positioning](http://bl.ocks.org/mbostock/6909318), and Delaunay meshes are useful in computing adjacency or grouping of visual elements.\n\n\n\n\n\n\n\n\n\n\n\n\n## Installing\n\nIf you use NPM, `npm install d3-voronoi`. Otherwise, download the [latest release](https://github.com/d3/d3-voronoi/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-voronoi.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-voronoi in your browser.](https://tonicdev.com/npm/d3-voronoi)\n\n## API Reference\n\n# d3.voronoi() [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js \"Source\")\n\nCreates a new Voronoi layout with default [*x*-](#voronoi_x) and [*y*-](#voronoi_y) accessors and a null [extent](#voronoi_extent).\n\n# voronoi(data) [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L10 \"Source\")\n\nComputes the [Voronoi diagram](#voronoi-diagrams) for the specified *data* points.\n\n# voronoi.x([x]) [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L31 \"Source\")\n\nIf *x* is specified, sets the *x*-coordinate accessor. If *x* is not specified, returns the current *x*-coordinate accessor, which defaults to:\n\n```js\nfunction x(d) {\n return d[0];\n}\n```\n\n# voronoi.y([y]) [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L35 \"Source\")\n\nIf *y* is specified, sets the *y*-coordinate accessor. If *y* is not specified, returns the current *y*-coordinate accessor, which defaults to:\n\n```js\nfunction y(d) {\n return d[1];\n}\n```\n\n# voronoi.extent([extent]) [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L39 \"Source\")\n\nIf *extent* is specified, sets the clip extent of the Voronoi layout to the specified bounds and returns the layout. The *extent* bounds are specified as an array \\[\\[x0, y0\\], \\[x1, y1\\]\\], where x0 is the left side of the extent, y0 is the top, x1 is the right and y1 is the bottom. If *extent* is not specified, returns the current clip extent which defaults to null. A clip extent is required when using [*voronoi*.polygons](#voronoi_polygons).\n\n# voronoi.size([size]) [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L43 \"Source\")\n\nAn alias for [*voronoi*.extent](#voronoi_extent) where the minimum *x* and *y* of the extent are ⟨0,0⟩. Equivalent to:\n\n```js\nvoronoi.extent([[0, 0], size]);\n```\n\n# voronoi.polygons(data) [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L19 \"Source\")\n\nReturns a sparse array of polygons, one for each unique input point in the specified *data* points, corresponding to the cells in the computed Voronoi diagram. Equivalent to:\n\n```js\nvoronoi(data).polygons();\n```\n\nSee [*diagram*.polygons](#diagram_polygons) for more detail. Note: an [extent](#voronoi_extent) is required.\n\n# voronoi.triangles(data) [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L27 \"Source\")\n\nReturns the Delaunay triangulation of the specified *data* array as an array of triangles. Each triangle is a three-element array of elements from *data*. Equivalent to:\n\n```js\nvoronoi(data).triangles();\n```\n\nSee [*diagram*.triangles](#diagram_triangles) for more detail.\n\n# voronoi.links(data) [<>](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L23 \"Source\")\n\nReturns the Delaunay triangulation of the specified *data* array as an array of links. Each link has `source` and `target` attributes referring to elements in *data*. Equivalent to:\n\n```js\nvoronoi(data).links();\n```\n\nSee [*diagram*.links](#diagram_links) for more detail.\n\n### Voronoi Diagrams\n\n# diagram [<>](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js \"Source\")\n\nThe computed Voronoi diagram returned by [*voronoi*](#_voronoi) has the following properties:\n\n* `edges` - an array of [edges](#diagram_edge).\n* `cells` - a sparse array of [cells](#diagram_cell), one for each unique input point.\n\nFor each set of coincident input points, one of the points is chosen arbitrarily and assigned the associated cell; the other coincident input points’ entries are missing from the returned sparse array.\n\n# diagram.polygons() [<>](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L72 \"Source\")\n\nReturns a sparse array of polygons clipped to the [*extent*](#voronoi_extent), one for each cell (each unique input point) in the diagram. Each polygon is represented as an array of points \\[*x*, *y*\\] where *x* and *y* are the point coordinates, and a `data` field that refers to the corresponding element in *data*. Polygons are open: they do not contain a closing point that duplicates the first point; a triangle, for example, is an array of three points. Polygons are also counterclockwise, assuming the origin ⟨0,0⟩ is in the top-left corner.\n\nFor each set of coincident input points, one of the points is chosen arbitrarily and assigned the associated polygon; the other coincident input points’ entries are missing from the returned sparse array.\n\n# diagram.triangles() [<>](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L82 \"Source\")\n\nReturns the Delaunay triangulation of the specified *data* array as an array of triangles. Each triangle is a three-element array of elements from *data*. Since the triangulation is computed as the dual of the Voronoi diagram, and the Voronoi diagram is clipped by the [extent](#voronoi_extent), a subset of the Delaunay triangulation is returned.\n\n# diagram.links() [<>](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L108 \"Source\")\n\nReturns the Delaunay triangulation of the specified *data* array as an array of links, one for each edge in the mesh. Each link has the following attributes:\n\n* `source` - the source node, an element in *data*.\n* `target` - the target node, an element in *data*.\n\nSince the triangulation is computed as the dual of the Voronoi diagram, and the Voronoi diagram is clipped by the [extent](#voronoi_extent), a subset of the Delaunay links is returned.\n\n# diagram.find(x, y[, radius]) [<>](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L119 \"Source\")\n\nReturns the nearest site to point \\[*x*, *y*\\]. If *radius* is specified, only sites within *radius* distance are considered.\n\nSee Philippe Rivière’s [bl.ocks.org/1b7ddbcd71454d685d1259781968aefc](http://bl.ocks.org/Fil/1b7ddbcd71454d685d1259781968aefc) for an example.\n\n# cell\n\nEach cell in the diagram is an object with the following properties:\n\n* `site` - the [site](#site) of the cell’s associated input point.\n* `halfedges` - an array of indexes into [*diagram*.edges](#diagram) representing the cell’s polygon.\n\n# site\n\nEach site in the diagram is an array \\[*x*, *y*\\] with two additional properties:\n\n* `index` - the site’s index, corresponding to the associated input point.\n* `data` - the input data corresponding to this site.\n\n# edge\n\nEach edge in the diagram is an array \\[\\[*x0*, *y0*\\], \\[*x1*, *y1*\\]\\] with two additional properties:\n\n* `left` - the [site](#site) on the left side of the edge.\n* `right` - the [site](#site) on the right side of the edge; null for a clipped border edge.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-voronoi", "error": "[Circular]", "extraneous": false }, "d3-zoom": { "_from": "d3-zoom@1", "_id": "d3-zoom@1.8.3", "_inBundle": false, "_integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", "_location": "/d3-zoom", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "d3-zoom@1", "name": "d3-zoom", "escapedName": "d3-zoom", "rawSpec": "1", "saveSpec": "[Circular]", "fetchSpec": "1" }, "_requiredBy": [ "/d3" ], "_resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", "_shasum": "b6a3dbe738c7763121cd05b8a7795ffe17f4fc0a", "_spec": "d3-zoom@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": { "name": "Mike Bostock", "url": "http://bost.ocks.org/mike" }, "bugs": { "url": "https://github.com/d3/d3-zoom/issues" }, "dependencies": { "d3-dispatch": { "_from": "d3-dispatch@1", "_id": "d3-dispatch@1.0.6", "_inBundle": false, "_integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", "_location": "/d3-dispatch", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", "_shasum": "00d37bcee4dd8cd97729dd893a0ac29caaba5d58", "_spec": "d3-dispatch@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Register named callbacks and call them with arguments.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-dispatch/", "jsdelivr": "dist/d3-dispatch.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-dispatch.js", "module": "src/index.js", "name": "d3-dispatch", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-dispatch.min.js", "version": "1.0.6", "readme": "# d3-dispatch\n\nDispatching is a convenient mechanism for separating concerns with loosely-coupled code: register named callbacks and then call them with arbitrary arguments. A variety of D3 components, such as [d3-request](https://github.com/d3/d3-request), use this mechanism to emit events to listeners. Think of this like Node’s [EventEmitter](https://nodejs.org/api/events.html), except every listener has a well-defined name so it’s easy to remove or replace them.\n\nFor example, to create a dispatch for *start* and *end* events:\n\n```js\nvar dispatch = d3.dispatch(\"start\", \"end\");\n```\n\nYou can then register callbacks for these events using [*dispatch*.on](#dispatch_on):\n\n```js\ndispatch.on(\"start\", callback1);\ndispatch.on(\"start.foo\", callback2);\ndispatch.on(\"end\", callback3);\n```\n\nThen, you can invoke all the *start* callbacks using [*dispatch*.call](#dispatch_call) or [*dispatch*.apply](#dispatch_apply):\n\n```js\ndispatch.call(\"start\");\n```\n\nLike *function*.call, you may also specify the `this` context and any arguments:\n\n```js\ndispatch.call(\"start\", {about: \"I am a context object\"}, \"I am an argument\");\n```\n\nWant a more involved example? See how to use [d3-dispatch for coordinated views](http://bl.ocks.org/mbostock/5872848).\n\n## Installing\n\nIf you use NPM, `npm install d3-dispatch`. Otherwise, download the [latest release](https://github.com/d3/d3-dispatch/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-dispatch.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n```\n\n[Try d3-dispatch in your browser.](https://tonicdev.com/npm/d3-dispatch)\n\n## API Reference\n\n# d3.dispatch(types…) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js \"Source\")\n\nCreates a new dispatch for the specified event *types*. Each *type* is a string, such as `\"start\"` or `\"end\"`.\n\n# *dispatch*.on(typenames[, callback]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L26 \"Source\")\n\nAdds, removes or gets the *callback* for the specified *typenames*. If a *callback* function is specified, it is registered for the specified (fully-qualified) *typenames*. If a callback was already registered for the given *typenames*, the existing callback is removed before the new callback is added.\n\nThe specified *typenames* is a string, such as `start` or `end.foo`. The 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 `start end` or `start.foo start.bar`.\n\nTo remove all callbacks for a given name `foo`, say `dispatch.on(\".foo\", null)`.\n\nIf *callback* is not specified, returns the current callback for the specified *typenames*, if any. If multiple typenames are specified, the first matching callback is returned.\n\n# *dispatch*.copy() [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L49 \"Source\")\n\nReturns a copy of this dispatch object. Changes to this dispatch do not affect the returned copy and vice versa.\n\n# *dispatch*.call(type[, that[, arguments…]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L54 \"Source\")\n\nLike [*function*.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. See [*dispatch*.apply](#dispatch_apply) for more information.\n\n# *dispatch*.apply(type[, that[, arguments]]) [<>](https://github.com/d3/d3-dispatch/blob/master/src/dispatch.js#L59 \"Source\")\n\nLike [*function*.apply](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), invokes each registered callback for the specified *type*, passing the callback the specified *arguments*, with *that* as the `this` context. For example, if you wanted to dispatch your *custom* callbacks after handling a native *click* event, while preserving the current `this` context and arguments, you could say:\n\n```js\nselection.on(\"click\", function() {\n dispatch.apply(\"custom\", this, arguments);\n});\n```\n\nYou can pass whatever arguments you want to callbacks; most commonly, you might create an object that represents an event, or pass the current datum (*d*) and index (*i*). See [function.call](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call) and [function.apply](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Apply) for further information.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-dispatch", "error": "[Circular]", "extraneous": false, "_deduped": "d3-dispatch" }, "d3-drag": { "_from": "d3-drag@1", "_id": "d3-drag@1.2.5", "_inBundle": false, "_integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", "_location": "/d3-drag", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", "_shasum": "2537f451acd39d31406677b7dc77c82f7d988f70", "_spec": "d3-drag@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Drag and drop SVG, HTML or Canvas using mouse or touch input.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-drag/", "jsdelivr": "dist/d3-drag.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-drag.js", "module": "src/index.js", "name": "d3-drag", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-drag.min.js", "version": "1.2.5", "readme": "# d3-drag\n\n[Drag-and-drop](https://en.wikipedia.org/wiki/Drag_and_drop) is a popular and easy-to-learn pointing gesture: move the pointer to an object, press and hold to grab it, “drag” the object to a new location, and release to “drop”. D3’s [drag behavior](#api-reference) provides a convenient but flexible abstraction for enabling drag-and-drop interaction on [selections](https://github.com/d3/d3-selection). For example, you can use d3-drag to facilitate interaction with a [force-directed graph](https://github.com/d3/d3-force), or a simulation of colliding circles:\n\n[\"Force](http://bl.ocks.org/mbostock/ad70335eeef6d167bc36fd3c04378048)[\"Force](http://bl.ocks.org/mbostock/2990a882e007f8384b04827617752738)\n\nYou can also use d3-drag to implement custom user interface elements, such as a slider. But the drag behavior isn’t just for moving elements around; there are a variety of ways to respond to a drag gesture. For example, you can use it to lasso elements in a scatterplot, or to paint lines on a canvas:\n\n[\"Line](http://bl.ocks.org/mbostock/f705fc55e6f26df29354)\n\nThe drag behavior can be combined with other behaviors, such as [d3-zoom](https://github.com/d3/d3-zoom) for zooming.\n\n[\"Drag](http://bl.ocks.org/mbostock/3127661b6f13f9316be745e77fdfb084)\n\nThe drag behavior is agnostic about the DOM, so you can use it with SVG, HTML or even Canvas! And you can extend it with advanced selection techniques, such as a Voronoi overlay or a closest-target search:\n\n[\"Circle](http://bl.ocks.org/mbostock/ec10387f24c1fad2acac3bc11eb218a5)[\"Circle](http://bl.ocks.org/mbostock/c206c20294258c18832ff80d8fd395c3)\n\nBest of all, the drag behavior automatically unifies mouse and touch input, and avoids browser idiosyncrasies. When [Pointer Events](https://www.w3.org/TR/pointerevents/) are more widely available, the drag behavior will support those, too.\n\n## Installing\n\nIf you use NPM, `npm install d3-drag`. Otherwise, download the [latest release](https://github.com/d3/d3-drag/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-drag.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n\n\n```\n\n[Try d3-drag in your browser.](https://tonicdev.com/npm/d3-drag)\n\n## API Reference\n\nThis table describes how the drag behavior interprets native events:\n\n| Event | Listening Element | Drag Event | Default Prevented? |\n| ------------ | ----------------- | ---------- | ------------------ |\n| mousedown⁵ | selection | start | no¹ |\n| mousemove² | window¹ | drag | yes |\n| mouseup² | window¹ | end | yes |\n| dragstart² | window | - | yes |\n| selectstart² | window | - | yes |\n| click³ | window | - | yes |\n| touchstart | selection | start | no⁴ |\n| touchmove | selection | drag | yes |\n| touchend | selection | end | no⁴ |\n| touchcancel | selection | end | no⁴ |\n\nThe propagation of all consumed events is [immediately stopped](https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation). If you want to prevent some events from initiating a drag gesture, use [*drag*.filter](#drag_filter).\n\n¹ Necessary to capture events outside an iframe; see [#9](https://github.com/d3/d3-drag/issues/9).\n
² Only applies during an active, mouse-based gesture; see [#9](https://github.com/d3/d3-drag/issues/9).\n
³ Only applies immediately after some mouse-based gestures; see [*drag*.clickDistance](#drag_clickDistance).\n
⁴ Necessary to allow [click emulation](https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7) on touch input; see [#9](https://github.com/d3/d3-drag/issues/9).\n
⁵ Ignored if within 500ms of a touch gesture ending; assumes [click emulation](https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7).\n\n# d3.drag() [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js \"Source\")\n\nCreates a new drag behavior. The returned behavior, [*drag*](#_drag), is both an object and a function, and is typically applied to selected elements via [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n# drag(selection) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L39 \"Source\")\n\nApplies this drag behavior to the specified [*selection*](https://github.com/d3/d3-selection). This function is typically not invoked directly, and is instead invoked via [*selection*.call](https://github.com/d3/d3-selection#selection_call). For example, to instantiate a drag behavior and apply it to a selection:\n\n```js\nd3.selectAll(\".node\").call(d3.drag().on(\"start\", started));\n```\n\nInternally, the drag behavior uses [*selection*.on](https://github.com/d3/d3-selection#selection_on) to bind the necessary event listeners for dragging. The listeners use the name `.drag`, so you can subsequently unbind the drag behavior as follows:\n\n```js\nselection.on(\".drag\", null);\n```\n\nApplying the drag behavior also sets the [-webkit-tap-highlight-color](https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/AdjustingtheTextSize/AdjustingtheTextSize.html#//apple_ref/doc/uid/TP40006510-SW5) style to transparent, disabling the tap highlight on iOS. If you want a different tap highlight color, remove or re-apply this style after applying the drag behavior.\n\n# drag.container([container]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L145 \"Source\")\n\nIf *container* is specified, sets the container accessor to the specified object or function and returns the drag behavior. If *container* is not specified, returns the current container accessor, which defaults to:\n\n```js\nfunction container() {\n return this.parentNode;\n}\n```\n\nThe *container* of a drag gesture determines the coordinate system of subsequent [drag events](#drag-events), affecting *event*.x and *event*.y. The element returned by the container accessor is subsequently passed to [d3.mouse](https://github.com/d3/d3-selection#mouse) or [d3.touch](https://github.com/d3/d3-selection#touch), as appropriate, to determine the local coordinates of the pointer.\n\nThe default container accessor returns the parent node of the element in the originating selection (see [*drag*](#_drag)) that received the initiating input event. This is often appropriate when dragging SVG or HTML elements, since those elements are typically positioned relative to a parent. For dragging graphical elements with a Canvas, however, you may want to redefine the container as the initiating element itself:\n\n```js\nfunction container() {\n return this;\n}\n```\n\nAlternatively, the container may be specified as the element directly, such as `drag.container(canvas)`.\n\n# drag.filter([filter]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L141 \"Source\")\n\nIf *filter* is specified, sets the filter to the specified function and returns the drag behavior. If *filter* is not specified, returns the current filter, which defaults to:\n\n```js\nfunction filter() {\n return !d3.event.ctrlKey && !d3.event.button;\n}\n```\n\nIf the filter returns falsey, the initiating event is ignored and no drag gestures are started. Thus, the filter determines which input events are ignored; the default filter ignores mousedown events on secondary buttons, since those buttons are typically intended for other purposes, such as the context menu.\n\n# drag.touchable([touchable]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L153 \"Source\")\n\nIf *touchable* is specified, sets the touch support detector to the specified function and returns the drag behavior. If *touchable* is not specified, returns the current touch support detector, which defaults to:\n\n```js\nfunction touchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n```\n\nTouch event listeners are only registered if the detector returns truthy for the corresponding element when the drag behavior is [applied](#_drag). The default detector works well for most browsers that are capable of touch input, but not all; Chrome’s mobile device emulator, for example, fails detection.\n\n# drag.subject([subject]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L149 \"Source\")\n\nIf *subject* is specified, sets the subject accessor to the specified object or function and returns the drag behavior. If *subject* is not specified, returns the current subject accessor, which defaults to:\n\n```js\nfunction subject(d) {\n return d == null ? {x: d3.event.x, y: d3.event.y} : d;\n}\n```\n\nThe *subject* of a drag gesture represents *the thing being dragged*. It is computed when an initiating input event is received, such as a mousedown or touchstart, immediately before the drag gesture starts. The subject is then exposed as *event*.subject on subsequent [drag events](#drag-events) for this gesture.\n\nThe default subject is the [datum](https://github.com/d3/d3-selection#selection_datum) of the element in the originating selection (see [*drag*](#_drag)) that received the initiating input event; if this datum is undefined, an object representing the coordinates of the pointer is created. When dragging circle elements in SVG, the default subject is thus the datum of the circle being dragged. With [Canvas](https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element), the default subject is the canvas element’s datum (regardless of where on the canvas you click). In this case, a custom subject accessor would be more appropriate, such as one that picks the closest circle to the mouse within a given search *radius*:\n\n```js\nfunction subject() {\n var n = circles.length,\n i,\n dx,\n dy,\n d2,\n s2 = radius * radius,\n circle,\n subject;\n\n for (i = 0; i < n; ++i) {\n circle = circles[i];\n dx = d3.event.x - circle.x;\n dy = d3.event.y - circle.y;\n d2 = dx * dx + dy * dy;\n if (d2 < s2) subject = circle, s2 = d2;\n }\n\n return subject;\n}\n```\n\n(If necessary, the above can be accelerated using [*quadtree*.find](https://github.com/d3/d3-quadtree#quadtree_find).)\n\nThe returned subject should be an object that exposes `x` and `y` properties, so that the relative position of the subject and the pointer can be preserved during the drag gesture. If the subject is null or undefined, no drag gesture is started for this pointer; however, other starting touches may yet start drag gestures. See also [*drag*.filter](#drag_filter).\n\nThe subject of a drag gesture may not be changed after the gesture starts. The subject accessor is invoked with the same context and arguments as [*selection*.on](https://github.com/d3/d3-selection#selection_on) listeners: the current datum `d` and index `i`, with the `this` context as the current DOM element. During the evaluation of the subject accessor, [d3.event](https://github.com/d3/d3-selection#event) is a beforestart [drag event](#drag-events). Use *event*.sourceEvent to access the initiating input event and *event*.identifier to access the touch identifier. The *event*.x and *event*.y are relative to the [container](#drag_container), and are computed using [d3.mouse](https://github.com/d3/d3-selection#mouse) or [d3.touch](https://github.com/d3/d3-selection#touch) as appropriate.\n\n# drag.clickDistance([distance]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L162 \"Source\")\n\nIf *distance* is specified, sets the maximum distance that the mouse can move between mousedown and mouseup that will trigger a subsequent click event. If at any point between mousedown and mouseup the mouse is greater than or equal to *distance* from its position on mousedown, the click event following mouseup will be suppressed. If *distance* is not specified, returns the current distance threshold, which defaults to zero. The distance threshold is measured in client coordinates ([*event*.clientX](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientX) and [*event*.clientY](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientY)).\n\n# drag.on(typenames, [listener]) [<>](https://github.com/d3/d3-drag/blob/master/src/drag.js#L157 \"Source\")\n\nIf *listener* is specified, sets the event *listener* for the specified *typenames* and returns the drag behavior. If an event listener was already registered for the same type and name, the existing listener is removed before the new listener is added. If *listener* is null, removes the current event listeners for the specified *typenames*, if any. If *listener* is not specified, returns the first currently-assigned listener matching the specified *typenames*, if any. When a specified event is dispatched, each *listener* will be invoked with the same context and arguments as [*selection*.on](https://github.com/d3/d3-selection#selection_on) listeners: the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\nThe *typenames* is a string containing one or more *typename* separated by whitespace. Each *typename* is a *type*, optionally followed by a period (`.`) and a *name*, such as `drag.foo` and `drag.bar`; the name allows multiple listeners to be registered for the same *type*. The *type* must be one of the following:\n\n* `start` - after a new pointer becomes active (on mousedown or touchstart).\n* `drag` - after an active pointer moves (on mousemove or touchmove).\n* `end` - after an active pointer becomes inactive (on mouseup, touchend or touchcancel).\n\nSee [*dispatch*.on](https://github.com/d3/d3-dispatch#dispatch_on) for more.\n\nChanges to registered listeners via *drag*.on during a drag gesture *do not affect* the current drag gesture. Instead, you must use [*event*.on](#event_on), which also allows you to register temporary event listeners for the current drag gesture. **Separate events are dispatched for each active pointer** during a drag gesture. For example, if simultaneously dragging multiple subjects with multiple fingers, a start event is dispatched for each finger, even if both fingers start touching simultaneously. See [Drag Events](#drag-events) for more.\n\n# d3.dragDisable(window) [<>](https://github.com/d3/d3-drag/blob/master/src/nodrag.js#L4 \"Source\")\n\nPrevents native drag-and-drop and text selection on the specified *window*. As an alternative to preventing the default action of mousedown events (see [#9](https://github.com/d3/d3-drag/issues/9)), this method prevents undesirable default actions following mousedown. In supported browsers, this means capturing dragstart and selectstart events, preventing the associated default actions, and immediately stopping their propagation. In browsers that do not support selection events, the user-select CSS property is set to none on the document element. This method is intended to be called on mousedown, followed by [d3.dragEnable](#dragEnable) on mouseup.\n\n# d3.dragEnable(window[, noclick]) [<>](https://github.com/d3/d3-drag/blob/master/src/nodrag.js#L15 \"Source\")\n\nAllows native drag-and-drop and text selection on the specified *window*; undoes the effect of [d3.dragDisable](#dragDisable). This method is intended to be called on mouseup, preceded by [d3.dragDisable](#dragDisable) on mousedown. If *noclick* is true, this method also temporarily suppresses click events. The suppression of click events expires after a zero-millisecond timeout, such that it only suppress the click event that would immediately follow the current mouseup event, if any.\n\n### Drag Events\n\nWhen a [drag event listener](#drag_on) is invoked, [d3.event](https://github.com/d3/d3-selection#event) is set to the current drag event. The *event* object exposes several fields:\n\n* `target` - the associated [drag behavior](#drag).\n* `type` - the string “start”, “drag” or “end”; see [*drag*.on](#drag_on).\n* `subject` - the drag subject, defined by [*drag*.subject](#drag_subject).\n* `x` - the new *x*-coordinate of the subject; see [*drag*.container](#drag_container).\n* `y` - the new *y*-coordinate of the subject; see [*drag*.container](#drag_container).\n* `dx` - the change in *x*-coordinate since the previous drag event.\n* `dy` - the change in *y*-coordinate since the previous drag event.\n* `identifier` - the string “mouse”, or a numeric [touch identifier](https://www.w3.org/TR/touch-events/#widl-Touch-identifier).\n* `active` - the number of currently active drag gestures (on start and end, not including this one).\n* `sourceEvent` - the underlying input event, such as mousemove or touchmove.\n\nThe *event*.active field is useful for detecting the first start event and the last end event in a sequence of concurrent drag gestures: it is zero when the first drag gesture starts, and zero when the last drag gesture ends.\n\nThe *event* object also exposes the [*event*.on](#event_on) method.\n\n# event.on(typenames, [listener]) [<>](https://github.com/d3/d3-drag/blob/master/src/event.js \"Source\")\n\nEquivalent to [*drag*.on](#drag_on), but only applies to the current drag gesture. Before the drag gesture starts, a [copy](https://github.com/d3/d3-dispatch#dispatch_copy) of the current drag [event listeners](#drag_on) is made. This copy is bound to the current drag gesture and modified by *event*.on. This is useful for temporary listeners that only receive events for the current drag gesture. For example, this start event listener registers temporary drag and end event listeners as closures:\n\n```js\nfunction started() {\n var circle = d3.select(this).classed(\"dragging\", true);\n\n d3.event.on(\"drag\", dragged).on(\"end\", ended);\n\n function dragged(d) {\n circle.raise().attr(\"cx\", d.x = d3.event.x).attr(\"cy\", d.y = d3.event.y);\n }\n\n function ended() {\n circle.classed(\"dragging\", false);\n }\n}\n```\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-drag", "error": "[Circular]", "extraneous": false, "_deduped": "d3-drag" }, "d3-interpolate": { "_from": "d3-interpolate@1", "_id": "d3-interpolate@1.4.0", "_inBundle": false, "_integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "_location": "/d3-interpolate", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", "_shasum": "526e79e2d80daa383f9e0c1c1c7dcc0f0583e987", "_spec": "d3-interpolate@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Interpolate numbers, colors, strings, arrays, objects, whatever!", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-interpolate/", "jsdelivr": "dist/d3-interpolate.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-interpolate.js", "module": "src/index.js", "name": "d3-interpolate", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-interpolate.min.js", "version": "1.4.0", "readme": "# d3-interpolate\n\nThis module provides a variety of interpolation methods for blending between two values. Values may be numbers, colors, strings, arrays, or even deeply-nested objects. For example:\n\n```js\nvar i = d3.interpolateNumber(10, 20);\ni(0.0); // 10\ni(0.2); // 12\ni(0.5); // 15\ni(1.0); // 20\n```\n\nThe returned function `i` is called an *interpolator*. Given a starting value *a* and an ending value *b*, it takes a parameter *t* in the domain [0, 1] and returns the corresponding interpolated value between *a* and *b*. An interpolator typically returns a value equivalent to *a* at *t* = 0 and a value equivalent to *b* at *t* = 1.\n\nYou can interpolate more than just numbers. To find the perceptual midpoint between steelblue and brown:\n\n```js\nd3.interpolateLab(\"steelblue\", \"brown\")(0.5); // \"rgb(142, 92, 109)\"\n```\n\nHere’s a more elaborate example demonstrating type inference used by [interpolate](#interpolate):\n\n```js\nvar i = d3.interpolate({colors: [\"red\", \"blue\"]}, {colors: [\"white\", \"black\"]});\ni(0.0); // {colors: [\"rgb(255, 0, 0)\", \"rgb(0, 0, 255)\"]}\ni(0.5); // {colors: [\"rgb(255, 128, 128)\", \"rgb(0, 0, 128)\"]}\ni(1.0); // {colors: [\"rgb(255, 255, 255)\", \"rgb(0, 0, 0)\"]}\n```\n\nNote that the generic value interpolator detects not only nested objects and arrays, but also color strings and numbers embedded in strings!\n\n## Installing\n\nIf you use NPM, `npm install d3-interpolate`. Otherwise, download the [latest release](https://github.com/d3/d3-interpolate/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-interpolate.v1.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\n\n\n```\n\n## API Reference\n\n# d3.interpolate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/value.js), [Examples](https://observablehq.com/@d3/d3-interpolate)\n\nReturns an interpolator between the two arbitrary values *a* and *b*. The interpolator implementation is based on the type of the end value *b*, using the following algorithm:\n\n1. If *b* is null, undefined or a boolean, use the constant *b*.\n2. If *b* is a number, use [interpolateNumber](#interpolateNumber).\n3. If *b* is a [color](https://github.com/d3/d3-color/blob/master/README.md#color) or a string coercible to a color, use [interpolateRgb](#interpolateRgb).\n4. If *b* is a [date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), use [interpolateDate](#interpolateDate).\n5. If *b* is a string, use [interpolateString](#interpolateString).\n6. If *b* is a [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) of numbers, use [interpolateNumberArray](#interpolateNumberArray).\n7. If *b* is a generic [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray), use [interpolateArray](#interpolateArray).\n8. If *b* is coercible to a number, use [interpolateNumber](#interpolateNumber).\n9. Use [interpolateObject](#interpolateObject).\n\nBased on the chosen interpolator, *a* is coerced to the suitable corresponding type.\n\n# d3.interpolateNumber(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/number.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*. The returned interpolator is equivalent to:\n\n```js\nfunction interpolator(t) {\n return a * (1 - t) + b * t;\n}\n```\n\nCaution: avoid interpolating to or from the number zero when the interpolator is used to generate a string. When very small values are stringified, they may be converted to scientific notation, which is an invalid attribute or style property value in older browsers. For example, the number `0.0000001` is converted to the string `\"1e-7\"`. This is particularly noticeable with interpolating opacity. To avoid scientific notation, start or end the transition at 1e-6: the smallest value that is not stringified in scientific notation.\n\n# d3.interpolateRound(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/round.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)\n\nReturns an interpolator between the two numbers *a* and *b*; the interpolator is similar to [interpolateNumber](#interpolateNumber), except it will round the resulting value to the nearest integer.\n\n# d3.interpolateString(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/string.js), [Examples](https://observablehq.com/@d3/d3-interpolatestring)\n\nReturns an interpolator between the two strings *a* and *b*. The string interpolator finds numbers embedded in *a* and *b*, where each number is of the form understood by JavaScript. A few examples of numbers that will be detected within a string: `-1`, `42`, `3.14159`, and `6.0221413e+23`.\n\nFor each number embedded in *b*, the interpolator will attempt to find a corresponding number in *a*. If a corresponding number is found, a numeric interpolator is created using [interpolateNumber](#interpolateNumber). The remaining parts of the string *b* are used as a template: the static parts of the string *b* remain constant for the interpolation, with the interpolated numeric values embedded in the template.\n\nFor example, if *a* is `\"300 12px sans-serif\"`, and *b* is `\"500 36px Comic-Sans\"`, two embedded numbers are found. The remaining static parts (of string *b*) are a space between the two numbers (`\" \"`), and the suffix (`\"px Comic-Sans\"`). The result of the interpolator at *t* = 0.5 is `\"400 24px Comic-Sans\"`.\n\n# d3.interpolateDate(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/date.js), [Examples](https://observablehq.com/@d3/d3-interpolatedate)\n\nReturns an interpolator between the two [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) *a* and *b*.\n\nNote: **no defensive copy** of the returned date is created; the same Date instance is returned for every evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/array.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two arrays *a* and *b*. If *b* is a typed array (e.g., Float64Array), [interpolateNumberArray](#interpolateNumberArray) is called instead.\n\nInternally, an array template is created that is the same length as *b*. For each element in *b*, if there exists a corresponding element in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such element, the static value from *b* is used in the template. Then, for the given parameter *t*, the template’s embedded interpolators are evaluated. The updated array template is then returned.\n\nFor example, if *a* is the array `[0, 1]` and *b* is the array `[1, 10, 100]`, then the result of the interpolator for *t* = 0.5 is the array `[0.5, 5.5, 100]`.\n\nNote: **no defensive copy** of the template array is created; modifications of the returned array may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateNumberArray(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/numberArray.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumberarray)\n\nReturns an interpolator between the two arrays of numbers *a* and *b*. Internally, an array template is created that is the same type and length as *b*. For each element in *b*, if there exists a corresponding element in *a*, the values are directly interpolated in the array template. If there is no such element, the static value from *b* is copied. The updated array template is then returned.\n\nNote: For performance reasons, **no defensive copy** is made of the template array and the arguments *a* and *b*; modifications of these arrays may affect subsequent evaluation of the interpolator.\n\n# d3.interpolateObject(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/object.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)\n\nReturns an interpolator between the two objects *a* and *b*. Internally, an object template is created that has the same properties as *b*. For each property in *b*, if there exists a corresponding property in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such property, the static value from *b* is used in the template. Then, for the given parameter *t*, the template's embedded interpolators are evaluated and the updated object template is then returned.\n\nFor example, if *a* is the object `{x: 0, y: 1}` and *b* is the object `{x: 1, y: 10, z: 100}`, the result of the interpolator for *t* = 0.5 is the object `{x: 0.5, y: 5.5, z: 100}`.\n\nObject interpolation is particularly useful for *dataspace interpolation*, where data is interpolated rather than attribute values. For example, you can interpolate an object which describes an arc in a pie chart, and then use [d3.arc](https://github.com/d3/d3-shape/blob/master/README.md#arc) to compute the new SVG path data.\n\nNote: **no defensive copy** of the template object is created; modifications of the returned object may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).\n\n# d3.interpolateTransformCss(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L62), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D CSS transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateTransformSvg(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L63), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)\n\nReturns an interpolator between the two 2D SVG transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).\n\n# d3.interpolateZoom(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/zoom.js), [Examples](https://observablehq.com/@d3/d3-interpolatezoom)\n\nReturns an interpolator between the two views *a* and *b* of a two-dimensional plane, based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf) by Jarke J. van Wijk and Wim A.A. Nuij. Each view is defined as an array of three numbers: *cx*, *cy* and *width*. The first two coordinates *cx*, *cy* represent the center of the viewport; the last coordinate *width* represents the size of the viewport.\n\nThe returned interpolator exposes a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *x,y* space. If you want a slower or faster transition, multiply this by an arbitrary scale factor (V as described in the original paper).\n\n# d3.interpolateDiscrete(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/discrete.js), [Examples](https://observablehq.com/@d3/d3-interpolatediscrete)\n\nReturns a discrete interpolator for the given array of *values*. The returned interpolator maps *t* in [0, 1 / *n*) to *values*[0], *t* in [1 / *n*, 2 / *n*) to *values*[1], and so on, where *n* = *values*.length. In effect, this is a lightweight [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) with a fixed domain of [0, 1].\n\n### Sampling\n\n# d3.quantize(interpolator, n) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/d3-quantize)\n\nReturns *n* uniformly-spaced samples from the specified *interpolator*, where *n* is an integer greater than one. The first sample is always at *t* = 0, and the last sample is always at *t* = 1. This can be useful in generating a fixed number of samples from a given interpolator, such as to derive the range of a [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) from a [continuous interpolator](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateWarm).\n\nCaution: this method will not work with interpolators that do not return defensive copies of their output, such as [d3.interpolateArray](#interpolateArray), [d3.interpolateDate](#interpolateDate) and [d3.interpolateObject](#interpolateObject). For those interpolators, you must wrap the interpolator and create a copy for each returned value.\n\n### Color Spaces\n\n# d3.interpolateRgb(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"rgb\"\n\nOr, with a corrected [gamma](#interpolate_gamma) of 2.2:\n\n\"rgbGamma\"\n\nReturns an RGB color space interpolator between the two colors *a* and *b* with a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in RGB; they will be converted to RGB using [d3.rgb](https://github.com/d3/d3-color/blob/master/README.md#rgb). The return value of the interpolator is an RGB string.\n\n# d3.interpolateRgbBasis(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L54), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). Implicit control points are generated such that the interpolator returns *colors*[0] at *t* = 0 and *colors*[*colors*.length - 1] at *t* = 1. Opacity interpolation is not currently supported. See also [d3.interpolateBasis](#interpolateBasis), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateRgbBasisClosed(colors) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L55), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). The control points are implicitly repeated such that the resulting spline has cyclical C² continuity when repeated around *t* in [0,1]; this is useful, for example, to create cyclical color scales. Opacity interpolation is not currently supported. See also [d3.interpolateBasisClosed](#interpolateBasisClosed), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.\n\n# d3.interpolateHsl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hsl\"\n\nReturns an HSL color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in HSL; they will be converted to HSL using [d3.hsl](https://github.com/d3/d3-color/blob/master/README.md#hsl). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHslLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hslLong\"\n\nLike [interpolateHsl](#interpolateHsl), but does not use the shortest path between hues.\n\n# d3.interpolateLab(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/lab.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"lab\"\n\nReturns a [CIELAB color space](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELAB; they will be converted to CIELAB using [d3.lab](https://github.com/d3/d3-color/blob/master/README.md#lab). The return value of the interpolator is an RGB string.\n\n# d3.interpolateHcl(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hcl\"\n\nReturns a [CIELChab color space](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELChab; they will be converted to CIELChab using [d3.hcl](https://github.com/d3/d3-color/blob/master/README.md#hcl). If either color’s hue or chroma is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateHclLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"hclLong\"\n\nLike [interpolateHcl](#interpolateHcl), but does not use the shortest path between hues.\n\n# d3.interpolateCubehelix(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelix\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGamma\"\n\nReturns a Cubehelix color space interpolator between the two colors *a* and *b* using a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in Cubehelix; they will be converted to Cubehelix using [d3.cubehelix](https://github.com/d3/d3-color/blob/master/README.md#cubehelix). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.\n\n# d3.interpolateCubehelixLong(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js#L29), [Examples](https://observablehq.com/@d3/working-with-color)\n\n\"cubehelixLong\"\n\nOr, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:\n\n\"cubehelixGammaLong\"\n\nLike [interpolateCubehelix](#interpolateCubehelix), but does not use the shortest path between hues.\n\n# interpolate.gamma(gamma)\n\nGiven that *interpolate* is one of [interpolateRgb](#interpolateRgb), [interpolateCubehelix](#interpolateCubehelix) or [interpolateCubehelixLong](#interpolateCubehelixLong), returns a new interpolator factory of the same type using the specified *gamma*. For example, to interpolate from purple to orange with a gamma of 2.2 in RGB space:\n\n```js\nvar interpolator = d3.interpolateRgb.gamma(2.2)(\"purple\", \"orange\");\n```\n\nSee Eric Brasseur’s article, [Gamma error in picture scaling](https://web.archive.org/web/20160112115812/http://www.4p8.com/eric.brasseur/gamma.html), for more on gamma correction.\n\n# d3.interpolateHue(a, b) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hue.js), [Examples](https://observablehq.com/@d3/working-with-color)\n\nReturns an interpolator between the two hue angles *a* and *b*. If either hue is NaN, the opposing value is used. The shortest path between hues is used. The return value of the interpolator is a number in [0, 360).\n\n### Splines\n\nWhereas standard interpolators blend from a starting value *a* at *t* = 0 to an ending value *b* at *t* = 1, spline interpolators smoothly blend multiple input values for *t* in [0,1] using piecewise polynomial functions. Only cubic uniform nonrational [B-splines](https://en.wikipedia.org/wiki/B-spline) are currently supported, also known as basis splines.\n\n# d3.interpolateBasis(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basis.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. Implicit control points are generated such that the interpolator returns *values*[0] at *t* = 0 and *values*[*values*.length - 1] at *t* = 1. See also [d3.curveBasis](https://github.com/d3/d3-shape/blob/master/README.md#curveBasis).\n\n# d3.interpolateBasisClosed(values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basisClosed.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)\n\nReturns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. The control points are implicitly repeated such that the resulting one-dimensional spline has cyclical C² continuity when repeated around *t* in [0,1]. See also [d3.curveBasisClosed](https://github.com/d3/d3-shape/blob/master/README.md#curveBasisClosed).\n\n### Piecewise\n\n# d3.piecewise(interpolate, values) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/piecewise.js), [Examples](https://observablehq.com/@d3/d3-piecewise)\n\nReturns a piecewise interpolator, composing interpolators for each adjacent pair of *values*. The returned interpolator maps *t* in [0, 1 / (*n* - 1)] to *interpolate*(*values*[0], *values*[1]), *t* in [1 / (*n* - 1), 2 / (*n* - 1)] to *interpolate*(*values*[1], *values*[2]), and so on, where *n* = *values*.length. In effect, this is a lightweight [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales). For example, to blend through red, green and blue:\n\n```js\nvar interpolate = d3.piecewise(d3.interpolateRgb.gamma(2.2), [\"red\", \"green\", \"blue\"]);\n```\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-interpolate", "error": "[Circular]", "extraneous": false, "_deduped": "d3-interpolate" }, "d3-selection": { "_from": "d3-selection@1", "_id": "d3-selection@1.4.2", "_inBundle": false, "_integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", "_location": "/d3-selection", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", "_shasum": "dcaa49522c0dbf32d6c1858afc26b6094555bc5c", "_spec": "d3-selection@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Data-driven DOM manipulation: select elements and join them to data.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-selection/", "jsdelivr": "dist/d3-selection.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-selection.js", "module": "src/index.js", "name": "d3-selection", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "unpkg": "dist/d3-selection.min.js", "version": "1.4.2", "readme": "# d3-selection\n\nSelections allow powerful data-driven transformation of the document object model (DOM): set [attributes](#selection_attr), [styles](#selection_style), [properties](#selection_property), [HTML](#selection_html) or [text](#selection_text) content, and more. Using the [data join](#joining-data)’s [enter](#selection_enter) and [exit](#selection_enter) selections, you can also [add](#selection_append) or [remove](#selection_remove) elements to correspond to data.\n\nSelection methods typically return the current selection, or a new selection, allowing the concise application of multiple operations on a given selection via method chaining. For example, to set the class and color style of all paragraph elements in the current document:\n\n```js\nd3.selectAll(\"p\")\n .attr(\"class\", \"graf\")\n .style(\"color\", \"red\");\n```\n\nThis is equivalent to:\n\n```js\nconst p = d3.selectAll(\"p\");\np.attr(\"class\", \"graf\");\np.style(\"color\", \"red\");\n```\n\nBy convention, selection methods that return the current selection use *four* spaces of indent, while methods that return a new selection use only *two*. This helps reveal changes of context by making them stick out of the chain:\n\n```js\nd3.select(\"body\")\n .append(\"svg\")\n .attr(\"width\", 960)\n .attr(\"height\", 500)\n .append(\"g\")\n .attr(\"transform\", \"translate(20,20)\")\n .append(\"rect\")\n .attr(\"width\", 920)\n .attr(\"height\", 460);\n```\n\nSelections are immutable. All selection methods that affect which elements are selected (or their order) return a new selection rather than modifying the current selection. However, note that elements are necessarily mutable, as selections drive transformations of the document!\n\n## Installing\n\nIf you use NPM, `npm install d3-selection`. Otherwise, download the [latest release](https://github.com/d3/d3-selection/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-selection.v1.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\n\n```\n\n[Try d3-selection in your browser.](https://observablehq.com/collection/@d3/d3-selection)\n\n## API Reference\n\n* [Selecting Elements](#selecting-elements)\n* [Modifying Elements](#modifying-elements)\n* [Joining Data](#joining-data)\n* [Handling Events](#handling-events)\n* [Control Flow](#control-flow)\n* [Local Variables](#local-variables)\n* [Namespaces](#namespaces)\n\n### Selecting Elements\n\nSelection methods accept [W3C selector strings](http://www.w3.org/TR/selectors-api/) such as `.fancy` to select elements with the class *fancy*, or `div` to select DIV elements. Selection methods come in two forms: select and selectAll: the former selects only the first matching element, while the latter selects all matching elements in document order. The top-level selection methods, [d3.select](#select) and [d3.selectAll](#selectAll), query the entire document; the subselection methods, [*selection*.select](#selection_select) and [*selection*.selectAll](#selection_selectAll), restrict selection to descendants of the selected elements.\n\n# d3.selection() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/index.js#L38 \"Source\")\n\n[Selects](#select) the root element, `document.documentElement`. This function can also be used to test for selections (`instanceof d3.selection`) or to extend the selection prototype. For example, to add a method to check checkboxes:\n\n```js\nd3.selection.prototype.checked = function(value) {\n return arguments.length < 1\n ? this.property(\"checked\")\n : this.property(\"checked\", !!value);\n};\n```\n\nAnd then to use:\n\n```js\nd3.selectAll(\"input[type=checkbox]\").checked(true);\n```\n\n# d3.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/select.js#L3 \"Source\")\n\nSelects the first element that matches the specified *selector* string. If no elements match the *selector*, returns an empty selection. If multiple elements match the *selector*, only the first matching element (in document order) will be selected. For example, to select the first anchor element:\n\n```js\nconst anchor = d3.select(\"a\");\n```\n\nIf the *selector* is not a string, instead selects the specified node; this is useful if you already have a reference to a node, such as `this` within an event listener or a global such as `document.body`. For example, to make a clicked paragraph red:\n\n```js\nd3.selectAll(\"p\").on(\"click\", function() {\n d3.select(this).style(\"color\", \"red\");\n});\n```\n\n# d3.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js#L3 \"Source\")\n\nSelects all elements that match the specified *selector* string. The elements will be selected in document order (top-to-bottom). If no elements in the document match the *selector*, or if the *selector* is null or undefined, returns an empty selection. For example, to select all paragraphs:\n\n```js\nconst paragraph = d3.selectAll(\"p\");\n```\n\nIf the *selector* is not a string, instead selects the specified array of nodes; this is useful if you already have a reference to nodes, such as `this.childNodes` within an event listener or a global such as `document.links`. The nodes may instead be a pseudo-array such as a `NodeList` or `arguments`. For example, to color all links red:\n\n```js\nd3.selectAll(document.links).style(\"color\", \"red\");\n```\n\n# selection.select(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/select.js \"Source\")\n\nFor each selected element, selects the first descendant element that matches the specified *selector* string. If no element matches the specified selector for the current element, the element at the current index will be null in the returned selection. (If the *selector* is null, every element in the returned selection will be null, resulting in an empty selection.) If the current element has associated data, this data is propagated to the corresponding selected element. If multiple elements match the selector, only the first matching element in document order is selected. For example, to select the first bold element in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").select(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an element, or null if there is no matching element. For example, to select the previous sibling of each paragraph:\n\n```js\nconst previous = d3.selectAll(\"p\").select(function() {\n return this.previousElementSibling;\n});\n```\n\nUnlike [*selection*.selectAll](#selection_selectAll), *selection*.select does not affect grouping: it preserves the existing group structure and indexes, and propagates data (if any) to selected children. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.selectAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/selectAll.js \"Source\")\n\nFor each selected element, selects the descendant elements that match the specified *selector* string. The elements in the returned selection are grouped by their corresponding parent node in this selection. If no element matches the specified selector for the current element, or if the *selector* is null, the group at the current index will be empty. The selected elements do not inherit data from this selection; use [*selection*.data](#selection_data) to propagate data to children. For example, to select the bold elements in every paragraph:\n\n```js\nconst b = d3.selectAll(\"p\").selectAll(\"b\");\n```\n\nIf the *selector* is 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 (*nodes*[*i*]). It must return an array of elements (or a pseudo-array, such as a NodeList), or the empty array if there are no matching elements. For example, to select the previous and next siblings of each paragraph:\n\n```js\nconst sibling = d3.selectAll(\"p\").selectAll(function() {\n return [\n this.previousElementSibling,\n this.nextElementSibling\n ];\n});\n```\n\nUnlike [*selection*.select](#selection_select), *selection*.selectAll does affect grouping: each selected descendant is grouped by the parent element in the originating selection. Grouping plays an important role in the [data join](#joining-data). See [Nested Selections](http://bost.ocks.org/mike/nest/) and [How Selections Work](http://bost.ocks.org/mike/selection/) for more on this topic.\n\n# selection.filter(filter) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/filter.js \"Source\")\n\nFilters the selection, returning a new selection that contains only the elements for which the specified *filter* is true. The *filter* may be specified either as a selector string or a function. If the *filter* is 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 (*nodes*[*i*]).\n\nFor example, to filter a selection of table rows to contain only even rows:\n\n```js\nconst even = d3.selectAll(\"tr\").filter(\":nth-child(even)\");\n```\n\nThis is approximately equivalent to using [d3.selectAll](#selectAll) directly, although the indexes may be different:\n\n```js\nconst even = d3.selectAll(\"tr:nth-child(even)\");\n```\n\nSimilarly, using a function:\n\n```js\nconst even = d3.selectAll(\"tr\").filter((d, i) => i & 1);\n```\n\nOr using [*selection*.select](#selection_select) (and avoiding an arrow function, since *this* is needed to refer to the current element):\n\n```js\nconst even = d3.selectAll(\"tr\").select(function(d, i) { return i & 1 ? this : null; });\n```\n\nNote that the `:nth-child` pseudo-class is a one-based index rather than a zero-based index. Also, the above filter functions do not have precisely the same meaning as `:nth-child`; they rely on the selection index rather than the number of preceding sibling elements in the DOM.\n\nThe returned filtered selection preserves the parents of this selection, but like [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), it does not preserve indexes as some elements may be removed; use [*selection*.select](#selection_select) to preserve the index, if needed.\n\n# selection.merge(other) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/merge.js \"Source\")\n\nReturns a new selection merging this selection with the specified *other* selection. The returned selection has the same number of groups and the same parents as this selection. Any missing (null) elements in this selection are filled with the corresponding element, if present (not null), from the specified *selection*. (If the *other* selection has additional groups or parents, they are ignored.)\n\nThis method is used internally by [*selection*.join](#selection_join) to merge the [enter](#selection_enter) and [update](#selection_data) selections after [binding data](#joining-data). You can also merge explicitly, although note that since merging is based on element index, you should use operations that preserve index, such as [*selection*.select](#selection_select) instead of [*selection*.filter](#selection_filter). For example:\n\n```js\nconst odd = selection.select(function(d, i) { return i & 1 ? this : null; ));\nconst even = selection.select(function(d, i) { return i & 1 ? null : this; ));\nconst merged = odd.merge(even);\n```\n\nSee [*selection*.data](#selection_data) for more.\n\nThis method is not intended for concatenating arbitrary selections, however: if both this selection and the specified *other* selection have (non-null) elements at the same index, this selection’s element is returned in the merge and the *other* selection’s element is ignored.\n\n# d3.matcher(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/matcher.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns true if `this` element [matches](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) the specified selector. This method is used internally by [*selection*.filter](#selection_filter). For example, this:\n\n```js\nconst div = selection.filter(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.filter(d3.matcher(\"div\"));\n```\n\n(Although D3 is not a compatibility layer, this implementation does support vendor-prefixed implementations due to the recent standardization of *element*.matches.)\n\n# d3.selector(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selector.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns the first descendant of `this` element that matches the specified selector. This method is used internally by [*selection*.select](#selection_select). For example, this:\n\n```js\nconst div = selection.select(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.select(d3.selector(\"div\"));\n```\n\n# d3.selectorAll(selector) [<>](https://github.com/d3/d3-selection/blob/master/src/selectAll.js \"Source\")\n\nGiven the specified *selector*, returns a function which returns all descendants of `this` element that match the specified selector. This method is used internally by [*selection*.selectAll](#selection_selectAll). For example, this:\n\n```js\nconst div = selection.selectAll(\"div\");\n```\n\nIs equivalent to:\n\n```js\nconst div = selection.selectAll(d3.selectorAll(\"div\"));\n```\n\n# d3.window(node) [<>](https://github.com/d3/d3-selection/blob/master/src/window.js \"Source\")\n\nReturns the owner window for the specified *node*. If *node* is a node, returns the owner document’s default view; if *node* is a document, returns its default view; otherwise returns the *node*.\n\n# d3.style(node, name) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js#L32 \"Source\")\n\nReturns the value of the style property with the specified *name* for the specified *node*. If the *node* has an inline style with the specified *name*, its value is returned; otherwise, the [computed property value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value) is returned. See also [*selection*.style](#selection_style).\n\n### Modifying Elements\n\nAfter selecting elements, use the selection’s transformation methods to affect document content. For example, to set the name attribute and color style of an anchor element:\n\n```js\nd3.select(\"a\")\n .attr(\"name\", \"fred\")\n .style(\"color\", \"red\");\n```\n\nTo experiment with selections, visit [d3js.org](https://d3js.org) and open your browser’s developer console! (In Chrome, open the console with ⌥⌘J.) Select elements and then inspect the returned selection to see which elements are selected and how they are grouped. Call selection methods and see how the page content changes.\n\n# selection.attr(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/attr.js \"Source\")\n\nIf a *value* is specified, sets the attribute with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, all elements are given the same attribute value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s attribute. A null value will remove the specified attribute.\n\nIf a *value* is not specified, returns the current value of the specified attribute for the first (non-null) element in the selection. This is generally useful only if you know that the selection contains exactly one element.\n\nThe specified *name* may have a namespace prefix, such as `xlink:href` to specify the `href` attribute in the XLink namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map.\n\n# selection.classed(names[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/classed.js \"Source\")\n\nIf a *value* is specified, assigns or unassigns the specified CSS class *names* on the selected elements by setting the `class` attribute or modifying the `classList` property and returns this selection. The specified *names* is a string of space-separated class names. For example, to assign the classes `foo` and `bar` to the selected elements:\n\n```js\nselection.classed(\"foo bar\", true);\n```\n\nIf the *value* is truthy, then all elements are assigned the specified classes; otherwise, the classes are unassigned. If the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to assign or unassign classes on each element. For example, to randomly associate the class *foo* with on average half the selected elements:\n\n```js\nselection.classed(\"foo\", () => Math.random() > 0.5);\n```\n\nIf a *value* is not specified, returns true if and only if the first (non-null) selected element has the specified *classes*. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.style(name[, value[, priority]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/style.js \"Source\")\n\nIf a *value* is specified, sets the style property with the specified *name* to the specified value on the selected elements and returns this selection. If the *value* is a constant, then all elements are given the same style property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s style property. A null value will remove the style property. An optional *priority* may also be specified, either as null or the string `important` (without the exclamation point).\n\nIf a *value* is not specified, returns the current value of the specified style property for the first (non-null) element in the selection. The current value is defined as the element’s inline value, if present, and otherwise its [computed value](https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value). Accessing the current style value is generally useful only if you know the selection contains exactly one element.\n\nCaution: unlike many SVG attributes, CSS styles typically have associated units. For example, `3px` is a valid stroke-width property value, while `3` is not. Some browsers implicitly assign the `px` (pixel) unit to numeric values, but not all browsers do: IE, for example, throws an “invalid arguments” error!\n\n# selection.property(name[, value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/property.js \"Source\")\n\nSome HTML elements have special properties that are not addressable using attributes or styles, such as a form field’s text `value` and a checkbox’s `checked` boolean. Use this method to get or set these properties.\n\nIf a *value* is specified, sets the property with the specified *name* to the specified value on selected elements. If the *value* is a constant, then all elements are given the same property value; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s property. A null value will delete the specified property.\n\nIf a *value* is not specified, returns the value of the specified property for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.text([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/text.js \"Source\")\n\nIf a *value* is specified, sets the [text content](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same text content; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s text content. A null value will clear the content.\n\nIf a *value* is not specified, returns the text content for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\n# selection.html([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/html.js \"Source\")\n\nIf a *value* is specified, sets the [inner HTML](http://dev.w3.org/html5/spec-LC/apis-in-html-documents.html#innerhtml) to the specified value on all selected elements, replacing any existing child elements. If the *value* is a constant, then all elements are given the same inner HTML; otherwise, if the *value* is 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 (*nodes*[*i*]). The function’s return value is then used to set each element’s inner HTML. A null value will clear the content.\n\nIf a *value* is not specified, returns the inner HTML for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nUse [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) instead to create data-driven content; this method is intended for when you want a little bit of HTML, say for rich formatting. Also, *selection*.html is only supported on HTML elements. SVG elements and other non-HTML elements do not support the innerHTML property, and thus are incompatible with *selection*.html. Consider using [XMLSerializer](https://developer.mozilla.org/en-US/docs/XMLSerializer) to convert a DOM subtree to text. See also the [innersvg polyfill](https://code.google.com/p/innersvg/), which provides a shim to support the innerHTML property on SVG elements.\n\n# selection.append(type) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/append.js \"Source\")\n\nIf the specified *type* is a string, appends a new element of this type (tag name) as the last child of each selected element, or before the next following sibling in the update selection if this is an [enter selection](#selection_enter). The latter behavior for enter selections allows you to insert elements into the DOM in an order consistent with the new bound data; however, note that [*selection*.order](#selection_order) may still be required if updating elements change order (*i.e.*, if the order of new data is inconsistent with old data).\n\nIf the specified *type* is 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 (*nodes*[*i*]). This function should return an element to be appended. (The function typically creates a new element, but it may instead return an existing element.) For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").append(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").append(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.appendChild(document.createElement(\"p\"));\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.insert(type[, before]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/insert.js \"Source\")\n\nIf the specified *type* is a string, inserts a new element of this type (tag name) before the first element matching the specified *before* selector for each selected element. For example, a *before* selector `:first-child` will prepend nodes before the first child. If *before* is not specified, it defaults to null. (To append elements in an order consistent with [bound data](#joining-data), use [*selection*.append](#selection_append).)\n\nBoth *type* and *before* may instead be specified as functions which are 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 (*nodes*[*i*]). The *type* function should return an element to be inserted; the *before* function should return the child element before which the element should be inserted. For example, to append a paragraph to each DIV element:\n\n```js\nd3.selectAll(\"div\").insert(\"p\");\n```\n\nThis is equivalent to:\n\n```js\nd3.selectAll(\"div\").insert(() => document.createElement(\"p\"));\n```\n\nWhich is equivalent to:\n\n```js\nd3.selectAll(\"div\").select(function() {\n return this.insertBefore(document.createElement(\"p\"), null);\n});\n```\n\nIn both cases, this method returns a new selection containing the appended elements. Each new element inherits the data of the current elements, if any, in the same manner as [*selection*.select](#selection_select).\n\nThe specified *name* may have a namespace prefix, such as `svg:text` to specify a `text` attribute in the SVG namespace. See [namespaces](#namespaces) for the map of supported namespaces; additional namespaces can be registered by adding to the map. If no namespace is specified, the namespace will be inherited from the parent element; or, if the name is one of the known prefixes, the corresponding namespace will be used (for example, `svg` implies `svg:svg`).\n\n# selection.remove() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/remove.js \"Source\")\n\nRemoves the selected elements from the document. Returns this selection (the removed elements) which are now detached from the DOM. There is not currently a dedicated API to add removed elements back to the document; however, you can pass a function to [*selection*.append](#selection_append) or [*selection*.insert](#selection_insert) to re-add elements.\n\n# selection.clone([deep]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/clone.js \"Source\")\n\nInserts clones of the selected elements immediately following the selected elements and returns a selection of the newly added clones. If *deep* is truthy, the descendant nodes of the selected elements will be cloned as well. Otherwise, only the elements themselves will be cloned. Equivalent to:\n\n```js\nselection.select(function() {\n return this.parentNode.insertBefore(this.cloneNode(deep), this.nextSibling);\n});\n```\n\n# selection.sort(compare) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/sort.js \"Source\")\n\nReturns a new selection that contains a copy of each group in this selection sorted according to the *compare* function. After sorting, re-inserts elements to match the resulting order (per [*selection*.order](#selection_order)).\n\nThe compare function, which defaults to [ascending](https://github.com/d3/d3-array#ascending), is passed two elements’ data *a* and *b* to compare. It should return either a negative, positive, or zero value. If negative, then *a* should be before *b*; if positive, then *a* should be after *b*; otherwise, *a* and *b* are considered equal and the order is arbitrary.\n\nNote that sorting is not guaranteed to be stable; however, it is guaranteed to have the same behavior as your browser’s built-in [sort](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort) method on arrays.\n\n# selection.order() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/order.js \"Source\")\n\nRe-inserts elements into the document such that the document order of each group matches the selection order. This is equivalent to calling [*selection*.sort](#selection_sort) if the data is already sorted, but much faster.\n\n# selection.raise() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/raise.js \"Source\")\n\nRe-inserts each selected element, in order, as the last child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.appendChild(this);\n});\n```\n\n# selection.lower() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/lower.js \"Source\")\n\nRe-inserts each selected element, in order, as the first child of its parent. Equivalent to:\n\n```js\nselection.each(function() {\n this.parentNode.insertBefore(this, this.parentNode.firstChild);\n});\n```\n\n# d3.create(name) [<>](https://github.com/d3/d3-selection/blob/master/src/create.js \"Source\")\n\nGiven the specified element *name*, returns a single-element selection containing a detached element of the given name in the current document. This method assumes the HTML namespace, so you must specify a namespace explicitly when creating SVG or other non-HTML elements; see [namespace](#namespace) for details on supported namespace prefixes.\n\n```js\nd3.create(\"svg\") // equivalent to svg:svg\nd3.create(\"svg:svg\") // more explicitly\nd3.create(\"svg:g\") // an SVG G element\nd3.create(\"g\") // an HTML G (unknown) element\n```\n\n# d3.creator(name) [<>](https://github.com/d3/d3-selection/blob/master/src/creator.js \"Source\")\n\nGiven the specified element *name*, returns a function which creates an element of the given name, assuming that `this` is the parent element. This method is used internally by [*selection*.append](#selection_append) and [*selection*.insert](#selection_insert) to create new elements. For example, this:\n\n```js\nselection.append(\"div\");\n```\n\nIs equivalent to:\n\n```js\nselection.append(d3.creator(\"div\"));\n```\n\nSee [namespace](#namespace) for details on supported namespace prefixes, such as for SVG elements.\n\n### Joining Data\n\nFor an introduction to D3’s data joins, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join). Also see [Thinking With Joins](http://bost.ocks.org/mike/join/).\n\n# selection.data([data[, key]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/data.js \"Source\")\n\nBinds the specified array of *data* with the selected elements, returning a new selection that represents the *update* selection: the elements successfully bound to data. Also defines the [enter](#selection_enter) and [exit](#selection_exit) selections on the returned selection, which can be used to add or remove elements to correspond to the new data. The specified *data* is an array of arbitrary values (*e.g.*, numbers or objects), or a function that returns an array of values for each group. When data is assigned to an element, it is stored in the property `__data__`, thus making the data “sticky” and available on re-selection.\n\nThe *data* is specified **for each group** in the selection. If the selection has multiple groups (such as [d3.selectAll](#selectAll) followed by [*selection*.selectAll](#selection_selectAll)), then *data* should typically be specified as a function. This function will be evaluated for each group in order, being passed the group’s parent datum (*d*, which may be undefined), the group index (*i*), and the selection’s parent nodes (*nodes*), with *this* as the group’s parent element.\n\nIn conjunction with [*selection*.join](#selection_join) (or more explicitly with [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append) and [*selection*.remove](#selection_remove)), *selection*.data can be used to enter, update and exit elements to match data. For example, to create an HTML table from a matrix of numbers:\n\n```js\nconst matrix = [\n [11975, 5871, 8916, 2868],\n [ 1951, 10048, 2060, 6171],\n [ 8010, 16145, 8090, 8045],\n [ 1013, 990, 940, 6907]\n];\n\nd3.select(\"body\")\n .append(\"table\")\n .selectAll(\"tr\")\n .data(matrix)\n .join(\"tr\")\n .selectAll(\"td\")\n .data(d => d)\n .join(\"td\")\n .text(d => d);\n```\n\nIn this example the *data* function is the identity function: for each table row, it returns the corresponding row from the data matrix.\n\nIf a *key* function is not specified, then the first datum in *data* is assigned to the first selected element, the second datum to the second selected element, and so on. A *key* function may be specified to control which datum is assigned to which element, replacing the default join-by-index, by computing a string identifier for each datum and element. This key 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 (*nodes*[*i*]); the returned string is the element’s key. The key function is then also evaluated for each new datum in *data*, being passed the current datum (*d*), the current index (*i*), and the group’s new *data*, with *this* as the group’s parent DOM element; the returned string is the datum’s key. The datum for a given key is assigned to the element with the matching key. If multiple elements have the same key, the duplicate elements are put into the exit selection; if multiple data have the same key, the duplicate data are put into the enter selection.\n\nFor example, given this document:\n\n```html\n
\n
\n
\n
\n
\n
\n```\n\nYou could join data by key as follows:\n\n\n```js\nconst data = [\n {name: \"Locke\", number: 4},\n {name: \"Reyes\", number: 8},\n {name: \"Ford\", number: 15},\n {name: \"Jarrah\", number: 16},\n {name: \"Shephard\", number: 23},\n {name: \"Kwon\", number: 42}\n];\n\nd3.selectAll(\"div\")\n .data(data, function(d) { return d ? d.name : this.id; })\n .text(d => d.number);\n```\n\nThis example key function uses the datum *d* if present, and otherwise falls back to the element’s id property. Since these elements were not previously bound to data, the datum *d* is null when the key function is evaluated on selected elements, and non-null when the key function is evaluated on the new data.\n\nThe *update* and *enter* selections are returned in data order, while the *exit* selection preserves the selection order prior to the join. If a key function is specified, the order of elements in the selection may not match their order in the document; use [*selection*.order](#selection_order) or [*selection*.sort](#selection_sort) as needed. For more on how the key function affects the join, see [A Bar Chart, Part 2](http://bost.ocks.org/mike/bar/2/) and [Object Constancy](http://bost.ocks.org/mike/constancy/).\n\nIf *data* is not specified, this method returns the array of data for the selected elements.\n\nThis method cannot be used to clear bound data; use [*selection*.datum](#selection_datum) instead.\n\n# selection.join(enter[, update][, exit]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/join.js \"Source\")\n\nAppends, removes and reorders elements as necessary to match the data that was previously bound by [*selection*.data](#selection_data), returning the [merged](#selection_merge) enter and update selection. This method is a convenient alternative to the explicit [general update pattern](https://bl.ocks.org/mbostock/3808218), replacing [*selection*.enter](#selection_enter), [*selection*.exit](#selection_exit), [*selection*.append](#selection_append), [*selection*.remove](#selection_remove), and [*selection*.order](#selection_order). For example:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\"circle\")\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n```\n\nThe *enter* function may be specified as a string shorthand, as above, which is equivalent to [*selection*.append](#selection_append) with the given element name. Likewise, optional *update* and *exit* functions may be specified, which default to the identity function and calling [*selection*.remove](#selection_remove), respectively. The shorthand above is thus equivalent to:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\"),\n update => update,\n exit => exit.remove()\n )\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", \"black\");\n````\n\nBy passing separate functions on enter, update and exit, you have greater control over what happens. And by specifying a key function to [*selection*.data](#selection_data), you can minimize changes to the DOM to optimize performance. For example, to set different fill colors for enter and update:\n\n```js\nsvg.selectAll(\"circle\")\n .data(data)\n .join(\n enter => enter.append(\"circle\").attr(\"fill\", \"green\"),\n update => update.attr(\"fill\", \"blue\")\n )\n .attr(\"stroke\", \"black\");\n```\n\nThe selections returned by the *enter* and *update* functions are merged and then returned by *selection*.join.\n\nYou also animate enter, update and exit by creating transitions inside the *enter*, *update* and *exit* functions. To avoid breaking the method chain, use *selection*.call to create transitions, or return an undefined enter or update selection to prevent merging: the return value of the *enter* and *update* functions specifies the two selections to merge and return by *selection*.join.\n\nFor more, see the [*selection*.join notebook](https://observablehq.com/@d3/selection-join).\n\n# selection.enter() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/enter.js \"Source\")\n\nReturns the enter selection: placeholder nodes for each datum that had no corresponding DOM element in the selection. (The enter selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe enter selection is typically used to create “missing” elements corresponding to new data. For example, to create DIV elements from an array of numbers:\n\n```js\nconst div = d3.select(\"body\")\n .selectAll(\"div\")\n .data([4, 8, 15, 16, 23, 42])\n .enter().append(\"div\")\n .text(d => d);\n```\n\nIf the body is initially empty, the above code will create six new DIV elements, append them to the body in-order, and assign their text content as the associated (string-coerced) number:\n\n```html\n
4
\n
8
\n
15
\n
16
\n
23
\n
42
\n```\n\nConceptually, the enter selection’s placeholders are pointers to the parent element (in this example, the document body). The enter selection is typically only used transiently to append elements, and is often [merged](#selection_merge) with the update selection after appending, such that modifications can be applied to both entering and updating elements.\n\n# selection.exit() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/exit.js \"Source\")\n\nReturns the exit selection: existing DOM elements in the selection for which no new datum was found. (The exit selection is empty for selections not returned by [*selection*.data](#selection_data).)\n\nThe exit selection is typically used to remove “superfluous” elements corresponding to old data. For example, to update the DIV elements created previously with a new array of numbers:\n\n```js\ndiv = div.data([1, 2, 4, 8, 16, 32], d => d);\n```\n\nSince a key function was specified (as the identity function), and the new data contains the numbers [4, 8, 16] which match existing elements in the document, the update selection contains three DIV elements. Leaving those elements as-is, we can append new elements for [1, 2, 32] using the enter selection:\n\n```js\ndiv.enter().append(\"div\").text(d => d);\n```\n\nLikewise, to remove the exiting elements [15, 23, 42]:\n\n```js\ndiv.exit().remove();\n```\n\nNow the document body looks like this:\n\n```html\n
1
\n
2
\n
4
\n
8
\n
16
\n
32
\n```\n\nThe order of the DOM elements matches the order of the data because the old data’s order and the new data’s order were consistent. If the new data’s order is different, use [*selection*.order](#selection_order) to reorder the elements in the DOM. See the [General Update Pattern](http://bl.ocks.org/mbostock/3808218) example thread for more on data joins.\n\n# selection.datum([value]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/datum.js \"Source\")\n\nGets or sets the bound data for each selected element. Unlike [*selection*.data](#selection_data), this method does not compute a join and does not affect indexes or the enter and exit selections.\n\nIf a *value* is specified, sets the element’s bound data to the specified value on all selected elements. If the *value* is a constant, all elements are given the same datum; otherwise, if the *value* is 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 (*nodes*[*i*]). The function is then used to set each element’s new data. A null value will delete the bound data.\n\nIf a *value* is not specified, returns the bound datum for the first (non-null) element in the selection. This is generally useful only if you know the selection contains exactly one element.\n\nThis method is useful for accessing HTML5 [custom data attributes](http://www.w3.org/TR/html5/dom.html#custom-data-attribute). For example, given the following elements:\n\n```html\n
    \n
  • Shawn Allen
  • \n
  • Mike Bostock
  • \n
\n```\n\nYou can expose the custom data attributes by setting each element’s data as the built-in [dataset](http://www.w3.org/TR/html5/dom.html#dom-dataset) property:\n\n```js\nselection.datum(function() { return this.dataset; })\n```\n\n### Handling Events\n\nFor interaction, selections allow listening for and dispatching of events.\n\n# selection.on(typenames[, listener[, options]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js \"Source\")\n\nAdds or removes a *listener* to each selected element for the specified event *typenames*. The *typenames* is a string event type, such as `click`, `mouseover`, or `submit`; any [DOM event type](https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events) supported by your browser may be used. The 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 `click.foo` and `click.bar`. To specify multiple typenames, separate typenames with spaces, such as `input change` or `click.foo click.bar`.\n\nWhen a specified event is dispatched on a selected element, the specified *listener* will be evaluated for the element, being passed the current datum (*d*), the current index (*i*), and the current group (*nodes*), with *this* as the current DOM element (*nodes*[*i*]). 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. To access the current event within a listener, use [d3.event](#event).\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\nAn optional *options* object may specify characteristics about the event listener, such as whether it is capturing or passive; see [*element*.addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener).\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# selection.dispatch(type[, parameters]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/dispatch.js \"Source\")\n\nDispatches a [custom event](http://www.w3.org/TR/dom/#interface-customevent) of the specified *type* to each selected element, in order. An optional *parameters* map may be specified to set additional properties of the event. It may contain the following fields:\n\n* [`bubbles`](https://www.w3.org/TR/dom/#dom-event-bubbles) - if true, the event is dispatched to ancestors in reverse tree order.\n* [`cancelable`](https://www.w3.org/TR/dom/#dom-event-cancelable) - if true, *event*.preventDefault is allowed.\n* [`detail`](https://www.w3.org/TR/dom/#dom-customevent-detail) - any custom data associated with the event.\n\nIf *parameters* is 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 (*nodes*[*i*]). It must return the parameters map for the current element.\n\n# d3.event\n\nThe current [event](https://developer.mozilla.org/en-US/docs/DOM/event), if any. This is set during the invocation of an event listener, and is reset after the listener terminates. Use this to access standard event fields such as [*event*.timeStamp](https://www.w3.org/TR/dom/#dom-event-timestamp) and methods such as [*event*.preventDefault](https://www.w3.org/TR/dom/#dom-event-preventdefault). While you can use the native [*event*.pageX](https://developer.mozilla.org/en/DOM/event.pageX) and [*event*.pageY](https://developer.mozilla.org/en/DOM/event.pageY), it is often more convenient to transform the event position to the local coordinate system of the container that received the event using [d3.mouse](#mouse), [d3.touch](#touch) or [d3.touches](#touches).\n\nIf you use Babel, Webpack, or another ES6-to-ES5 bundler, be aware that the value of d3.event changes during an event! An import of d3.event must be a [live binding](http://www.2ality.com/2015/07/es6-module-exports.html), so you may need to configure the bundler to import from D3’s ES6 modules rather than from the generated UMD bundle; not all bundlers observe [jsnext:main](https://github.com/rollup/rollup/wiki/jsnext:main). Also beware of conflicts with the [*window*.event](https://developer.mozilla.org/en-US/docs/Web/API/Window/event) global.\n\n# d3.customEvent(event, listener[, that[, arguments]]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/on.js#L98 \"Source\")\n\nInvokes the specified *listener*, using the specified *that* `this` context and passing the specified *arguments*, if any. During the invocation, [d3.event](#event) is set to the specified *event*; after the listener returns (or throws an error), d3.event is restored to its previous value. In addition, sets *event*.sourceEvent to the prior value of d3.event, allowing custom events to retain a reference to the originating native event. Returns the value returned by the *listener*.\n\n# d3.mouse(container) [<>](https://github.com/d3/d3-selection/blob/master/src/mouse.js \"Source\")\n\nReturns the *x* and *y* coordinates of the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n# d3.touch(container[, touches], identifier) [<>](https://github.com/d3/d3-selection/blob/master/src/touch.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touch with the specified *identifier* associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*]. If there is no touch with the specified identifier in *touches*, returns null; this can be useful for ignoring touchmove events where the only some touches have moved. If *touches* is not specified, it defaults to the current event’s [changedTouches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/changedTouches) property.\n\n# d3.touches(container[, touches]) [<>](https://github.com/d3/d3-selection/blob/master/src/touches.js \"Source\")\n\nReturns the *x* and *y* coordinates of the touches associated with the [current event](#event) relative to the specified *container*. The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as an array of two-element arrays of numbers \\[\\[*x1*, *y1*], [*x2*, *y2*], …\\]. If *touches* is not specified, it defaults to the current event’s [touches](http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html#//apple_ref/javascript/instp/TouchEvent/touches) property.\n\n# d3.clientPoint(container, event) [<>](https://github.com/d3/d3-selection/blob/master/src/point.js \"Source\")\n\nReturns the *x* and *y* coordinates of the specified *event* relative to the specified *container*. (The *event* may also be a [touch](https://www.w3.org/TR/touch-events/#touch-interface).) The container may be an HTML or SVG container element, such as a [G element](http://www.w3.org/TR/SVG/struct.html#Groups) or an [SVG element](http://www.w3.org/TR/SVG/struct.html#SVGElement). The coordinates are returned as a two-element array of numbers [*x*, *y*].\n\n### Control Flow\n\nFor advanced usage, selections provide methods for custom control flow.\n\n# selection.each(function) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/each.js \"Source\")\n\nInvokes the specified *function* 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 (*nodes*[*i*]). 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, such as:\n\n```js\nparent.each(function(p, j) {\n d3.select(this)\n .selectAll(\".child\")\n .text(d => `child ${d.name} of ${p.name}`);\n});\n```\n\nSee [Sized Donut Multiples](http://bl.ocks.org/mbostock/4c5fad723c87d2fd8273) for an example.\n\n# selection.call(function[, arguments…]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/call.js \"Source\")\n\nInvokes the specified *function* exactly once, passing in this selection along with any optional *arguments*. Returns this selection. This is equivalent to invoking the function by hand but facilitates method chaining. For example, to set several styles in a reusable function:\n\n```js\nfunction name(selection, first, last) {\n selection\n .attr(\"first-name\", first)\n .attr(\"last-name\", last);\n}\n```\n\nNow say:\n\n```js\nd3.selectAll(\"div\").call(name, \"John\", \"Snow\");\n```\n\nThis is roughly equivalent to:\n\n```js\nname(d3.selectAll(\"div\"), \"John\", \"Snow\");\n```\n\nThe only difference is that *selection*.call always returns the *selection* and not the return value of the called *function*, `name`.\n\n# selection.empty() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js \"Source\")\n\nReturns true if this selection contains no (non-null) elements.\n\n# selection.nodes() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js \"Source\")\n\nReturns an array of all (non-null) elements in this selection.\n\n# selection.node() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/node.js \"Source\")\n\nReturns the first (non-null) element in this selection. If the selection is empty, returns null.\n\n# selection.size() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/size.js \"Source\")\n\nReturns the total number of elements in this selection.\n\n### Local Variables\n\nD3 locals allow you to define local state independent of data. For instance, when rendering [small multiples](http://bl.ocks.org/mbostock/e1192fe405703d8321a5187350910e08) of time-series data, you might want the same *x*-scale for all charts but distinct *y*-scales to compare the relative performance of each metric. D3 locals are scoped by DOM elements: on set, the value is stored on the given element; on get, the value is retrieved from given element or the nearest ancestor that defines it.\n\n# d3.local() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js \"Source\")\n\nDeclares a new local variable. For example:\n\n```js\nconst foo = d3.local();\n```\n\nLike `var`, each local is a distinct symbolic reference; unlike `var`, the value of each local is also scoped by the DOM.\n\n# local.set(node, value) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L18 \"Source\")\n\nSets the value of this local on the specified *node* to the *value*, and returns the specified *value*. This is often performed using [*selection*.each](#selection_each):\n\n```js\nselection.each(function(d) { foo.set(this, d.value); });\n```\n\nIf you are just setting a single variable, consider using [*selection*.property](#selection_property):\n\n```js\nselection.property(foo, d => d.value);\n```\n\n# local.get(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L13 \"Source\")\n\nReturns the value of this local on the specified *node*. If the *node* does not define this local, returns the value from the nearest ancestor that defines it. Returns undefined if no ancestor defines this local.\n\n# local.remove(node) [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L21 \"Source\")\n\nDeletes this local’s value from the specified *node*. Returns true if the *node* defined this local prior to removal, and false otherwise. If ancestors also define this local, those definitions are unaffected, and thus [*local*.get](#local_get) will still return the inherited value.\n\n# local.toString() [<>](https://github.com/d3/d3-selection/blob/master/src/local.js#L24 \"Source\")\n\nReturns the automatically-generated identifier for this local. This is the name of the property that is used to store the local’s value on elements, and thus you can also set or get the local’s value using *element*[*local*] or by using [*selection*.property](#selection_property).\n\n### Namespaces\n\nXML namespaces are fun! Right? Fortunately you can mostly ignore them.\n\n# d3.namespace(name) [<>](https://github.com/d3/d3-selection/blob/master/src/namespace.js \"Source\")\n\nQualifies the specified *name*, which may or may not have a namespace prefix. If the name contains a colon (`:`), the substring before the colon is interpreted as the namespace prefix, which must be registered in [d3.namespaces](#namespaces). Returns an object `space` and `local` attributes describing the full namespace URL and the local name. For example:\n\n```js\nd3.namespace(\"svg:text\"); // {space: \"http://www.w3.org/2000/svg\", local: \"text\"}\n```\n\nIf the name does not contain a colon, this function merely returns the input name.\n\n# d3.namespaces [<>](https://github.com/d3/d3-selection/blob/master/src/namespaces.js \"Source\")\n\nThe map of registered namespace prefixes. The initial value is:\n\n```js\n{\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: \"http://www.w3.org/1999/xhtml\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n}\n```\n\nAdditional prefixes may be assigned as needed to create elements or attributes in other namespaces.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-selection", "error": "[Circular]", "extraneous": false, "_deduped": "d3-selection" }, "d3-transition": { "_from": "d3-transition@1", "_id": "d3-transition@1.3.2", "_inBundle": false, "_integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", "_location": "/d3-transition", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", "_shasum": "a98ef2151be8d8600543434c1ca80140ae23b398", "_spec": "d3-transition@1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/d3", "author": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Animated transitions for D3 selections.", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://d3js.org/d3-transition/", "jsdelivr": "dist/d3-transition.min.js", "keywords": "[Circular]", "license": "BSD-3-Clause", "main": "dist/d3-transition.js", "module": "src/index.js", "name": "d3-transition", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": true, "unpkg": "dist/d3-transition.min.js", "version": "1.3.2", "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.v1.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\n\n\n\n\n\n\n\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# selection.transition([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/selection/transition.js \"Source\")\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# selection.interrupt([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/selection/interrupt.js \"Source\")\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# d3.interrupt(node[, name]) [<>](https://github.com/d3/d3-transition/blob/master/src/interrupt.js \"Source\")\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# d3.transition([name]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/index.js#L29 \"Source\")\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# transition.select(selector) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/select.js \"Source\")\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` and index `i`, with the `this` context 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# transition.selectAll(selector) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/selectAll.js \"Source\")\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` and index `i`, with the `this` context 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# transition.filter(filter) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/filter.js \"Source\")\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` and index `i`, with the `this` context 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# transition.merge(other) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/merge.js \"Source\")\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# transition.transition() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/transition.js \"Source\")\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# transition.selection() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/selection.js \"Source\")\n\nReturns the [selection](https://github.com/d3/d3-selection#selection) corresponding to this transition.\n\n# d3.active(node[, name]) [<>](https://github.com/d3/d3-transition/blob/master/src/active.js \"Source\")\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](http://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# transition.attr(name, value) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/attr.js \"Source\")\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` and index `i`, with the `this` context 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# transition.attrTween(name[, factory]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/attrTween.js \"Source\")\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` 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 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](http://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# transition.style(name, value[, priority]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/style.js \"Source\")\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` and index `i`, with the `this` context 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# transition.styleTween(name[, factory[, priority]])) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/styleTween.js \"Source\")\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` 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 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# transition.text(value) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/text.js \"Source\")\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` and index `i`, with the `this` context 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) ([for example](http://bl.ocks.org/mbostock/7004f92cac972edef365)) or append a replacement element and cross-fade opacity ([for example](http://bl.ocks.org/mbostock/f7dcecb19c4af317e464)). Text is not interpolated by default because it is usually undesirable.\n\n# transition.textTween(factory) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/textTween.js \"Source\")\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# transition.remove() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/remove.js \"Source\")\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# transition.tween(name[, value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/tween.js \"Source\")\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` and index `i`, with the `this` context 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](http://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](http://bl.ocks.org/mbostock/3885705) of elements, improving perception. See [Animated Transitions in Statistical Data Graphics](http://vis.berkeley.edu/papers/animated_transitions/) for recommendations.\n\n# transition.delay([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/delay.js \"Source\")\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` and index `i`, with the `this` context 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# transition.duration([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/duration.js \"Source\")\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` and index `i`, with the `this` context 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# transition.ease([value]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/ease.js \"Source\")\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### Control Flow\n\nFor advanced usage, transitions provide methods for custom control flow.\n\n# transition.end() [<>](https://github.com/d3/d3-transition/blob/master/src/transition/end.js \"Source\")\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# transition.on(typenames[, listener]) [<>](https://github.com/d3/d3-transition/blob/master/src/transition/on.js \"Source\")\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` and index `i`, with the `this` context 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# transition.each(function) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/each.js \"Source\")\n\nInvokes the specified *function* for each selected element, passing in the current datum `d` and index `i`, with the `this` context of 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# transition.call(function[, arguments…]) [<>](https://github.com/d3/d3-selection/blob/master/src/selection/call.js \"Source\")\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# transition.empty() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/empty.js \"Source\")\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# transition.nodes() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/nodes.js \"Source\")\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# transition.node() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/node.js \"Source\")\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# transition.size() [<>](https://github.com/d3/d3-selection/blob/master/src/selection/size.js \"Source\")\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", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-transition", "error": "[Circular]", "extraneous": false, "_deduped": "d3-transition" } }, "deprecated": false, "description": "Pan and zoom SVG, HTML or Canvas using mouse or touch input.", "devDependencies": { "eslint": "6", "rollup": "1", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "src/**/*.js" ], "homepage": "https://d3js.org/d3-zoom/", "jsdelivr": "dist/d3-zoom.min.js", "keywords": [ "d3", "d3-module", "zoom", "behavior", "interaction" ], "license": "BSD-3-Clause", "main": "dist/d3-zoom.js", "module": "src/index.js", "name": "d3-zoom", "repository": { "type": "git", "url": "git+https://github.com/d3/d3-zoom.git" }, "scripts": { "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", "prepublishOnly": "rm -rf dist && yarn test", "pretest": "rollup -c", "test": "tape 'test/**/*-test.js' && eslint src" }, "unpkg": "dist/d3-zoom.min.js", "version": "1.8.3", "readme": "# d3-zoom\n\nPanning and zooming are popular interaction techniques which let the user focus on a region of interest by restricting the view. It is easy to learn due to direct manipulation: click-and-drag to pan (translate), spin the wheel to zoom (scale), or use touch. Panning and zooming are widely used in web-based mapping, but can also be used with visualizations such as time-series and scatterplots.\n\nThe zoom behavior implemented by d3-zoom is a convenient but flexible abstraction for enabling pan-and-zoom on [selections](https://github.com/d3/d3-selection). It handles a surprising variety of [input events](#api-reference ) and browser quirks. The zoom behavior is agnostic about the DOM, so you can use it with SVG, HTML or Canvas.\n\n[\"Canvas](https://bl.ocks.org/mbostock/d1f7b58631e71fbf9c568345ee04a60e)[\"SVG](https://bl.ocks.org/mbostock/4e3925cdc804db257a86fdef3a032a45)\n\nThe zoom behavior is also designed to work with [d3-scale](https://github.com/d3/d3-scale) and [d3-axis](https://github.com/d3/d3-axis); see [*transform*.rescaleX](#transform_rescaleX) and [*transform*.rescaleY](#transform_rescaleY). You can also restrict zooming using [*zoom*.scaleExtent](#zoom_scaleExtent) and panning using [*zoom*.translateExtent](#zoom_translateExtent).\n\n[\"Axis](https://bl.ocks.org/mbostock/db6b4335bf1662b413e7968910104f0f)\n\nThe zoom behavior can be combined with other behaviors, such as [d3-drag](https://github.com/d3/d3-drag) for dragging, and [d3-brush](https://github.com/d3/d3-brush) for focus + context.\n\n[\"Drag](https://bl.ocks.org/mbostock/3127661b6f13f9316be745e77fdfb084)[\"Brush](https://bl.ocks.org/mbostock/34f08d5e11952a80609169b7917d4172)\n\nThe zoom behavior can be controlled programmatically using [*zoom*.transform](#zoom_transform), allowing you to implement user interface controls which drive the display or to stage animated tours through your data. Smooth zoom transitions are based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf) by Jarke J. van Wijk and Wim A.A. Nuij.\n\n[\"Zoom](https://bl.ocks.org/mbostock/b783fbb2e673561d214e09c7fb5cedee)\n\nSee also [d3-tile](https://github.com/d3/d3-tile) for examples panning and zooming maps.\n\n## Installing\n\nIf you use NPM, `npm install d3-zoom`. Otherwise, download the [latest release](https://github.com/d3/d3-zoom/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-zoom.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\n\n\n\n\n\n\n\n\n\n```\n\n[Try d3-zoom in your browser.](https://tonicdev.com/npm/d3-zoom)\n\n## API Reference\n\nThis table describes how the zoom behavior interprets native events:\n\n| Event | Listening Element | Zoom Event | Default Prevented? |\n| ------------ | ----------------- | ----------- | ------------------ |\n| mousedown⁵ | selection | start | no¹ |\n| mousemove² | window¹ | zoom | yes |\n| mouseup² | window¹ | end | yes |\n| dragstart² | window | - | yes |\n| selectstart² | window | - | yes |\n| click³ | window | - | yes |\n| dblclick | selection | *multiple*⁶ | yes |\n| wheel⁸ | selection | zoom⁷ | yes |\n| touchstart | selection | *multiple*⁶ | no⁴ |\n| touchmove | selection | zoom | yes |\n| touchend | selection | end | no⁴ |\n| touchcancel | selection | end | no⁴ |\n\nThe propagation of all consumed events is [immediately stopped](https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation).\n\n¹ Necessary to capture events outside an iframe; see [d3-drag#9](https://github.com/d3/d3-drag/issues/9).\n
² Only applies during an active, mouse-based gesture; see [d3-drag#9](https://github.com/d3/d3-drag/issues/9).\n
³ Only applies immediately after some mouse-based gestures; see [*zoom*.clickDistance](#zoom_clickDistance).\n
⁴ Necessary to allow [click emulation](https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7) on touch input; see [d3-drag#9](https://github.com/d3/d3-drag/issues/9).\n
⁵ Ignored if within 500ms of a touch gesture ending; assumes [click emulation](https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7).\n
⁶ Double-click and double-tap initiate a transition that emits start, zoom and end events.\n
⁷ The first wheel event emits a start event; an end event is emitted when no wheel events are received for 150ms.\n
⁸ Ignored if already at the corresponding limit of the [scale extent](#zoom_scaleExtent).\n\n# d3.zoom() [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nCreates a new zoom behavior. The returned behavior, [*zoom*](#_drag), is both an object and a function, and is typically applied to selected elements via [*selection*.call](https://github.com/d3/d3-selection#selection_call).\n\n# zoom(selection) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nApplies this zoom behavior to the specified [*selection*](https://github.com/d3/d3-selection), binding the necessary event listeners to allow panning and zooming, and initializing the [zoom transform](#zoom-transforms) on each selected element to the identity transform if not already defined. This function is typically not invoked directly, and is instead invoked via [*selection*.call](https://github.com/d3/d3-selection#selection_call). For example, to instantiate a zoom behavior and apply it to a selection:\n\n```js\nselection.call(d3.zoom().on(\"zoom\", zoomed));\n```\n\nInternally, the zoom behavior uses [*selection*.on](https://github.com/d3/d3-selection#selection_on) to bind the necessary event listeners for zooming. The listeners use the name `.zoom`, so you can subsequently unbind the zoom behavior as follows:\n\n```js\nselection.on(\".zoom\", null);\n```\n\nTo disable just wheel-driven zooming (say to not interfere with native scrolling), you can remove the zoom behavior’s wheel event listener after applying the zoom behavior to the selection:\n\n```js\nselection\n .call(zoom)\n .on(\"wheel.zoom\", null);\n```\n\nAlternatively, use [*zoom*.filter](#zoom_filter) for greater control over which events can initiate zoom gestures.\n\nApplying the zoom behavior also sets the [-webkit-tap-highlight-color](https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/AdjustingtheTextSize/AdjustingtheTextSize.html#//apple_ref/doc/uid/TP40006510-SW5) style to transparent, disabling the tap highlight on iOS. If you want a different tap highlight color, remove or re-apply this style after applying the drag behavior.\n\n# zoom.transform(selection, transform[, point]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *selection* is a selection, sets the [current zoom transform](#zoomTransform) of the selected elements to the specified *transform*, instantaneously emitting start, zoom and end [events](#zoom-events). If *selection* is a transition, defines a “zoom” tween to the specified *transform* using [d3.interpolateZoom](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolateZoom), emitting a start event when the transition starts, zoom events for each tick of the transition, and then an end event when the transition ends (or is interrupted). The transition will attempt to minimize the visual movement around the specified *point*; if the *point* is not specified, it defaults to the center of the viewport [extent](#zoom_extent). The *transform* may be specified either as a [zoom transform](#zoom-transforms) or as a function that returns a zoom transform; similarly, the *point* may be specified either as a two-element array [*x*, *y*] or a function that returns such an array. If a function, it is invoked for each selected element, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\nThis function is typically not invoked directly, and is instead invoked via [*selection*.call](https://github.com/d3/d3-selection#selection_call) or [*transition*.call](https://github.com/d3/d3-transition#transition_call). For example, to reset the zoom transform to the [identity transform](#zoomIdentity) instantaneously:\n\n```js\nselection.call(zoom.transform, d3.zoomIdentity);\n```\n\nTo smoothly reset the zoom transform to the identity transform over 750 milliseconds:\n\n```js\nselection.transition().duration(750).call(zoom.transform, d3.zoomIdentity);\n```\n\nThis method requires that you specify the new zoom transform completely, and does not enforce the defined [scale extent](#zoom_scaleExtent) and [translate extent](#zoom_translateExtent), if any. To derive a new transform from the existing transform, and to enforce the scale and translate extents, see the convenience methods [*zoom*.translateBy](#zoom_translateBy), [*zoom*.scaleBy](#zoom_scaleBy) and [*zoom*.scaleTo](#zoom_scaleTo).\n\n# zoom.translateBy(selection, x, y) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *selection* is a selection, [translates](#transform_translate) the [current zoom transform](#zoomTransform) of the selected elements by *x* and *y*, such that the new *tx1* = *tx0* + *kx* and *ty1* = *ty0* + *ky*. If *selection* is a transition, defines a “zoom” tween translating the current transform. This method is a convenience method for [*zoom*.transform](#zoom_transform). The *x* and *y* translation amounts may be specified either as numbers or as functions that returns numbers. If a function, it is invoked for each selected element, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\n# zoom.translateTo(selection, x, y[, p]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *selection* is a selection, [translates](#transform_translate) the [current zoom transform](#zoomTransform) of the selected elements such that the given position ⟨*x*,*y*⟩ appears at given point *p*. The new *tx* = *px* - *kx* and *ty* = *py* - *ky*. If *p* is not specified, it defaults to the center of the viewport [extent](#zoom_extent). If *selection* is a transition, defines a “zoom” tween translating the current transform. This method is a convenience method for [*zoom*.transform](#zoom_transform). The *x* and *y* coordinates may be specified either as numbers or as functions that returns numbers; similarly the *p* point may be specified either as a two-element array [*px*,*py*] or a function. If a function, it is invoked for each selected element, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\n# zoom.scaleBy(selection, k[, p]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *selection* is a selection, [scales](#transform_scale) the [current zoom transform](#zoomTransform) of the selected elements by *k*, such that the new *k₁* = *k₀k*. The reference point *p* does move. If *p* is not specified, it defaults to the center of the viewport [extent](#zoom_extent). If *selection* is a transition, defines a “zoom” tween translating the current transform. This method is a convenience method for [*zoom*.transform](#zoom_transform). The *k* scale factor may be specified either as a number or a function that returns a number; similarly the *p* point may be specified either as a two-element array [*px*,*py*] or a function. If a function, it is invoked for each selected element, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\n# zoom.scaleTo(selection, k[, p]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *selection* is a selection, [scales](#transform_scale) the [current zoom transform](#zoomTransform) of the selected elements to *k*, such that the new *k₁* = *k*. The reference point *p* does move. If *p* is not specified, it defaults to the center of the viewport [extent](#zoom_extent). If *selection* is a transition, defines a “zoom” tween translating the current transform. This method is a convenience method for [*zoom*.transform](#zoom_transform). The *k* scale factor may be specified either as a number or a function that returns a number; similarly the *p* point may be specified either as a two-element array [*px*,*py*] or a function. If a function, it is invoked for each selected element, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\n# zoom.constrain([constrain]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *constrain* is specified, sets the transform constraint function to the specified function and returns the zoom behavior. If *constrain* is not specified, returns the current constraint function, which defaults to:\n\n```js\nfunction constrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n```\n\nThe constraint function must return a [*transform*](#zoom-transforms) given the current *transform*, [viewport extent](#zoom_extent) and [translate extent](#zoom_translateExtent). The default implementation attempts to ensure that the viewport extent does not go outside the translate extent.\n\n# zoom.filter([filter]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *filter* is specified, sets the filter to the specified function and returns the zoom behavior. If *filter* is not specified, returns the current filter, which defaults to:\n\n```js\nfunction filter() {\n return !d3.event.ctrlKey && !d3.event.button;\n}\n```\n\nIf the filter returns falsey, the initiating event is ignored and no zoom gestures are started. Thus, the filter determines which input events are ignored. The default filter ignores mousedown events on secondary buttons, since those buttons are typically intended for other purposes, such as the context menu.\n\n# zoom.touchable([touchable]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *touchable* is specified, sets the touch support detector to the specified function and returns the zoom behavior. If *touchable* is not specified, returns the current touch support detector, which defaults to:\n\n```js\nfunction touchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n```\n\nTouch event listeners are only registered if the detector returns truthy for the corresponding element when the zoom behavior is [applied](#_zoom). The default detector works well for most browsers that are capable of touch input, but not all; Chrome’s mobile device emulator, for example, fails detection.\n\n# zoom.wheelDelta([delta]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *delta* is specified, sets the wheel delta function to the specified function and returns the zoom behavior. If *delta* is not specified, returns the current wheel delta function, which defaults to:\n\n```js\nfunction wheelDelta() {\n return -d3.event.deltaY * (d3.event.deltaMode === 1 ? 0.05 : d3.event.deltaMode ? 1 : 0.002);\n}\n```\n\nThe value *Δ* returned by the wheel delta function determines the amount of scaling applied in response to a [WheelEvent](https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent). The scale factor [*transform*.k](#zoomTransform) is multiplied by 2*Δ*; for example, a *Δ* of +1 doubles the scale factor, *Δ* of -1 halves the scale factor.\n\n# zoom.extent([extent]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *extent* is specified, sets the viewport extent to the specified array of points [[*x0*, *y0*], [*x1*, *y1*]], where [*x0*, *y0*] is the top-left corner of the viewport and [*x1*, *y1*] is the bottom-right corner of the viewport, and returns this zoom behavior. The *extent* may also be specified as a function which returns such an array; if a function, it is invoked for each selected element, being passed the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\nIf *extent* is not specified, returns the current extent accessor, which defaults to [[0, 0], [*width*, *height*]] where *width* is the [client width](https://developer.mozilla.org/en-US/docs/Web/API/Element/clientWidth) of the element and *height* is its [client height](https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight); for SVG elements, the nearest ancestor SVG element’s viewBox, or [width](https://www.w3.org/TR/SVG/struct.html#SVGElementWidthAttribute) and [height](https://www.w3.org/TR/SVG/struct.html#SVGElementHeightAttribute) attributes, are used. Alternatively, consider using [*element*.getBoundingClientRect](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\n\nThe viewport extent affects several functions: the center of the viewport remains fixed during changes by [*zoom*.scaleBy](#zoom_scaleBy) and [*zoom*.scaleTo](#zoom_scaleTo); the viewport center and dimensions affect the path chosen by [d3.interpolateZoom](https://github.com/d3/d3-interpolate#interpolateZoom); and the viewport extent is needed to enforce the optional [translate extent](#zoom_translateExtent).\n\n# zoom.scaleExtent([extent]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *extent* is specified, sets the scale extent to the specified array of numbers [*k0*, *k1*] where *k0* is the minimum allowed scale factor and *k1* is the maximum allowed scale factor, and returns this zoom behavior. If *extent* is not specified, returns the current scale extent, which defaults to [0, ∞]. The scale extent restricts zooming in and out. It is enforced on interaction and when using [*zoom*.scaleBy](#zoom_scaleBy), [*zoom*.scaleTo](#zoom_scaleTo) and [*zoom*.translateBy](#zoom_translateBy); however, it is not enforced when using [*zoom*.transform](#zoom_transform) to set the transform explicitly.\n\nIf the user tries to zoom by wheeling when already at the corresponding limit of the scale extent, the wheel events will be ignored and not initiate a zoom gesture. This allows the user to scroll down past a zoomable area after zooming in, or to scroll up after zooming out. If you would prefer to always prevent scrolling on wheel input regardless of the scale extent, register a wheel event listener to prevent the browser default behavior:\n\n```js\nselection\n .call(zoom)\n .on(\"wheel\", function() { d3.event.preventDefault(); });\n```\n\n# zoom.translateExtent([extent]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *extent* is specified, sets the translate extent to the specified array of points [[*x0*, *y0*], [*x1*, *y1*]], where [*x0*, *y0*] is the top-left corner of the world and [*x1*, *y1*] is the bottom-right corner of the world, and returns this zoom behavior. If *extent* is not specified, returns the current translate extent, which defaults to [[-∞, -∞], [+∞, +∞]]. The translate extent restricts panning, and may cause translation on zoom out. It is enforced on interaction and when using [*zoom*.scaleBy](#zoom_scaleBy), [*zoom*.scaleTo](#zoom_scaleTo) and [*zoom*.translateBy](#zoom_translateBy); however, it is not enforced when using [*zoom*.transform](#zoom_transform) to set the transform explicitly.\n\n# zoom.clickDistance([distance]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *distance* is specified, sets the maximum distance that the mouse can move between mousedown and mouseup that will trigger a subsequent click event. If at any point between mousedown and mouseup the mouse is greater than or equal to *distance* from its position on mousedown, the click event following mouseup will be suppressed. If *distance* is not specified, returns the current distance threshold, which defaults to zero. The distance threshold is measured in client coordinates ([*event*.clientX](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientX) and [*event*.clientY](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientY)).\n\n# zoom.duration([duration]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *duration* is specified, sets the duration for zoom transitions on double-click and double-tap to the specified number of milliseconds and returns the zoom behavior. If *duration* is not specified, returns the current duration, which defaults to 250 milliseconds. If the duration is not greater than zero, double-click and -tap trigger instantaneous changes to the zoom transform rather than initiating smooth transitions.\n\nTo disable double-click and double-tap transitions, you can remove the zoom behavior’s dblclick event listener after applying the zoom behavior to the selection:\n\n```js\nselection\n .call(zoom)\n .on(\"dblclick.zoom\", null);\n```\n\n# zoom.interpolate([interpolate]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *interpolate* is specified, sets the interpolation factory for zoom transitions to the specified function. If *interpolate* is not specified, returns the current interpolation factory, which defaults to [d3.interpolateZoom](https://github.com/d3/d3-interpolate#interpolateZoom) to implement smooth zooming. To apply direct interpolation between two views, try [d3.interpolate](https://github.com/d3/d3-interpolate#interpolate) instead.\n\n# zoom.on(typenames[, listener]) [<>](https://github.com/d3/d3-zoom/blob/master/src/zoom.js \"Source\")\n\nIf *listener* is specified, sets the event *listener* for the specified *typenames* and returns the zoom behavior. If an event listener was already registered for the same type and name, the existing listener is removed before the new listener is added. If *listener* is null, removes the current event listeners for the specified *typenames*, if any. If *listener* is not specified, returns the first currently-assigned listener matching the specified *typenames*, if any. When a specified event is dispatched, each *listener* will be invoked with the same context and arguments as [*selection*.on](https://github.com/d3/d3-selection#selection_on) listeners: the current datum `d` and index `i`, with the `this` context as the current DOM element.\n\nThe *typenames* is a string containing one or more *typename* separated by whitespace. Each *typename* is a *type*, optionally followed by a period (`.`) and a *name*, such as `zoom.foo` and `zoom.bar`; the name allows multiple listeners to be registered for the same *type*. The *type* must be one of the following:\n\n* `start` - after zooming begins (such as on mousedown).\n* `zoom` - after a change to the zoom transform (such as on mousemove).\n* `end` - after zooming ends (such as on mouseup ).\n\nSee [*dispatch*.on](https://github.com/d3/d3-dispatch#dispatch_on) for more.\n\n### Zoom Events\n\nWhen a [zoom event listener](#zoom_on) is invoked, [d3.event](https://github.com/d3/d3-selection#event) is set to the current zoom event. The *event* object exposes several fields:\n\n* *event*.target - the associated [zoom behavior](#zoom).\n* *event*.type - the string “start”, “zoom” or “end”; see [*zoom*.on](#zoom_on).\n* *event*.transform - the current [zoom transform](#zoom-transforms).\n* *event*.sourceEvent - the underlying input event, such as mousemove or touchmove.\n\n### Zoom Transforms\n\nThe zoom behavior stores the zoom state on the element to which the zoom behavior was [applied](#_zoom), not on the zoom behavior itself. This is because the zoom behavior can be applied to many elements simultaneously, and each element can be zoomed independently. The zoom state can change either on user interaction or programmatically via [*zoom*.transform](#zoom_transform).\n\nTo retrieve the zoom state, use *event*.transform on the current [zoom event](#zoom-events) within a zoom event listener (see [*zoom*.on](#zoom_on)), or use [d3.zoomTransform](#zoomTransform) for a given node. The latter is particularly useful for modifying the zoom state programmatically, say to implement buttons for zooming in and out.\n\n# d3.zoomTransform(node) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns the current transform for the specified *node*. Note that *node* should typically be a DOM element, not a *selection*. (A selection may consist of multiple nodes, in different states, and this function only returns a single transform.) If you have a selection, call [*selection*.node](https://github.com/d3/d3-selection#selection_node) first:\n\n```js\nvar transform = d3.zoomTransform(selection.node());\n```\n\nIn the context of an [event listener](https://github.com/d3/d3-selection#selection_on), the *node* is typically the element that received the input event (which should be equal to [*event*.transform](#zoom-events)), *this*:\n\n```js\nvar transform = d3.zoomTransform(this);\n```\n\nInternally, an element’s transform is stored as *element*.\\_\\_zoom; however, you should use this method rather than accessing it directly. If the given *node* has no defined transform, returns the transform of the closest ancestor, or if none exists, the [identity transformation](#zoomIdentity). The returned transform represents a two-dimensional [transformation matrix](https://en.wikipedia.org/wiki/Transformation_matrix#Affine_transformations) of the form:\n\n*k* 0 *tx*\n
0 *k* *ty*\n
0 0 1\n\n(This matrix is capable of representing only scale and translation; a future release may also allow rotation, though this would probably not be a backwards-compatible change.) The position ⟨*x*,*y*⟩ is transformed to ⟨*xk* + *tx*,*yk* + *ty*⟩. The transform object exposes the following properties:\n\n* *transform*.x - the translation amount *tx* along the *x*-axis.\n* *transform*.y - the translation amount *ty* along the *y*-axis.\n* *transform*.k - the scale factor *k*.\n\nThese properties should be considered read-only; instead of mutating a transform, use [*transform*.scale](#transform_scale) and [*transform*.translate](#transform_translate) to derive a new transform. Also see [*zoom*.scaleBy](#zoom_scaleBy), [*zoom*.scaleTo](#zoom_scaleTo) and [*zoom*.translateBy](#zoom_translateBy) for convenience methods on the zoom behavior. To create a transform with a given *k*, *tx*, and *ty*:\n\n```js\nvar t = d3.zoomIdentity.translate(x, y).scale(k);\n```\n\nTo apply the transformation to a [Canvas 2D context](https://www.w3.org/TR/2dcontext/), use [*context*.translate](https://www.w3.org/TR/2dcontext/#dom-context-2d-translate) followed by [*context*.scale](https://www.w3.org/TR/2dcontext/#dom-context-2d-scale):\n\n```js\ncontext.translate(transform.x, transform.y);\ncontext.scale(transform.k, transform.k);\n```\n\nSimilarly, to apply the transformation to HTML elements via [CSS](https://www.w3.org/TR/css-transforms-1/):\n\n```js\ndiv.style(\"transform\", \"translate(\" + transform.x + \"px,\" + transform.y + \"px) scale(\" + transform.k + \")\");\ndiv.style(\"transform-origin\", \"0 0\");\n```\n\nTo apply the transformation to [SVG](https://www.w3.org/TR/SVG/coords.html#TransformAttribute):\n\n```js\ng.attr(\"transform\", \"translate(\" + transform.x + \",\" + transform.y + \") scale(\" + transform.k + \")\");\n```\n\nOr more simply, taking advantage of [*transform*.toString](#transform_toString):\n\n```js\ng.attr(\"transform\", transform);\n```\n\nNote that the order of transformations matters! The translate must be applied before the scale.\n\n# transform.scale(k) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns a transform whose scale *k₁* is equal to *k₀k*, where *k₀* is this transform’s scale.\n\n# transform.translate(x, y) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns a transform whose translation *tx1* and *ty1* is equal to *tx0* + *x* and *ty0* + *y*, where *tx0* and *ty0* is this transform’s translation.\n\n# transform.apply(point) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns the transformation of the specified *point* which is a two-element array of numbers [*x*, *y*]. The returned point is equal to [*xk* + *tx*, *yk* + *ty*].\n\n# transform.applyX(x) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns the transformation of the specified *x*-coordinate, *xk* + *tx*.\n\n# transform.applyY(y) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns the transformation of the specified *y*-coordinate, *yk* + *ty*.\n\n# transform.invert(point) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns the inverse transformation of the specified *point* which is a two-element array of numbers [*x*, *y*]. The returned point is equal to [(*x* - *tx*) / *k*, (*y* - *ty*) / *k*].\n\n# transform.invertX(x) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns the inverse transformation of the specified *x*-coordinate, (*x* - *tx*) / *k*.\n\n# transform.invertY(y) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns the inverse transformation of the specified *y*-coordinate, (*y* - *ty*) / *k*.\n\n# transform.rescaleX(x) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns a [copy](https://github.com/d3/d3-scale#continuous_copy) of the [continuous scale](https://github.com/d3/d3-scale#continuous-scales) *x* whose [domain](https://github.com/d3/d3-scale#continuous_domain) is transformed. This is implemented by first applying the [inverse *x*-transform](#transform_invertX) on the scale’s [range](https://github.com/d3/d3-scale#continuous_range), and then applying the [inverse scale](https://github.com/d3/d3-scale#continuous_invert) to compute the corresponding domain:\n\n```js\nfunction rescaleX(x) {\n var range = x.range().map(transform.invertX, transform),\n domain = range.map(x.invert, x);\n return x.copy().domain(domain);\n}\n```\n\nThe scale *x* must use [d3.interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber); do not use [*continuous*.rangeRound](https://github.com/d3/d3-scale#continuous_rangeRound) as this reduces the accuracy of [*continuous*.invert](https://github.com/d3/d3-scale#continuous_invert) and can lead to an inaccurate rescaled domain. This method does not modify the input scale *x*; *x* thus represents the untransformed scale, while the returned scale represents its transformed view.\n\n# transform.rescaleY(y) [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns a [copy](https://github.com/d3/d3-scale#continuous_copy) of the [continuous scale](https://github.com/d3/d3-scale#continuous-scales) *y* whose [domain](https://github.com/d3/d3-scale#continuous_domain) is transformed. This is implemented by first applying the [inverse *y*-transform](#transform_invertY) on the scale’s [range](https://github.com/d3/d3-scale#continuous_range), and then applying the [inverse scale](https://github.com/d3/d3-scale#continuous_invert) to compute the corresponding domain:\n\n```js\nfunction rescaleY(y) {\n var range = y.range().map(transform.invertY, transform),\n domain = range.map(y.invert, y);\n return y.copy().domain(domain);\n}\n```\n\nThe scale *y* must use [d3.interpolateNumber](https://github.com/d3/d3-interpolate#interpolateNumber); do not use [*continuous*.rangeRound](https://github.com/d3/d3-scale#continuous_rangeRound) as this reduces the accuracy of [*continuous*.invert](https://github.com/d3/d3-scale#continuous_invert) and can lead to an inaccurate rescaled domain. This method does not modify the input scale *y*; *y* thus represents the untransformed scale, while the returned scale represents its transformed view.\n\n# transform.toString() [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nReturns a string representing the [SVG transform](https://www.w3.org/TR/SVG/coords.html#TransformAttribute) corresponding to this transform. Implemented as:\n\n```js\nfunction toString() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n}\n```\n\n# d3.zoomIdentity [<>](https://github.com/d3/d3-zoom/blob/master/src/transform.js \"Source\")\n\nThe identity transform, where *k* = 1, *tx* = *ty* = 0.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-dispatch": "1", "d3-drag": "1", "d3-interpolate": "1", "d3-selection": "1", "d3-transition": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3-zoom", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Data-Driven Documents", "devDependencies": { "json2module": "0.0", "rimraf": "2", "rollup": "1", "rollup-plugin-ascii": "0.0", "rollup-plugin-node-resolve": "3", "rollup-plugin-terser": "5", "tape": "4" }, "files": [ "dist/**/*.js", "index.js" ], "homepage": "https://d3js.org", "jsdelivr": "dist/d3.min.js", "keywords": [ "dom", "visualization", "svg", "animation", "canvas" ], "license": "BSD-3-Clause", "main": "dist/d3.node.js", "module": "index.js", "name": "d3", "repository": { "type": "git", "url": "git+https://github.com/d3/d3.git" }, "scripts": { "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \"d3 ${npm_package_version}\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \"${npm_package_version}\" && git tag -am \"${npm_package_version}\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js", "prepublishOnly": "yarn test", "pretest": "rimraf dist && mkdir dist && json2module package.json > dist/package.js && rollup -c", "test": "tape 'test/**/*-test.js'" }, "unpkg": "dist/d3.min.js", "version": "5.16.0", "readme": "# D3: Data-Driven Documents\n\n\n\n**D3** (or **D3.js**) is a JavaScript library for visualizing data using web standards. D3 helps you bring data to life using SVG, Canvas and HTML. D3 combines powerful visualization and interaction techniques with a data-driven approach to DOM manipulation, giving you the full capabilities of modern browsers and the freedom to design the right visual interface for your data.\n\n## Resources\n\n* [Introduction](https://observablehq.com/@d3/learn-d3)\n* [API Reference](https://github.com/d3/d3/blob/master/API.md)\n* [Releases](https://github.com/d3/d3/releases)\n* [Examples](https://observablehq.com/@d3/gallery)\n* [Wiki](https://github.com/d3/d3/wiki)\n\n## Installing\n\nIf you use npm, `npm install d3`. Otherwise, download the [latest release](https://github.com/d3/d3/releases/latest). The released bundle supports anonymous AMD, CommonJS, and vanilla environments. You can load directly from [d3js.org](https://d3js.org), [CDNJS](https://cdnjs.com/libraries/d3), or [unpkg](https://unpkg.com/d3/). For example:\n\n```html\n\n```\n\nFor the minified version:\n\n```html\n\n```\n\nYou can also use the standalone D3 microlibraries. For example, [d3-selection](https://github.com/d3/d3-selection):\n\n```html\n\n```\n\nD3 is written using [ES2015 modules](http://www.2ality.com/2014/09/es6-modules-final.html). Create a [custom bundle using Rollup](https://bl.ocks.org/mbostock/bb09af4c39c79cffcde4), Webpack, or your preferred bundler. To import D3 into an ES2015 application, either import specific symbols from specific D3 modules:\n\n```js\nimport {scaleLinear} from \"d3-scale\";\n```\n\nOr import everything into a namespace (here, `d3`):\n\n```js\nimport * as d3 from \"d3\";\n```\n\nIn Node:\n\n```js\nvar d3 = require(\"d3\");\n```\n\nYou can also require individual modules and combine them into a `d3` object using [Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign):\n\n```js\nvar d3 = Object.assign({}, require(\"d3-format\"), require(\"d3-geo\"), require(\"d3-geo-projection\"));\n```\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "d3-array": "1", "d3-axis": "1", "d3-brush": "1", "d3-chord": "1", "d3-collection": "1", "d3-color": "1", "d3-contour": "1", "d3-dispatch": "1", "d3-drag": "1", "d3-dsv": "1", "d3-ease": "1", "d3-fetch": "1", "d3-force": "1", "d3-format": "1", "d3-geo": "1", "d3-hierarchy": "1", "d3-interpolate": "1", "d3-path": "1", "d3-polygon": "1", "d3-quadtree": "1", "d3-random": "1", "d3-scale": "2", "d3-scale-chromatic": "1", "d3-selection": "1", "d3-shape": "1", "d3-time": "1", "d3-time-format": "2", "d3-timer": "1", "d3-transition": "1", "d3-voronoi": "1", "d3-zoom": "1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/d3", "error": "[Circular]", "extraneous": false }, "http-status-codes": { "_from": "http-status-codes@^1.3.2", "_id": "http-status-codes@1.4.0", "_inBundle": false, "_integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==", "_location": "/http-status-codes", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "http-status-codes@^1.3.2", "name": "http-status-codes", "escapedName": "http-status-codes", "rawSpec": "^1.3.2", "saveSpec": "[Circular]", "fetchSpec": "^1.3.2" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", "_shasum": "6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477", "_spec": "http-status-codes@^1.3.2", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Bryce Neal" }, "bugs": { "url": "https://github.com/prettymuchbryce/node-http-status/issues" }, "deprecated": false, "description": "Constants enumerating the HTTP status codes. Based on the Java Apache HttpStatus API.", "homepage": "https://github.com/prettymuchbryce/node-http-status#readme", "keywords": [ "node", "http", "apache", "HttpStatus", "httpclient", "status", "codes" ], "license": "MIT", "main": "./index.js", "name": "http-status-codes", "repository": { "type": "git", "url": "git+https://github.com/prettymuchbryce/node-http-status.git" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "typings": "index.d.ts", "version": "1.4.0", "readme": "# http-status-codes\n\nConstants enumerating the HTTP status codes. Based on the [Java Apache HttpStatus API](http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpStatus.html).\n\nAll status codes defined in RFC1945 (HTTP/1.0), RFC2616 (HTTP/1.1), RFC2518 (WebDAV), RFC6585 (Additional HTTP Status Codes), and RFC7538 (Permanent Redirect) are supported.\n\nCompletely library agnostic. No dependencies.\n\n## Installation\n\n```console\nnpm install http-status-codes --save\n```\n\n## Usage (express 4.x)\n\n```javascript\nvar HttpStatus = require('http-status-codes');\n\nresponse\n\t.status(HttpStatus.OK)\n\t.send('ok');\n\nresponse\n\t.status(HttpStatus.INTERNAL_SERVER_ERROR)\n\t.send({\n\t\terror: HttpStatus.getStatusText(HttpStatus.INTERNAL_SERVER_ERROR)\n\t});\n\nresponse\n\t.status(HttpStatus.getStatusCode('Server Error'))\n\t.send({\n\t\terror: 'Server Error'\n\t});\n```\n\n## Codes\n\nConstant | Code | Status Text\n------------------------------------|-------|-----------------------------------\nACCEPTED | 202 | Accepted\nBAD_GATEWAY | 502 | Bad Gateway\nBAD_REQUEST | 400 | Bad Request\nCONFLICT | 409 | Conflict\nCONTINUE | 100 | Continue\nCREATED | 201 | Created\nEXPECTATION_FAILED | 417 | Expectation Failed\nFAILED_DEPENDENCY | 424 | Failed Dependency\nFORBIDDEN | 403 | Forbidden\nGATEWAY_TIMEOUT | 504 | Gateway Timeout\nGONE | 410 | Gone\nHTTP_VERSION_NOT_SUPPORTED | 505 | HTTP Version Not Supported\nIM_A_TEAPOT | 418 | I'm a teapot\nINSUFFICIENT_SPACE_ON_RESOURCE | 419 | Insufficient Space on Resource\nINSUFFICIENT_STORAGE | 507 | Insufficient Storage\nINTERNAL_SERVER_ERROR | 500 | Server Error\nLENGTH_REQUIRED | 411 | Length Required\nLOCKED | 423 | Locked\nMETHOD_FAILURE | 420 | Method Failure\nMETHOD_NOT_ALLOWED | 405 | Method Not Allowed\nMOVED_PERMANENTLY | 301 | Moved Permanently\nMOVED_TEMPORARILY | 302 | Moved Temporarily\nMULTI_STATUS | 207 | Multi-Status\nMULTIPLE_CHOICES | 300 | Multiple Choices\nNETWORK_AUTHENTICATION_REQUIRED | 511 | Network Authentication Required\nNO_CONTENT | 204 | No Content\nNON_AUTHORITATIVE_INFORMATION | 203 | Non Authoritative Information\nNOT_ACCEPTABLE | 406 | Not Acceptable\nNOT_FOUND | 404 | Not Found\nNOT_IMPLEMENTED | 501 | Not Implemented\nNOT_MODIFIED | 304 | Not Modified\nOK | 200 | OK\nPARTIAL_CONTENT | 206 | Partial Content\nPAYMENT_REQUIRED | 402 | Payment Required\nPERMANENT_REDIRECT | 308 | Permanent Redirect\nPRECONDITION_FAILED | 412 | Precondition Failed\nPRECONDITION_REQUIRED | 428 | Precondition Required\nPROCESSING | 102 | Processing\nPROXY_AUTHENTICATION_REQUIRED | 407 | Proxy Authentication Required\nREQUEST_HEADER_FIELDS_TOO_LARGE | 431 | Request Header Fields Too Large\nREQUEST_TIMEOUT | 408 | Request Timeout\nREQUEST_TOO_LONG | 413 | Request Entity Too Large\nREQUEST_URI_TOO_LONG | 414 | Request-URI Too Long\nREQUESTED_RANGE_NOT_SATISFIABLE | 416 | Requested Range Not Satisfiable\nRESET_CONTENT | 205 | Reset Content\nSEE_OTHER | 303 | See Other\nSERVICE_UNAVAILABLE | 503 | Service Unavailable\nSWITCHING_PROTOCOLS | 101 | Switching Protocols\nTEMPORARY_REDIRECT | 307 | Temporary Redirect\nTOO_MANY_REQUESTS | 429 | Too Many Requests\nUNAUTHORIZED | 401 | Unauthorized\nUNPROCESSABLE_ENTITY | 422 | Unprocessable Entity\nUNSUPPORTED_MEDIA_TYPE | 415 | Unsupported Media Type\nUSE_PROXY | 305 | Use Proxy\n\n## TypeScript\n\nThere is an included definition file that adds rules for use, comments, and links to official documentation.\n\n### Usage\n\nOption 1: Full import of package\n\n```typescript\nimport * as HttpStatus from 'http-status-codes'\n\nresponse\n\t.status(HttpStatus.OK)\n\t.send('ok')\n\nresponse\n\t.status(HttpStatus.INTERNAL_SERVER_ERROR)\n\t.send({\n\t\terror: HttpStatus.getStatusText(HttpStatus.INTERNAL_SERVER_ERROR)\n\t})\n\nresponse\n\t.status(HttpStatus.getStatusCode('Server Error'))\n\t.send({\n\t\terror: 'Server Error'\n\t})\n```\n\nOption 2: Selective import\n\n```typescript\nimport { OK, getStatusText, getStatusCode } from 'http-status-codes'\n\nresponse\n\t.status(OK)\n\t.send(getStatusText(OK))\n\nresponse\n\t.status(getStatusCode('Server Error')\n\t.send('Server Error')\n```\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/http-status-codes", "error": "[Circular]", "extraneous": false }, "js-untar": { "_from": "js-untar@^2.0.0", "_id": "js-untar@2.0.0", "_inBundle": false, "_integrity": "sha512-7CsDLrYQMbLxDt2zl9uKaPZSdmJMvGGQ7wo9hoB3J+z/VcO2w63bXFgHVnjF1+S9wD3zAu8FBVj7EYWjTQ3Z7g==", "_location": "/js-untar", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "js-untar@^2.0.0", "name": "js-untar", "escapedName": "js-untar", "rawSpec": "^2.0.0", "saveSpec": "[Circular]", "fetchSpec": "^2.0.0" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/js-untar/-/js-untar-2.0.0.tgz", "_shasum": "b452d28dedd3b0be92c2ac9a7d70f612a93c7453", "_spec": "js-untar@^2.0.0", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Sebastian Joergensen, InvokIT", "email": "sj@invokit.dk" }, "bugs": { "url": "https://github.com/InvokIT/js-untar/issues" }, "deprecated": false, "description": "untar files in the browser", "devDependencies": { "gulp": "^3.9.0", "gulp-add-src": "^0.2.0", "gulp-concat": "^2.6.0", "gulp-filter": "^3.0.1", "gulp-insert": "^0.5.0", "gulp-jshint": "^1.11.2", "gulp-sourcemaps": "^1.12.1", "gulp-uglify": "^1.3.0", "gulp-umd": "^0.2.0", "gulp-webserver": "^0.9.1", "jasmine-core": "^2.99.1", "karma": "^0.13.9", "karma-chrome-launcher": "^0.2.0", "karma-jasmine": "^0.3.6", "karma-requirejs": "^0.2.2", "lodash": "^4.17.10", "requirejs": "^2.1.20" }, "directories": { "test": "test" }, "homepage": "https://github.com/InvokIT/js-untar", "keywords": [ "js", "untar", "browser", "extract" ], "license": "MIT", "main": "build/dist/untar", "name": "js-untar", "repository": { "type": "git", "url": "git+https://github.com/InvokIT/js-untar.git" }, "scripts": { "build": "gulp", "example": "gulp example", "test": "gulp test" }, "version": "2.0.0", "readme": "# js-untar\nLibrary for extracting tar files in the browser. \nUseful when packing all your application images/sound/json/etc. data in a standard .tar file and serving to clients as one gzipped bundle.\n\n## Browser feature requirements\n* [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). ([IE polyfill](https://www.npmjs.com/package/promise)).\n* [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer).\n* [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API).\n* [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) and the [Blob() constructor](https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob).\n\nAs of September 2015 this includes Chrome>=20, Firefox>=13, IE>=10, Opera>=12.10 and Safari>=8. \n[Web Worker transferable objects](https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage) are used when available, increasing speed greatly. This is supported in Chrome>=21, Firefox>=18, Opera>=15 and Safari. \n\n**Web Workers are not implemented in Node.js, so js-untar is not Node-compatible. Use a Node-compatible library such as [tar-stream](https://www.npmjs.com/package/tar-stream).**\n\n## Installation\n### NPM\n\tnpm install js-untar\n### Bower\n\tbower install js-untar\n\n## Documentation\nSupports AMD, CommonJS or simply load with a script tag, which will provide a global untar function. \nThe module is a function that returns a modified Promise with a progress callback.\nThis callback is executed every time a file is extracted. \nThe standard Promise.then method is also called when extraction is done, with all extracted files as argument. \nThe extraction is done in a [Web Worker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) to allow the main UI thread to continue.\n\n### Example:\n\n\t// Load the source ArrayBuffer from a XMLHttpRequest (or any other way you may need).\n\tvar sourceBuffer = [...];\n\t\n\tuntar(sourceBuffer)\n\t.progress(function(extractedFile) {\n\t\t... // Do something with a single extracted file.\n\t})\n\t.then(function(extractedFiles) {\n\t\t... // Do something with all extracted files.\n\t});\n\n\t// or\n\n\tuntar(sourceBuffer).then(\n\t\tfunction(extractedFiles) { // onSuccess\n\t\t\t... // Do something with all extracted files.\n\t\t},\n\t\tfunction(err) { // onError\n\t\t\t... // Handle the error.\n\t\t},\n\t\tfunction(extractedFile) { // onProgress\n\t\t\t... // Do something with a single extracted file.\n\t\t}\n\t);\n\n### File object\nThe returned file object(s) has the following properties. Most of these are explained in the [Tar wikipedia entry](https://en.wikipedia.org/wiki/Tar_(computing)#File_format).\n\n* name = The full filename (including path and ustar filename prefix).\n* mode\n* uid\n* gid\n* size\n* mtime\n* checksum\n* type\n* linkname\n* ustarFormat\n* buffer An ArrayBuffer with the contents of the file.\n* blob A [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) object with the contents of the file.\n* getBlobUrl() \n A unique [ObjectUrl](https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL) to the data can be retrieved with this method for easy usage of extracted data in <img> tags etc. \n \n \t\t\tdocument.getElementById(\"targetImageElement\").src = file.getBlobUrl();\n* readAsString()\n\tParse the file contents as a UTF-8 string.\n* readAsJSON()\n\tParse the file contents as a JSON object.\n\nIf the .tar file was in the ustar format (which most are), the following properties are also defined:\n\n* version\n* uname\n* gname\n* devmajor\n* devminor\n* namePrefix\n\nAdditional vendor-specific PAX header fields might also be defined.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/js-untar", "error": "[Circular]", "extraneous": false }, "js-yaml": { "_from": "js-yaml@^3.13.1", "_id": "js-yaml@3.14.1", "_inBundle": false, "_integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "_location": "/js-yaml", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "js-yaml@^3.13.1", "name": "js-yaml", "escapedName": "js-yaml", "rawSpec": "^3.13.1", "saveSpec": "[Circular]", "fetchSpec": "^3.13.1" }, "_requiredBy": [ "/", "/@eslint/eslintrc", "/@istanbuljs/load-nyc-config", "/@yarnpkg/parsers", "/eslint" ], "_resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "_shasum": "dae812fdb3825fa306609a8717383c50c36a0537", "_spec": "js-yaml@^3.13.1", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Vladimir Zapparov", "email": "dervus.grim@gmail.com" }, "bin": { "js-yaml": "bin/js-yaml.js" }, "bugs": { "url": "https://github.com/nodeca/js-yaml/issues" }, "contributors": [ { "name": "Aleksey V Zapparov", "email": "ixti@member.fsf.org", "url": "http://www.ixti.net/" }, { "name": "Vitaly Puzrin", "email": "vitaly@rcdesign.ru", "url": "https://github.com/puzrin" }, { "name": "Martin Grenfell", "email": "martin.grenfell@gmail.com", "url": "http://got-ravings.blogspot.com" } ], "dependencies": { "argparse": { "_from": "argparse@^1.0.7", "_id": "argparse@1.0.10", "_inBundle": false, "_integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "_location": "/argparse", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "argparse@^1.0.7", "name": "argparse", "escapedName": "argparse", "rawSpec": "^1.0.7", "saveSpec": "[Circular]", "fetchSpec": "^1.0.7" }, "_requiredBy": [ "/js-yaml" ], "_resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "_shasum": "bcd6791ea5ae09725e17e5ad988134cd40b3d911", "_spec": "argparse@^1.0.7", "_where": "/builds/gitlab/osm/ng-ui/node_modules/js-yaml", "bugs": { "url": "https://github.com/nodeca/argparse/issues" }, "contributors": [ { "name": "Eugene Shkuropat" }, { "name": "Paul Jacobson" } ], "dependencies": { "sprintf-js": { "_from": "sprintf-js@~1.0.2", "_id": "sprintf-js@1.0.3", "_inBundle": false, "_integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "_location": "/sprintf-js", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "sprintf-js@~1.0.2", "name": "sprintf-js", "escapedName": "sprintf-js", "rawSpec": "~1.0.2", "saveSpec": "[Circular]", "fetchSpec": "~1.0.2" }, "_requiredBy": [ "/argparse" ], "_resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "_shasum": "04e6926f662895354f3dd015203633b857297e2c", "_spec": "sprintf-js@~1.0.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/argparse", "author": { "name": "Alexandru Marasteanu", "email": "hello@alexei.ro", "url": "http://alexei.ro/" }, "bugs": { "url": "https://github.com/alexei/sprintf.js/issues" }, "deprecated": false, "description": "JavaScript sprintf implementation", "devDependencies": { "grunt": "*", "grunt-contrib-uglify": "*", "grunt-contrib-watch": "*", "mocha": "*" }, "homepage": "https://github.com/alexei/sprintf.js#readme", "license": "BSD-3-Clause", "main": "src/sprintf.js", "name": "sprintf-js", "repository": { "type": "git", "url": "git+https://github.com/alexei/sprintf.js.git" }, "scripts": { "test": "mocha test/test.js" }, "version": "1.0.3", "readme": "# sprintf.js\n**sprintf.js** is a complete open source JavaScript sprintf implementation for the *browser* and *node.js*.\n\nIts prototype is simple:\n\n string sprintf(string format , [mixed arg1 [, mixed arg2 [ ,...]]])\n\nThe placeholders in the format string are marked by `%` and are followed by one or more of these elements, in this order:\n\n* An optional number followed by a `$` sign that selects which argument index to use for the value. If not specified, arguments will be placed in the same order as the placeholders in the input string.\n* An optional `+` sign that forces to preceed the result with a plus or minus sign on numeric values. By default, only the `-` sign is used on negative numbers.\n* An optional padding specifier that says what character to use for padding (if specified). Possible values are `0` or any other character precedeed by a `'` (single quote). The default is to pad with *spaces*.\n* An optional `-` sign, that causes sprintf to left-align the result of this placeholder. The default is to right-align the result.\n* An optional number, that says how many characters the result should have. If the value to be returned is shorter than this number, the result will be padded. When used with the `j` (JSON) type specifier, the padding length specifies the tab size used for indentation.\n* An optional precision modifier, consisting of a `.` (dot) followed by a number, that says how many digits should be displayed for floating point numbers. When used with the `g` type specifier, it specifies the number of significant digits. When used on a string, it causes the result to be truncated.\n* A type specifier that can be any of:\n * `%` — yields a literal `%` character\n * `b` — yields an integer as a binary number\n * `c` — yields an integer as the character with that ASCII value\n * `d` or `i` — yields an integer as a signed decimal number\n * `e` — yields a float using scientific notation\n * `u` — yields an integer as an unsigned decimal number\n * `f` — yields a float as is; see notes on precision above\n * `g` — yields a float as is; see notes on precision above\n * `o` — yields an integer as an octal number\n * `s` — yields a string as is\n * `x` — yields an integer as a hexadecimal number (lower-case)\n * `X` — yields an integer as a hexadecimal number (upper-case)\n * `j` — yields a JavaScript object or array as a JSON encoded string\n\n## JavaScript `vsprintf`\n`vsprintf` is the same as `sprintf` except that it accepts an array of arguments, rather than a variable number of arguments:\n\n vsprintf(\"The first 4 letters of the english alphabet are: %s, %s, %s and %s\", [\"a\", \"b\", \"c\", \"d\"])\n\n## Argument swapping\nYou can also swap the arguments. That is, the order of the placeholders doesn't have to match the order of the arguments. You can do that by simply indicating in the format string which arguments the placeholders refer to:\n\n sprintf(\"%2$s %3$s a %1$s\", \"cracker\", \"Polly\", \"wants\")\nAnd, of course, you can repeat the placeholders without having to increase the number of arguments.\n\n## Named arguments\nFormat strings may contain replacement fields rather than positional placeholders. Instead of referring to a certain argument, you can now refer to a certain key within an object. Replacement fields are surrounded by rounded parentheses - `(` and `)` - and begin with a keyword that refers to a key:\n\n var user = {\n name: \"Dolly\"\n }\n sprintf(\"Hello %(name)s\", user) // Hello Dolly\nKeywords in replacement fields can be optionally followed by any number of keywords or indexes:\n\n var users = [\n {name: \"Dolly\"},\n {name: \"Molly\"},\n {name: \"Polly\"}\n ]\n sprintf(\"Hello %(users[0].name)s, %(users[1].name)s and %(users[2].name)s\", {users: users}) // Hello Dolly, Molly and Polly\nNote: mixing positional and named placeholders is not (yet) supported\n\n## Computed values\nYou can pass in a function as a dynamic value and it will be invoked (with no arguments) in order to compute the value on-the-fly.\n\n sprintf(\"Current timestamp: %d\", Date.now) // Current timestamp: 1398005382890\n sprintf(\"Current date and time: %s\", function() { return new Date().toString() })\n\n# AngularJS\nYou can now use `sprintf` and `vsprintf` (also aliased as `fmt` and `vfmt` respectively) in your AngularJS projects. See `demo/`.\n\n# Installation\n\n## Via Bower\n\n bower install sprintf\n\n## Or as a node.js module\n\n npm install sprintf-js\n\n### Usage\n\n var sprintf = require(\"sprintf-js\").sprintf,\n vsprintf = require(\"sprintf-js\").vsprintf\n\n sprintf(\"%2$s %3$s a %1$s\", \"cracker\", \"Polly\", \"wants\")\n vsprintf(\"The first 4 letters of the english alphabet are: %s, %s, %s and %s\", [\"a\", \"b\", \"c\", \"d\"])\n\n# License\n\n**sprintf.js** is licensed under the terms of the 3-clause BSD license.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/sprintf-js", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Very powerful CLI arguments parser. Native port of argparse - python's options parsing library", "devDependencies": { "eslint": "^2.13.1", "istanbul": "^0.4.5", "mocha": "^3.1.0", "ndoc": "^5.0.1" }, "files": [ "index.js", "lib/" ], "homepage": "https://github.com/nodeca/argparse#readme", "keywords": [ "cli", "parser", "argparse", "option", "args" ], "license": "MIT", "name": "argparse", "repository": { "type": "git", "url": "git+https://github.com/nodeca/argparse.git" }, "scripts": { "test": "make test" }, "version": "1.0.10", "readme": "argparse\n========\n\n[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse)\n[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse)\n\nCLI arguments parser for node.js. Javascript port of python's\n[argparse](http://docs.python.org/dev/library/argparse.html) module\n(original version 3.2). That's a full port, except some very rare options,\nrecorded in issue tracker.\n\n**NB. Difference with original.**\n\n- Method names changed to camelCase. See [generated docs](http://nodeca.github.com/argparse/).\n- Use `defaultValue` instead of `default`.\n- Use `argparse.Const.REMAINDER` instead of `argparse.REMAINDER`, and\n similarly for constant values `OPTIONAL`, `ZERO_OR_MORE`, and `ONE_OR_MORE`\n (aliases for `nargs` values `'?'`, `'*'`, `'+'`, respectively), and\n `SUPPRESS`.\n\n\nExample\n=======\n\ntest.js file:\n\n```javascript\n#!/usr/bin/env node\n'use strict';\n\nvar ArgumentParser = require('../lib/argparse').ArgumentParser;\nvar parser = new ArgumentParser({\n version: '0.0.1',\n addHelp:true,\n description: 'Argparse example'\n});\nparser.addArgument(\n [ '-f', '--foo' ],\n {\n help: 'foo bar'\n }\n);\nparser.addArgument(\n [ '-b', '--bar' ],\n {\n help: 'bar foo'\n }\n);\nparser.addArgument(\n '--baz',\n {\n help: 'baz bar'\n }\n);\nvar args = parser.parseArgs();\nconsole.dir(args);\n```\n\nDisplay help:\n\n```\n$ ./test.js -h\nusage: example.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ]\n\nArgparse example\n\nOptional arguments:\n -h, --help Show this help message and exit.\n -v, --version Show program's version number and exit.\n -f FOO, --foo FOO foo bar\n -b BAR, --bar BAR bar foo\n --baz BAZ baz bar\n```\n\nParse arguments:\n\n```\n$ ./test.js -f=3 --bar=4 --baz 5\n{ foo: '3', bar: '4', baz: '5' }\n```\n\nMore [examples](https://github.com/nodeca/argparse/tree/master/examples).\n\n\nArgumentParser objects\n======================\n\n```\nnew ArgumentParser({parameters hash});\n```\n\nCreates a new ArgumentParser object.\n\n**Supported params:**\n\n- ```description``` - Text to display before the argument help.\n- ```epilog``` - Text to display after the argument help.\n- ```addHelp``` - Add a -h/–help option to the parser. (default: true)\n- ```argumentDefault``` - Set the global default value for arguments. (default: null)\n- ```parents``` - A list of ArgumentParser objects whose arguments should also be included.\n- ```prefixChars``` - The set of characters that prefix optional arguments. (default: ‘-‘)\n- ```formatterClass``` - A class for customizing the help output.\n- ```prog``` - The name of the program (default: `path.basename(process.argv[1])`)\n- ```usage``` - The string describing the program usage (default: generated)\n- ```conflictHandler``` - Usually unnecessary, defines strategy for resolving conflicting optionals.\n\n**Not supported yet**\n\n- ```fromfilePrefixChars``` - The set of characters that prefix files from which additional arguments should be read.\n\n\nDetails in [original ArgumentParser guide](http://docs.python.org/dev/library/argparse.html#argumentparser-objects)\n\n\naddArgument() method\n====================\n\n```\nArgumentParser.addArgument(name or flag or [name] or [flags...], {options})\n```\n\nDefines how a single command-line argument should be parsed.\n\n- ```name or flag or [name] or [flags...]``` - Either a positional name\n (e.g., `'foo'`), a single option (e.g., `'-f'` or `'--foo'`), an array\n of a single positional name (e.g., `['foo']`), or an array of options\n (e.g., `['-f', '--foo']`).\n\nOptions:\n\n- ```action``` - The basic type of action to be taken when this argument is encountered at the command line.\n- ```nargs```- The number of command-line arguments that should be consumed.\n- ```constant``` - A constant value required by some action and nargs selections.\n- ```defaultValue``` - The value produced if the argument is absent from the command line.\n- ```type``` - The type to which the command-line argument should be converted.\n- ```choices``` - A container of the allowable values for the argument.\n- ```required``` - Whether or not the command-line option may be omitted (optionals only).\n- ```help``` - A brief description of what the argument does.\n- ```metavar``` - A name for the argument in usage messages.\n- ```dest``` - The name of the attribute to be added to the object returned by parseArgs().\n\nDetails in [original add_argument guide](http://docs.python.org/dev/library/argparse.html#the-add-argument-method)\n\n\nAction (some details)\n================\n\nArgumentParser objects associate command-line arguments with actions.\nThese actions can do just about anything with the command-line arguments associated\nwith them, though most actions simply add an attribute to the object returned by\nparseArgs(). The action keyword argument specifies how the command-line arguments\nshould be handled. The supported actions are:\n\n- ```store``` - Just stores the argument’s value. This is the default action.\n- ```storeConst``` - Stores value, specified by the const keyword argument.\n (Note that the const keyword argument defaults to the rather unhelpful None.)\n The 'storeConst' action is most commonly used with optional arguments, that\n specify some sort of flag.\n- ```storeTrue``` and ```storeFalse``` - Stores values True and False\n respectively. These are special cases of 'storeConst'.\n- ```append``` - Stores a list, and appends each argument value to the list.\n This is useful to allow an option to be specified multiple times.\n- ```appendConst``` - Stores a list, and appends value, specified by the\n const keyword argument to the list. (Note, that the const keyword argument defaults\n is None.) The 'appendConst' action is typically used when multiple arguments need\n to store constants to the same list.\n- ```count``` - Counts the number of times a keyword argument occurs. For example,\n used for increasing verbosity levels.\n- ```help``` - Prints a complete help message for all the options in the current\n parser and then exits. By default a help action is automatically added to the parser.\n See ArgumentParser for details of how the output is created.\n- ```version``` - Prints version information and exit. Expects a `version=`\n keyword argument in the addArgument() call.\n\nDetails in [original action guide](http://docs.python.org/dev/library/argparse.html#action)\n\n\nSub-commands\n============\n\nArgumentParser.addSubparsers()\n\nMany programs split their functionality into a number of sub-commands, for\nexample, the svn program can invoke sub-commands like `svn checkout`, `svn update`,\nand `svn commit`. Splitting up functionality this way can be a particularly good\nidea when a program performs several different functions which require different\nkinds of command-line arguments. `ArgumentParser` supports creation of such\nsub-commands with `addSubparsers()` method. The `addSubparsers()` method is\nnormally called with no arguments and returns an special action object.\nThis object has a single method `addParser()`, which takes a command name and\nany `ArgumentParser` constructor arguments, and returns an `ArgumentParser` object\nthat can be modified as usual.\n\nExample:\n\nsub_commands.js\n```javascript\n#!/usr/bin/env node\n'use strict';\n\nvar ArgumentParser = require('../lib/argparse').ArgumentParser;\nvar parser = new ArgumentParser({\n version: '0.0.1',\n addHelp:true,\n description: 'Argparse examples: sub-commands',\n});\n\nvar subparsers = parser.addSubparsers({\n title:'subcommands',\n dest:\"subcommand_name\"\n});\n\nvar bar = subparsers.addParser('c1', {addHelp:true});\nbar.addArgument(\n [ '-f', '--foo' ],\n {\n action: 'store',\n help: 'foo3 bar3'\n }\n);\nvar bar = subparsers.addParser(\n 'c2',\n {aliases:['co'], addHelp:true}\n);\nbar.addArgument(\n [ '-b', '--bar' ],\n {\n action: 'store',\n type: 'int',\n help: 'foo3 bar3'\n }\n);\n\nvar args = parser.parseArgs();\nconsole.dir(args);\n\n```\n\nDetails in [original sub-commands guide](http://docs.python.org/dev/library/argparse.html#sub-commands)\n\n\nContributors\n============\n\n- [Eugene Shkuropat](https://github.com/shkuropat)\n- [Paul Jacobson](https://github.com/hpaulj)\n\n[others](https://github.com/nodeca/argparse/graphs/contributors)\n\nLicense\n=======\n\nCopyright (c) 2012 [Vitaly Puzrin](https://github.com/puzrin).\nReleased under the MIT license. See\n[LICENSE](https://github.com/nodeca/argparse/blob/master/LICENSE) for details.\n\n\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "sprintf-js": "~1.0.2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/argparse", "error": "[Circular]", "extraneous": false }, "esprima": { "_from": "esprima@^4.0.0", "_id": "esprima@4.0.1", "_inBundle": false, "_integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "_location": "/esprima", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "esprima@^4.0.0", "name": "esprima", "escapedName": "esprima", "rawSpec": "^4.0.0", "saveSpec": "[Circular]", "fetchSpec": "^4.0.0" }, "_requiredBy": [ "/escodegen", "/js-yaml" ], "_resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "_shasum": "13b04cdb3e6c5d19df91ab6987a8695619b0aa71", "_spec": "esprima@^4.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/js-yaml", "author": { "name": "Ariya Hidayat", "email": "ariya.hidayat@gmail.com" }, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "bugs": { "url": "https://github.com/jquery/esprima/issues" }, "deprecated": false, "description": "ECMAScript parsing infrastructure for multipurpose analysis", "devDependencies": { "codecov.io": "~0.1.6", "escomplex-js": "1.2.0", "everything.js": "~1.0.3", "glob": "~7.1.0", "istanbul": "~0.4.0", "json-diff": "~0.3.1", "karma": "~1.3.0", "karma-chrome-launcher": "~2.0.0", "karma-detect-browsers": "~2.2.3", "karma-edge-launcher": "~0.2.0", "karma-firefox-launcher": "~1.0.0", "karma-ie-launcher": "~1.0.0", "karma-mocha": "~1.3.0", "karma-safari-launcher": "~1.0.0", "karma-safaritechpreview-launcher": "~0.0.4", "karma-sauce-launcher": "~1.1.0", "lodash": "~3.10.1", "mocha": "~3.2.0", "node-tick-processor": "~0.0.2", "regenerate": "~1.3.2", "temp": "~0.8.3", "tslint": "~5.1.0", "typescript": "~2.3.2", "typescript-formatter": "~5.1.3", "unicode-8.0.0": "~0.7.0", "webpack": "~1.14.0" }, "engines": { "node": ">=4" }, "files": [ "bin", "dist/esprima.js" ], "homepage": "http://esprima.org", "keywords": [ "ast", "ecmascript", "esprima", "javascript", "parser", "syntax" ], "license": "BSD-2-Clause", "main": "dist/esprima.js", "maintainers": [ { "name": "Ariya Hidayat", "email": "ariya.hidayat@gmail.com", "url": "http://ariya.ofilabs.com" } ], "name": "esprima", "repository": { "type": "git", "url": "git+https://github.com/jquery/esprima.git" }, "scripts": { "all-tests": "npm run verify-line-ending && npm run generate-fixtures && npm run unit-tests && npm run api-tests && npm run grammar-tests && npm run regression-tests && npm run hostile-env-tests", "analyze-coverage": "istanbul cover test/unit-tests.js", "api-tests": "mocha -R dot test/api-tests.js", "appveyor": "npm run compile && npm run all-tests && npm run browser-tests", "benchmark": "npm run benchmark-parser && npm run benchmark-tokenizer", "benchmark-parser": "node -expose_gc test/benchmark-parser.js", "benchmark-tokenizer": "node --expose_gc test/benchmark-tokenizer.js", "browser-tests": "npm run compile && npm run generate-fixtures && cd test && karma start --single-run", "check-coverage": "istanbul check-coverage --statement 100 --branch 100 --function 100", "check-version": "node test/check-version.js", "circleci": "npm test && npm run codecov && npm run downstream", "code-style": "tsfmt --verify src/*.ts && tsfmt --verify test/*.js", "codecov": "istanbul report cobertura && codecov < ./coverage/cobertura-coverage.xml", "compile": "tsc -p src/ && webpack && node tools/fixupbundle.js", "complexity": "node test/check-complexity.js", "downstream": "node test/downstream.js", "droneio": "npm run compile && npm run all-tests && npm run saucelabs", "dynamic-analysis": "npm run analyze-coverage && npm run check-coverage", "format-code": "tsfmt -r src/*.ts && tsfmt -r test/*.js", "generate-fixtures": "node tools/generate-fixtures.js", "generate-regex": "node tools/generate-identifier-regex.js", "generate-xhtml-entities": "node tools/generate-xhtml-entities.js", "grammar-tests": "node test/grammar-tests.js", "hostile-env-tests": "node test/hostile-environment-tests.js", "prepublish": "npm run compile", "profile": "node --prof test/profile.js && mv isolate*.log v8.log && node-tick-processor", "regression-tests": "node test/regression-tests.js", "saucelabs": "npm run saucelabs-evergreen && npm run saucelabs-ie && npm run saucelabs-safari", "saucelabs-evergreen": "cd test && karma start saucelabs-evergreen.conf.js", "saucelabs-ie": "cd test && karma start saucelabs-ie.conf.js", "saucelabs-safari": "cd test && karma start saucelabs-safari.conf.js", "static-analysis": "npm run check-version && npm run tslint && npm run code-style && npm run complexity", "test": "npm run compile && npm run all-tests && npm run static-analysis && npm run dynamic-analysis", "travis": "npm test", "tslint": "tslint src/*.ts", "unit-tests": "node test/unit-tests.js", "verify-line-ending": "node test/verify-line-ending.js" }, "version": "4.0.1", "readme": "[![NPM version](https://img.shields.io/npm/v/esprima.svg)](https://www.npmjs.com/package/esprima)\n[![npm download](https://img.shields.io/npm/dm/esprima.svg)](https://www.npmjs.com/package/esprima)\n[![Build Status](https://img.shields.io/travis/jquery/esprima/master.svg)](https://travis-ci.org/jquery/esprima)\n[![Coverage Status](https://img.shields.io/codecov/c/github/jquery/esprima/master.svg)](https://codecov.io/github/jquery/esprima)\n\n**Esprima** ([esprima.org](http://esprima.org), BSD license) is a high performance,\nstandard-compliant [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)\nparser written in ECMAScript (also popularly known as\n[JavaScript](https://en.wikipedia.org/wiki/JavaScript)).\nEsprima is created and maintained by [Ariya Hidayat](https://twitter.com/ariyahidayat),\nwith the help of [many contributors](https://github.com/jquery/esprima/contributors).\n\n### Features\n\n- Full support for ECMAScript 2017 ([ECMA-262 8th Edition](http://www.ecma-international.org/publications/standards/Ecma-262.htm))\n- Sensible [syntax tree format](https://github.com/estree/estree/blob/master/es5.md) as standardized by [ESTree project](https://github.com/estree/estree)\n- Experimental support for [JSX](https://facebook.github.io/jsx/), a syntax extension for [React](https://facebook.github.io/react/)\n- Optional tracking of syntax node location (index-based and line-column)\n- [Heavily tested](http://esprima.org/test/ci.html) (~1500 [unit tests](https://github.com/jquery/esprima/tree/master/test/fixtures) with [full code coverage](https://codecov.io/github/jquery/esprima))\n\n### API\n\nEsprima can be used to perform [lexical analysis](https://en.wikipedia.org/wiki/Lexical_analysis) (tokenization) or [syntactic analysis](https://en.wikipedia.org/wiki/Parsing) (parsing) of a JavaScript program.\n\nA simple example on Node.js REPL:\n\n```javascript\n> var esprima = require('esprima');\n> var program = 'const answer = 42';\n\n> esprima.tokenize(program);\n[ { type: 'Keyword', value: 'const' },\n { type: 'Identifier', value: 'answer' },\n { type: 'Punctuator', value: '=' },\n { type: 'Numeric', value: '42' } ]\n \n> esprima.parseScript(program);\n{ type: 'Program',\n body:\n [ { type: 'VariableDeclaration',\n declarations: [Object],\n kind: 'const' } ],\n sourceType: 'script' }\n```\n\nFor more information, please read the [complete documentation](http://esprima.org/doc).", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/esprima", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "YAML 1.2 parser and serializer", "devDependencies": { "ansi": "^0.3.1", "benchmark": "^2.1.4", "browserify": "^16.2.2", "codemirror": "^5.13.4", "eslint": "^7.0.0", "fast-check": "^1.24.2", "istanbul": "^0.4.5", "mocha": "^7.1.2", "uglify-js": "^3.0.1" }, "files": [ "index.js", "lib/", "bin/", "dist/" ], "homepage": "https://github.com/nodeca/js-yaml", "jsdelivr": "dist/js-yaml.min.js", "keywords": [ "yaml", "parser", "serializer", "pyyaml" ], "license": "MIT", "name": "js-yaml", "repository": { "type": "git", "url": "git+https://github.com/nodeca/js-yaml.git" }, "scripts": { "test": "make test" }, "unpkg": "dist/js-yaml.min.js", "version": "3.14.1", "readme": "JS-YAML - YAML 1.2 parser / writer for JavaScript\n=================================================\n\n[![Build Status](https://travis-ci.org/nodeca/js-yaml.svg?branch=master)](https://travis-ci.org/nodeca/js-yaml)\n[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml)\n\n__[Online Demo](http://nodeca.github.com/js-yaml/)__\n\n\nThis is an implementation of [YAML](http://yaml.org/), a human-friendly data\nserialization language. Started as [PyYAML](http://pyyaml.org/) port, it was\ncompletely rewritten from scratch. Now it's very fast, and supports 1.2 spec.\n\n\nInstallation\n------------\n\n### YAML module for node.js\n\n```\nnpm install js-yaml\n```\n\n\n### CLI executable\n\nIf you want to inspect your YAML files from CLI, install js-yaml globally:\n\n```\nnpm install -g js-yaml\n```\n\n#### Usage\n\n```\nusage: js-yaml [-h] [-v] [-c] [-t] file\n\nPositional arguments:\n file File with YAML document(s)\n\nOptional arguments:\n -h, --help Show this help message and exit.\n -v, --version Show program's version number and exit.\n -c, --compact Display errors in compact mode\n -t, --trace Show stack trace on error\n```\n\n\n### Bundled YAML library for browsers\n\n``` html\n\n\n\n\n```\n\nBrowser support was done mostly for the online demo. If you find any errors - feel\nfree to send pull requests with fixes. Also note, that IE and other old browsers\nneeds [es5-shims](https://github.com/kriskowal/es5-shim) to operate.\n\nNotes:\n\n1. We have no resources to support browserified version. Don't expect it to be\n well tested. Don't expect fast fixes if something goes wrong there.\n2. `!!js/function` in browser bundle will not work by default. If you really need\n it - load `esprima` parser first (via amd or directly).\n3. `!!bin` in browser will return `Array`, because browsers do not support\n node.js `Buffer` and adding Buffer shims is completely useless on practice.\n\n\nAPI\n---\n\nHere we cover the most 'useful' methods. If you need advanced details (creating\nyour own tags), see [wiki](https://github.com/nodeca/js-yaml/wiki) and\n[examples](https://github.com/nodeca/js-yaml/tree/master/examples) for more\ninfo.\n\n``` javascript\nconst yaml = require('js-yaml');\nconst fs = require('fs');\n\n// Get document, or throw exception on error\ntry {\n const doc = yaml.safeLoad(fs.readFileSync('/home/ixti/example.yml', 'utf8'));\n console.log(doc);\n} catch (e) {\n console.log(e);\n}\n```\n\n\n### safeLoad (string [ , options ])\n\n**Recommended loading way.** Parses `string` as single YAML document. Returns either a\nplain object, a string or `undefined`, or throws `YAMLException` on error. By default, does\nnot support regexps, functions and undefined. This method is safe for untrusted data.\n\noptions:\n\n- `filename` _(default: null)_ - string to be used as a file path in\n error/warning messages.\n- `onWarning` _(default: null)_ - function to call on warning messages.\n Loader will call this function with an instance of `YAMLException` for each warning.\n- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ - specifies a schema to use.\n - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects:\n http://www.yaml.org/spec/1.2/spec.html#id2802346\n - `JSON_SCHEMA` - all JSON-supported types:\n http://www.yaml.org/spec/1.2/spec.html#id2803231\n - `CORE_SCHEMA` - same as `JSON_SCHEMA`:\n http://www.yaml.org/spec/1.2/spec.html#id2804923\n - `DEFAULT_SAFE_SCHEMA` - all supported YAML types, without unsafe ones\n (`!!js/undefined`, `!!js/regexp` and `!!js/function`):\n http://yaml.org/type/\n - `DEFAULT_FULL_SCHEMA` - all supported YAML types.\n- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error.\n\nNOTE: This function **does not** understand multi-document sources, it throws\nexception on those.\n\nNOTE: JS-YAML **does not** support schema-specific tag resolution restrictions.\nSo, the JSON schema is not as strictly defined in the YAML specification.\nIt allows numbers in any notation, use `Null` and `NULL` as `null`, etc.\nThe core schema also has no such restrictions. It allows binary notation for integers.\n\n\n### load (string [ , options ])\n\n**Use with care with untrusted sources**. The same as `safeLoad()` but uses\n`DEFAULT_FULL_SCHEMA` by default - adds some JavaScript-specific types:\n`!!js/function`, `!!js/regexp` and `!!js/undefined`. For untrusted sources, you\nmust additionally validate object structure to avoid injections:\n\n``` javascript\nconst untrusted_code = '\"toString\": ! \"function (){very_evil_thing();}\"';\n\n// I'm just converting that string, what could possibly go wrong?\nrequire('js-yaml').load(untrusted_code) + ''\n```\n\n\n### safeLoadAll (string [, iterator] [, options ])\n\nSame as `safeLoad()`, but understands multi-document sources. Applies\n`iterator` to each document if specified, or returns array of documents.\n\n``` javascript\nconst yaml = require('js-yaml');\n\nyaml.safeLoadAll(data, function (doc) {\n console.log(doc);\n});\n```\n\n\n### loadAll (string [, iterator] [ , options ])\n\nSame as `safeLoadAll()` but uses `DEFAULT_FULL_SCHEMA` by default.\n\n\n### safeDump (object [ , options ])\n\nSerializes `object` as a YAML document. Uses `DEFAULT_SAFE_SCHEMA`, so it will\nthrow an exception if you try to dump regexps or functions. However, you can\ndisable exceptions by setting the `skipInvalid` option to `true`.\n\noptions:\n\n- `indent` _(default: 2)_ - indentation width to use (in spaces).\n- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements\n- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function\n in the safe schema) and skip pairs and single values with such types.\n- `flowLevel` (default: -1) - specifies level of nesting, when to switch from\n block to flow style for collections. -1 means block style everwhere\n- `styles` - \"tag\" => \"style\" map. Each tag may have own set of styles.\n- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ specifies a schema to use.\n- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a\n function, use the function to sort the keys.\n- `lineWidth` _(default: `80`)_ - set max line width.\n- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references\n- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older\n yaml versions. Currently: don't quote \"yes\", \"no\" and so on, as required for YAML 1.1\n- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{\"a\":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded.\n\nThe following table show availlable styles (e.g. \"canonical\",\n\"binary\"...) available for each tag (.e.g. !!null, !!int ...). Yaml\noutput is shown on the right side after `=>` (default setting) or `->`:\n\n``` none\n!!null\n \"canonical\" -> \"~\"\n \"lowercase\" => \"null\"\n \"uppercase\" -> \"NULL\"\n \"camelcase\" -> \"Null\"\n\n!!int\n \"binary\" -> \"0b1\", \"0b101010\", \"0b1110001111010\"\n \"octal\" -> \"01\", \"052\", \"016172\"\n \"decimal\" => \"1\", \"42\", \"7290\"\n \"hexadecimal\" -> \"0x1\", \"0x2A\", \"0x1C7A\"\n\n!!bool\n \"lowercase\" => \"true\", \"false\"\n \"uppercase\" -> \"TRUE\", \"FALSE\"\n \"camelcase\" -> \"True\", \"False\"\n\n!!float\n \"lowercase\" => \".nan\", '.inf'\n \"uppercase\" -> \".NAN\", '.INF'\n \"camelcase\" -> \".NaN\", '.Inf'\n```\n\nExample:\n\n``` javascript\nsafeDump (object, {\n 'styles': {\n '!!null': 'canonical' // dump null as ~\n },\n 'sortKeys': true // sort object keys\n});\n```\n\n### dump (object [ , options ])\n\nSame as `safeDump()` but without limits (uses `DEFAULT_FULL_SCHEMA` by default).\n\n\nSupported YAML types\n--------------------\n\nThe list of standard YAML tags and corresponding JavaScipt types. See also\n[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and\n[YAML types repository](http://yaml.org/type/).\n\n```\n!!null '' # null\n!!bool 'yes' # bool\n!!int '3...' # number\n!!float '3.14...' # number\n!!binary '...base64...' # buffer\n!!timestamp 'YYYY-...' # date\n!!omap [ ... ] # array of key-value pairs\n!!pairs [ ... ] # array or array pairs\n!!set { ... } # array of objects with given keys and null values\n!!str '...' # string\n!!seq [ ... ] # array\n!!map { ... } # object\n```\n\n**JavaScript-specific tags**\n\n```\n!!js/regexp /pattern/gim # RegExp\n!!js/undefined '' # Undefined\n!!js/function 'function () {...}' # Function\n```\n\nCaveats\n-------\n\nNote, that you use arrays or objects as key in JS-YAML. JS does not allow objects\nor arrays as keys, and stringifies (by calling `toString()` method) them at the\nmoment of adding them.\n\n``` yaml\n---\n? [ foo, bar ]\n: - baz\n? { foo: bar }\n: - baz\n - baz\n```\n\n``` javascript\n{ \"foo,bar\": [\"baz\"], \"[object Object]\": [\"baz\", \"baz\"] }\n```\n\nAlso, reading of properties on implicit block mapping keys is not supported yet.\nSo, the following YAML document cannot be loaded.\n\n``` yaml\n&anchor foo:\n foo: bar\n *anchor: duplicate key\n baz: bat\n *anchor: duplicate key\n```\n\n\njs-yaml for enterprise\n----------------------\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/js-yaml", "error": "[Circular]", "extraneous": false }, "jsonpath": { "_from": "jsonpath@^1.0.2", "_id": "jsonpath@1.1.1", "_inBundle": false, "_integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", "_location": "/jsonpath", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "jsonpath@^1.0.2", "name": "jsonpath", "escapedName": "jsonpath", "rawSpec": "^1.0.2", "saveSpec": "[Circular]", "fetchSpec": "^1.0.2" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", "_shasum": "0ca1ed8fb65bb3309248cc9d5466d12d5b0b9901", "_spec": "jsonpath@^1.0.2", "_where": "/builds/gitlab/osm/ng-ui", "alias": { "./lib/aesprim.js": "./generated/aesprim-browser.js" }, "author": { "name": "david@fmail.co.uk" }, "browser": "./jsonpath.js", "bugs": { "url": "https://github.com/dchester/jsonpath/issues" }, "dependencies": { "esprima": { "_from": "esprima@1.2.2", "_id": "esprima@1.2.2", "_inBundle": false, "_integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", "_location": "/jsonpath/esprima", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "esprima@1.2.2", "name": "esprima", "escapedName": "esprima", "rawSpec": "1.2.2", "saveSpec": "[Circular]", "fetchSpec": "1.2.2" }, "_requiredBy": [ "/jsonpath" ], "_resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", "_shasum": "76a0fd66fcfe154fd292667dc264019750b1657b", "_spec": "esprima@1.2.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/jsonpath", "author": { "name": "Ariya Hidayat", "email": "ariya.hidayat@gmail.com" }, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "bugs": { "url": "http://issues.esprima.org" }, "deprecated": false, "description": "ECMAScript parsing infrastructure for multipurpose analysis", "devDependencies": { "complexity-report": "~0.6.1", "eslint": "~0.4.3", "istanbul": "~0.2.6", "jscs": "~1.2.4", "jslint": "~0.1.9", "json-diff": "~0.3.1", "optimist": "~0.6.0", "regenerate": "~0.5.4", "unicode-6.3.0": "~0.1.0" }, "engines": { "node": ">=0.4.0" }, "files": [ "bin", "test/run.js", "test/runner.js", "test/test.js", "test/compat.js", "test/reflect.js", "esprima.js" ], "homepage": "http://esprima.org", "keywords": [ "ast", "ecmascript", "javascript", "parser", "syntax" ], "licenses": [ { "type": "BSD", "url": "http://github.com/ariya/esprima/raw/master/LICENSE.BSD" } ], "main": "esprima.js", "maintainers": [ { "name": "Ariya Hidayat", "email": "ariya.hidayat@gmail.com", "url": "http://ariya.ofilabs.com" } ], "name": "esprima", "repository": { "type": "git", "url": "git+ssh://git@github.com/ariya/esprima.git" }, "scripts": { "analyze-complexity": "node tools/list-complexity.js", "analyze-coverage": "node node_modules/istanbul/lib/cli.js cover test/runner.js", "benchmark": "node test/benchmarks.js", "benchmark-quick": "node test/benchmarks.js quick", "check-complexity": "node node_modules/complexity-report/src/cli.js --maxcc 14 --silent -l -w esprima.js", "check-coverage": "node node_modules/istanbul/lib/cli.js check-coverage --statement 100 --branch 100 --function 100", "check-version": "node tools/check-version.js", "complexity": "npm run-script analyze-complexity && npm run-script check-complexity", "coverage": "npm run-script analyze-coverage && npm run-script check-coverage", "eslint": "node node_modules/eslint/bin/eslint.js esprima.js", "generate-regex": "node tools/generate-identifier-regex.js", "jscs": "node node_modules/.bin/jscs esprima.js", "jslint": "node node_modules/jslint/bin/jslint.js esprima.js", "lint": "npm run-script check-version && npm run-script eslint && npm run-script jscs && npm run-script jslint", "test": "npm run-script lint && node test/run.js && npm run-script coverage && npm run-script complexity" }, "version": "1.2.2", "readme": "**Esprima** ([esprima.org](http://esprima.org), BSD license) is a high performance,\nstandard-compliant [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)\nparser written in ECMAScript (also popularly known as\n[JavaScript](http://en.wikipedia.org/wiki/JavaScript>JavaScript)).\nEsprima is created and maintained by [Ariya Hidayat](http://twitter.com/ariyahidayat),\nwith the help of [many contributors](https://github.com/ariya/esprima/contributors).\n\n### Features\n\n- Full support for ECMAScript 5.1 ([ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm))\n- Sensible [syntax tree format](http://esprima.org/doc/index.html#ast) compatible with Mozilla\n[Parser AST](https://developer.mozilla.org/en/SpiderMonkey/Parser_API)\n- Optional tracking of syntax node location (index-based and line-column)\n- Heavily tested (> 650 [unit tests](http://esprima.org/test/) with [full code coverage](http://esprima.org/test/coverage.html))\n- [Partial support](http://esprima.org/doc/es6.html) for ECMAScript 6\n\nEsprima serves as a **building block** for some JavaScript\nlanguage tools, from [code instrumentation](http://esprima.org/demo/functiontrace.html)\nto [editor autocompletion](http://esprima.org/demo/autocomplete.html).\n\nEsprima runs on many popular web browsers, as well as other ECMAScript platforms such as\n[Rhino](http://www.mozilla.org/rhino), [Nashorn](http://openjdk.java.net/projects/nashorn/), and [Node.js](https://npmjs.org/package/esprima).\n\nFor more information, check the web site [esprima.org](http://esprima.org).\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/jsonpath/node_modules/esprima", "error": "[Circular]", "extraneous": false }, "static-eval": { "_from": "static-eval@2.0.2", "_id": "static-eval@2.0.2", "_inBundle": false, "_integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", "_location": "/static-eval", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "static-eval@2.0.2", "name": "static-eval", "escapedName": "static-eval", "rawSpec": "2.0.2", "saveSpec": "[Circular]", "fetchSpec": "2.0.2" }, "_requiredBy": [ "/jsonpath" ], "_resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", "_shasum": "2d1759306b1befa688938454c546b7871f806a42", "_spec": "static-eval@2.0.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/jsonpath", "author": { "name": "James Halliday", "email": "mail@substack.net", "url": "http://substack.net" }, "bugs": { "url": "https://github.com/substack/static-eval/issues" }, "dependencies": { "escodegen": { "_from": "escodegen@^1.8.1", "_id": "escodegen@1.14.3", "_inBundle": false, "_integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "_location": "/escodegen", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "escodegen@^1.8.1", "name": "escodegen", "escapedName": "escodegen", "rawSpec": "^1.8.1", "saveSpec": "[Circular]", "fetchSpec": "^1.8.1" }, "_requiredBy": [ "/static-eval" ], "_resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", "_shasum": "4e7b81fba61581dc97582ed78cab7f0e8d63f503", "_spec": "escodegen@^1.8.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/static-eval", "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" }, "bugs": { "url": "https://github.com/estools/escodegen/issues" }, "dependencies": { "esprima": { "_from": "esprima@^4.0.0", "_id": "esprima@4.0.1", "_inBundle": false, "_integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "_location": "/esprima", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "_shasum": "13b04cdb3e6c5d19df91ab6987a8695619b0aa71", "_spec": "esprima@^4.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/js-yaml", "author": "[Circular]", "bin": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "ECMAScript parsing infrastructure for multipurpose analysis", "devDependencies": "[Circular]", "engines": "[Circular]", "files": "[Circular]", "homepage": "http://esprima.org", "keywords": "[Circular]", "license": "BSD-2-Clause", "main": "dist/esprima.js", "maintainers": "[Circular]", "name": "esprima", "repository": "[Circular]", "scripts": "[Circular]", "version": "4.0.1", "readme": "[![NPM version](https://img.shields.io/npm/v/esprima.svg)](https://www.npmjs.com/package/esprima)\n[![npm download](https://img.shields.io/npm/dm/esprima.svg)](https://www.npmjs.com/package/esprima)\n[![Build Status](https://img.shields.io/travis/jquery/esprima/master.svg)](https://travis-ci.org/jquery/esprima)\n[![Coverage Status](https://img.shields.io/codecov/c/github/jquery/esprima/master.svg)](https://codecov.io/github/jquery/esprima)\n\n**Esprima** ([esprima.org](http://esprima.org), BSD license) is a high performance,\nstandard-compliant [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)\nparser written in ECMAScript (also popularly known as\n[JavaScript](https://en.wikipedia.org/wiki/JavaScript)).\nEsprima is created and maintained by [Ariya Hidayat](https://twitter.com/ariyahidayat),\nwith the help of [many contributors](https://github.com/jquery/esprima/contributors).\n\n### Features\n\n- Full support for ECMAScript 2017 ([ECMA-262 8th Edition](http://www.ecma-international.org/publications/standards/Ecma-262.htm))\n- Sensible [syntax tree format](https://github.com/estree/estree/blob/master/es5.md) as standardized by [ESTree project](https://github.com/estree/estree)\n- Experimental support for [JSX](https://facebook.github.io/jsx/), a syntax extension for [React](https://facebook.github.io/react/)\n- Optional tracking of syntax node location (index-based and line-column)\n- [Heavily tested](http://esprima.org/test/ci.html) (~1500 [unit tests](https://github.com/jquery/esprima/tree/master/test/fixtures) with [full code coverage](https://codecov.io/github/jquery/esprima))\n\n### API\n\nEsprima can be used to perform [lexical analysis](https://en.wikipedia.org/wiki/Lexical_analysis) (tokenization) or [syntactic analysis](https://en.wikipedia.org/wiki/Parsing) (parsing) of a JavaScript program.\n\nA simple example on Node.js REPL:\n\n```javascript\n> var esprima = require('esprima');\n> var program = 'const answer = 42';\n\n> esprima.tokenize(program);\n[ { type: 'Keyword', value: 'const' },\n { type: 'Identifier', value: 'answer' },\n { type: 'Punctuator', value: '=' },\n { type: 'Numeric', value: '42' } ]\n \n> esprima.parseScript(program);\n{ type: 'Program',\n body:\n [ { type: 'VariableDeclaration',\n declarations: [Object],\n kind: 'const' } ],\n sourceType: 'script' }\n```\n\nFor more information, please read the [complete documentation](http://esprima.org/doc).", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/esprima", "error": "[Circular]", "extraneous": false, "_deduped": "esprima" }, "estraverse": { "_from": "estraverse@^4.2.0", "_id": "estraverse@4.3.0", "_inBundle": false, "_integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "_location": "/estraverse", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "estraverse@^4.2.0", "name": "estraverse", "escapedName": "estraverse", "rawSpec": "^4.2.0", "saveSpec": "[Circular]", "fetchSpec": "^4.2.0" }, "_requiredBy": [ "/escodegen", "/eslint-scope" ], "_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "_shasum": "398ad3f3c5a24948be7725e83d11a7de28cdbd1d", "_spec": "estraverse@^4.2.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/escodegen", "bugs": { "url": "https://github.com/estools/estraverse/issues" }, "deprecated": false, "description": "ECMAScript JS AST traversal functions", "devDependencies": { "babel-preset-env": "^1.6.1", "babel-register": "^6.3.13", "chai": "^2.1.1", "espree": "^1.11.0", "gulp": "^3.8.10", "gulp-bump": "^0.2.2", "gulp-filter": "^2.0.0", "gulp-git": "^1.0.1", "gulp-tag-version": "^1.3.0", "jshint": "^2.5.6", "mocha": "^2.1.0" }, "engines": { "node": ">=4.0" }, "homepage": "https://github.com/estools/estraverse", "license": "BSD-2-Clause", "main": "estraverse.js", "maintainers": [ { "name": "Yusuke Suzuki", "email": "utatane.tea@gmail.com", "url": "http://github.com/Constellation" } ], "name": "estraverse", "repository": { "type": "git", "url": "git+ssh://git@github.com/estools/estraverse.git" }, "scripts": { "lint": "jshint estraverse.js", "test": "npm run-script lint && npm run-script unit-test", "unit-test": "mocha --compilers js:babel-register" }, "version": "4.3.0", "readme": "### Estraverse [![Build Status](https://secure.travis-ci.org/estools/estraverse.svg)](http://travis-ci.org/estools/estraverse)\n\nEstraverse ([estraverse](http://github.com/estools/estraverse)) is\n[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)\ntraversal functions from [esmangle project](http://github.com/estools/esmangle).\n\n### Documentation\n\nYou can find usage docs at [wiki page](https://github.com/estools/estraverse/wiki/Usage).\n\n### Example Usage\n\nThe following code will output all variables declared at the root of a file.\n\n```javascript\nestraverse.traverse(ast, {\n enter: function (node, parent) {\n if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration')\n return estraverse.VisitorOption.Skip;\n },\n leave: function (node, parent) {\n if (node.type == 'VariableDeclarator')\n console.log(node.id.name);\n }\n});\n```\n\nWe can use `this.skip`, `this.remove` and `this.break` functions instead of using Skip, Remove and Break.\n\n```javascript\nestraverse.traverse(ast, {\n enter: function (node) {\n this.break();\n }\n});\n```\n\nAnd estraverse provides `estraverse.replace` function. When returning node from `enter`/`leave`, current node is replaced with it.\n\n```javascript\nresult = estraverse.replace(tree, {\n enter: function (node) {\n // Replace it with replaced.\n if (node.type === 'Literal')\n return replaced;\n }\n});\n```\n\nBy passing `visitor.keys` mapping, we can extend estraverse traversing functionality.\n\n```javascript\n// This tree contains a user-defined `TestExpression` node.\nvar tree = {\n type: 'TestExpression',\n\n // This 'argument' is the property containing the other **node**.\n argument: {\n type: 'Literal',\n value: 20\n },\n\n // This 'extended' is the property not containing the other **node**.\n extended: true\n};\nestraverse.traverse(tree, {\n enter: function (node) { },\n\n // Extending the existing traversing rules.\n keys: {\n // TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ]\n TestExpression: ['argument']\n }\n});\n```\n\nBy passing `visitor.fallback` option, we can control the behavior when encountering unknown nodes.\n\n```javascript\n// This tree contains a user-defined `TestExpression` node.\nvar tree = {\n type: 'TestExpression',\n\n // This 'argument' is the property containing the other **node**.\n argument: {\n type: 'Literal',\n value: 20\n },\n\n // This 'extended' is the property not containing the other **node**.\n extended: true\n};\nestraverse.traverse(tree, {\n enter: function (node) { },\n\n // Iterating the child **nodes** of unknown nodes.\n fallback: 'iteration'\n});\n```\n\nWhen `visitor.fallback` is a function, we can determine which keys to visit on each node.\n\n```javascript\n// This tree contains a user-defined `TestExpression` node.\nvar tree = {\n type: 'TestExpression',\n\n // This 'argument' is the property containing the other **node**.\n argument: {\n type: 'Literal',\n value: 20\n },\n\n // This 'extended' is the property not containing the other **node**.\n extended: true\n};\nestraverse.traverse(tree, {\n enter: function (node) { },\n\n // Skip the `argument` property of each node\n fallback: function(node) {\n return Object.keys(node).filter(function(key) {\n return key !== 'argument';\n });\n }\n});\n```\n\n### License\n\nCopyright (C) 2012-2016 [Yusuke Suzuki](http://github.com/Constellation)\n (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors.\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\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\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\nARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\nDIRECT, 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\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/estraverse", "error": "[Circular]", "extraneous": false }, "esutils": { "_from": "esutils@^2.0.2", "_id": "esutils@2.0.3", "_inBundle": false, "_integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "_location": "/esutils", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "esutils@^2.0.2", "name": "esutils", "escapedName": "esutils", "rawSpec": "^2.0.2", "saveSpec": "[Circular]", "fetchSpec": "^2.0.2" }, "_requiredBy": [ "/@babel/preset-modules", "/doctrine", "/escodegen", "/eslint", "/eslint/doctrine" ], "_resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "_shasum": "74d2eb4de0b8da1293711910d50775b9b710ef64", "_spec": "esutils@^2.0.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/escodegen", "bugs": { "url": "https://github.com/estools/esutils/issues" }, "deprecated": false, "description": "utility box for ECMAScript language tools", "devDependencies": { "chai": "~1.7.2", "coffee-script": "~1.6.3", "jshint": "2.6.3", "mocha": "~2.2.1", "regenerate": "~1.3.1", "unicode-9.0.0": "~0.7.0" }, "directories": { "lib": "./lib" }, "engines": { "node": ">=0.10.0" }, "files": [ "LICENSE.BSD", "README.md", "lib" ], "homepage": "https://github.com/estools/esutils", "license": "BSD-2-Clause", "main": "lib/utils.js", "maintainers": [ { "name": "Yusuke Suzuki", "email": "utatane.tea@gmail.com", "url": "http://github.com/Constellation" } ], "name": "esutils", "repository": { "type": "git", "url": "git+ssh://git@github.com/estools/esutils.git" }, "scripts": { "generate-regex": "node tools/generate-identifier-regex.js", "lint": "jshint lib/*.js", "test": "npm run-script lint && npm run-script unit-test", "unit-test": "mocha --compilers coffee:coffee-script -R spec" }, "version": "2.0.3", "readme": "### esutils [![Build Status](https://secure.travis-ci.org/estools/esutils.svg)](http://travis-ci.org/estools/esutils)\nesutils ([esutils](http://github.com/estools/esutils)) is\nutility box for ECMAScript language tools.\n\n### API\n\n### ast\n\n#### ast.isExpression(node)\n\nReturns true if `node` is an Expression as defined in ECMA262 edition 5.1 section\n[11](https://es5.github.io/#x11).\n\n#### ast.isStatement(node)\n\nReturns true if `node` is a Statement as defined in ECMA262 edition 5.1 section\n[12](https://es5.github.io/#x12).\n\n#### ast.isIterationStatement(node)\n\nReturns true if `node` is an IterationStatement as defined in ECMA262 edition\n5.1 section [12.6](https://es5.github.io/#x12.6).\n\n#### ast.isSourceElement(node)\n\nReturns true if `node` is a SourceElement as defined in ECMA262 edition 5.1\nsection [14](https://es5.github.io/#x14).\n\n#### ast.trailingStatement(node)\n\nReturns `Statement?` if `node` has trailing `Statement`.\n```js\nif (cond)\n consequent;\n```\nWhen taking this `IfStatement`, returns `consequent;` statement.\n\n#### ast.isProblematicIfStatement(node)\n\nReturns true if `node` is a problematic IfStatement. If `node` is a problematic `IfStatement`, `node` cannot be represented as an one on one JavaScript code.\n```js\n{\n type: 'IfStatement',\n consequent: {\n type: 'WithStatement',\n body: {\n type: 'IfStatement',\n consequent: {type: 'EmptyStatement'}\n }\n },\n alternate: {type: 'EmptyStatement'}\n}\n```\nThe above node cannot be represented as a JavaScript code, since the top level `else` alternate belongs to an inner `IfStatement`.\n\n\n### code\n\n#### code.isDecimalDigit(code)\n\nReturn true if provided code is decimal digit.\n\n#### code.isHexDigit(code)\n\nReturn true if provided code is hexadecimal digit.\n\n#### code.isOctalDigit(code)\n\nReturn true if provided code is octal digit.\n\n#### code.isWhiteSpace(code)\n\nReturn true if provided code is white space. White space characters are formally defined in ECMA262.\n\n#### code.isLineTerminator(code)\n\nReturn true if provided code is line terminator. Line terminator characters are formally defined in ECMA262.\n\n#### code.isIdentifierStart(code)\n\nReturn true if provided code can be the first character of ECMA262 Identifier. They are formally defined in ECMA262.\n\n#### code.isIdentifierPart(code)\n\nReturn true if provided code can be the trailing character of ECMA262 Identifier. They are formally defined in ECMA262.\n\n### keyword\n\n#### keyword.isKeywordES5(id, strict)\n\nReturns `true` if provided identifier string is a Keyword or Future Reserved Word\nin ECMA262 edition 5.1. They are formally defined in ECMA262 sections\n[7.6.1.1](http://es5.github.io/#x7.6.1.1) and [7.6.1.2](http://es5.github.io/#x7.6.1.2),\nrespectively. If the `strict` flag is truthy, this function additionally checks whether\n`id` is a Keyword or Future Reserved Word under strict mode.\n\n#### keyword.isKeywordES6(id, strict)\n\nReturns `true` if provided identifier string is a Keyword or Future Reserved Word\nin ECMA262 edition 6. They are formally defined in ECMA262 sections\n[11.6.2.1](http://ecma-international.org/ecma-262/6.0/#sec-keywords) and\n[11.6.2.2](http://ecma-international.org/ecma-262/6.0/#sec-future-reserved-words),\nrespectively. If the `strict` flag is truthy, this function additionally checks whether\n`id` is a Keyword or Future Reserved Word under strict mode.\n\n#### keyword.isReservedWordES5(id, strict)\n\nReturns `true` if provided identifier string is a Reserved Word in ECMA262 edition 5.1.\nThey are formally defined in ECMA262 section [7.6.1](http://es5.github.io/#x7.6.1).\nIf the `strict` flag is truthy, this function additionally checks whether `id`\nis a Reserved Word under strict mode.\n\n#### keyword.isReservedWordES6(id, strict)\n\nReturns `true` if provided identifier string is a Reserved Word in ECMA262 edition 6.\nThey are formally defined in ECMA262 section [11.6.2](http://ecma-international.org/ecma-262/6.0/#sec-reserved-words).\nIf the `strict` flag is truthy, this function additionally checks whether `id`\nis a Reserved Word under strict mode.\n\n#### keyword.isRestrictedWord(id)\n\nReturns `true` if provided identifier string is one of `eval` or `arguments`.\nThey are restricted in strict mode code throughout ECMA262 edition 5.1 and\nin ECMA262 edition 6 section [12.1.1](http://ecma-international.org/ecma-262/6.0/#sec-identifiers-static-semantics-early-errors).\n\n#### keyword.isIdentifierNameES5(id)\n\nReturn true if provided identifier string is an IdentifierName as specified in\nECMA262 edition 5.1 section [7.6](https://es5.github.io/#x7.6).\n\n#### keyword.isIdentifierNameES6(id)\n\nReturn true if provided identifier string is an IdentifierName as specified in\nECMA262 edition 6 section [11.6](http://ecma-international.org/ecma-262/6.0/#sec-names-and-keywords).\n\n#### keyword.isIdentifierES5(id, strict)\n\nReturn true if provided identifier string is an Identifier as specified in\nECMA262 edition 5.1 section [7.6](https://es5.github.io/#x7.6). If the `strict`\nflag is truthy, this function additionally checks whether `id` is an Identifier\nunder strict mode.\n\n#### keyword.isIdentifierES6(id, strict)\n\nReturn true if provided identifier string is an Identifier as specified in\nECMA262 edition 6 section [12.1](http://ecma-international.org/ecma-262/6.0/#sec-identifiers).\nIf the `strict` flag is truthy, this function additionally checks whether `id`\nis an Identifier under strict mode.\n\n### License\n\nCopyright (C) 2013 [Yusuke Suzuki](http://github.com/Constellation)\n (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors.\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\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\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\nARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\nDIRECT, 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\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/esutils", "error": "[Circular]", "extraneous": false }, "optionator": { "_from": "optionator@^0.8.1", "_id": "optionator@0.8.3", "_inBundle": false, "_integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "_location": "/optionator", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "optionator@^0.8.1", "name": "optionator", "escapedName": "optionator", "rawSpec": "^0.8.1", "saveSpec": "[Circular]", "fetchSpec": "^0.8.1" }, "_requiredBy": [ "/escodegen" ], "_resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "_shasum": "84fa1d036fe9d3c7e21d99884b601167ec8fb495", "_spec": "optionator@^0.8.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/escodegen", "author": { "name": "George Zahariev", "email": "z@georgezahariev.com" }, "bugs": { "url": "https://github.com/gkz/optionator/issues" }, "dependencies": { "deep-is": { "_from": "deep-is@~0.1.3", "_id": "deep-is@0.1.4", "_inBundle": false, "_integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "_location": "/deep-is", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "deep-is@~0.1.3", "name": "deep-is", "escapedName": "deep-is", "rawSpec": "~0.1.3", "saveSpec": "[Circular]", "fetchSpec": "~0.1.3" }, "_requiredBy": [ "/eslint/optionator", "/optionator" ], "_resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "_shasum": "a6f2dce612fadd2ef1f519b73551f17e85199831", "_spec": "deep-is@~0.1.3", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": { "name": "Thorsten Lorenz", "email": "thlorenz@gmx.de", "url": "http://thlorenz.com" }, "bugs": { "url": "https://github.com/thlorenz/deep-is/issues" }, "deprecated": false, "description": "node's assert.deepEqual algorithm except for NaN being equal to NaN", "devDependencies": { "tape": "~1.0.2" }, "directories": { "lib": ".", "example": "example", "test": "test" }, "homepage": "https://github.com/thlorenz/deep-is#readme", "keywords": [ "equality", "equal", "compare" ], "license": "MIT", "main": "index.js", "name": "deep-is", "repository": { "type": "git", "url": "git+ssh://git@github.com/thlorenz/deep-is.git" }, "scripts": { "test": "tape test/*.js" }, "testling": { "files": "test/*.js", "browsers": { "ie": [ 6, 7, 8, 9 ], "ff": [ 3.5, 10, 15 ], "chrome": [ 10, 22 ], "safari": [ 5.1 ], "opera": [ 12 ] } }, "version": "0.1.4", "readme": "deep-is\n==========\n\nNode's `assert.deepEqual() algorithm` as a standalone module. Exactly like\n[deep-equal](https://github.com/substack/node-deep-equal) except for the fact that `deepEqual(NaN, NaN) === true`.\n\nThis module is around [5 times faster](https://gist.github.com/2790507)\nthan wrapping `assert.deepEqual()` in a `try/catch`.\n\n[![browser support](http://ci.testling.com/thlorenz/deep-is.png)](http://ci.testling.com/thlorenz/deep-is)\n\n[![build status](https://secure.travis-ci.org/thlorenz/deep-is.png)](http://travis-ci.org/thlorenz/deep-is)\n\nexample\n=======\n\n``` js\nvar equal = require('deep-is');\nconsole.dir([\n equal(\n { a : [ 2, 3 ], b : [ 4 ] },\n { a : [ 2, 3 ], b : [ 4 ] }\n ),\n equal(\n { x : 5, y : [6] },\n { x : 5, y : 6 }\n )\n]);\n```\n\nmethods\n=======\n\nvar deepIs = require('deep-is')\n\ndeepIs(a, b)\n---------------\n\nCompare objects `a` and `b`, returning whether they are equal according to a\nrecursive equality algorithm.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install deep-is\n```\n\ntest\n====\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm test\n```\n\nlicense\n=======\n\nCopyright (c) 2012, 2013 Thorsten Lorenz \nCopyright (c) 2012 James Halliday \n\nDerived largely from node's assert module, which has the copyright statement:\n\nCopyright (c) 2009 Thomas Robinson <280north.com>\n\nReleased under the MIT license, see LICENSE for details.\n", "readmeFilename": "README.markdown", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/deep-is", "error": "[Circular]", "extraneous": false }, "fast-levenshtein": { "_from": "fast-levenshtein@~2.0.6", "_id": "fast-levenshtein@2.0.6", "_inBundle": false, "_integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "_location": "/fast-levenshtein", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "fast-levenshtein@~2.0.6", "name": "fast-levenshtein", "escapedName": "fast-levenshtein", "rawSpec": "~2.0.6", "saveSpec": "[Circular]", "fetchSpec": "~2.0.6" }, "_requiredBy": [ "/eslint/optionator", "/optionator" ], "_resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "_shasum": "3d8a5c66883a16a30ca8643e851f19baa7797917", "_spec": "fast-levenshtein@~2.0.6", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": { "name": "Ramesh Nair", "email": "ram@hiddentao.com", "url": "http://www.hiddentao.com/" }, "bugs": { "url": "https://github.com/hiddentao/fast-levenshtein/issues" }, "deprecated": false, "description": "Efficient implementation of Levenshtein algorithm with locale-specific collator support.", "devDependencies": { "chai": "~1.5.0", "grunt": "~0.4.1", "grunt-benchmark": "~0.2.0", "grunt-cli": "^1.2.0", "grunt-contrib-jshint": "~0.4.3", "grunt-contrib-uglify": "~0.2.0", "grunt-mocha-test": "~0.2.2", "grunt-npm-install": "~0.1.0", "load-grunt-tasks": "~0.6.0", "lodash": "^4.0.1", "mocha": "~1.9.0" }, "files": [ "levenshtein.js" ], "homepage": "https://github.com/hiddentao/fast-levenshtein#readme", "keywords": [ "levenshtein", "distance", "string" ], "license": "MIT", "main": "levenshtein.js", "name": "fast-levenshtein", "repository": { "type": "git", "url": "git+https://github.com/hiddentao/fast-levenshtein.git" }, "scripts": { "benchmark": "grunt benchmark", "build": "grunt build", "prepublish": "npm run build", "test": "mocha" }, "version": "2.0.6", "readme": "# fast-levenshtein - Levenshtein algorithm in Javascript\n\n[![Build Status](https://secure.travis-ci.org/hiddentao/fast-levenshtein.png)](http://travis-ci.org/hiddentao/fast-levenshtein)\n[![NPM module](https://badge.fury.io/js/fast-levenshtein.png)](https://badge.fury.io/js/fast-levenshtein)\n[![NPM downloads](https://img.shields.io/npm/dm/fast-levenshtein.svg?maxAge=2592000)](https://www.npmjs.com/package/fast-levenshtein)\n[![Follow on Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Follow&maxAge=2592000)](https://twitter.com/hiddentao)\n\nAn efficient Javascript implementation of the [Levenshtein algorithm](http://en.wikipedia.org/wiki/Levenshtein_distance) with locale-specific collator support.\n\n## Features\n\n* Works in node.js and in the browser.\n* Better performance than other implementations by not needing to store the whole matrix ([more info](http://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm)).\n* Locale-sensitive string comparisions if needed.\n* Comprehensive test suite and performance benchmark.\n* Small: <1 KB minified and gzipped\n\n## Installation\n\n### node.js\n\nInstall using [npm](http://npmjs.org/):\n\n```bash\n$ npm install fast-levenshtein\n```\n\n### Browser\n\nUsing bower:\n\n```bash\n$ bower install fast-levenshtein\n```\n\nIf you are not using any module loader system then the API will then be accessible via the `window.Levenshtein` object.\n\n## Examples\n\n**Default usage**\n\n```javascript\nvar levenshtein = require('fast-levenshtein');\n\nvar distance = levenshtein.get('back', 'book'); // 2\nvar distance = levenshtein.get('我愛你', '我叫你'); // 1\n```\n\n**Locale-sensitive string comparisons**\n\nIt supports using [Intl.Collator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator) for locale-sensitive string comparisons:\n\n```javascript\nvar levenshtein = require('fast-levenshtein');\n\nlevenshtein.get('mikailovitch', 'Mikhaïlovitch', { useCollator: true});\n// 1\n```\n\n## Building and Testing\n\nTo build the code and run the tests:\n\n```bash\n$ npm install -g grunt-cli\n$ npm install\n$ npm run build\n```\n\n## Performance\n\n_Thanks to [Titus Wormer](https://github.com/wooorm) for [encouraging me](https://github.com/hiddentao/fast-levenshtein/issues/1) to do this._\n\nBenchmarked against other node.js levenshtein distance modules (on Macbook Air 2012, Core i7, 8GB RAM):\n\n```bash\nRunning suite Implementation comparison [benchmark/speed.js]...\n>> levenshtein-edit-distance x 234 ops/sec ±3.02% (73 runs sampled)\n>> levenshtein-component x 422 ops/sec ±4.38% (83 runs sampled)\n>> levenshtein-deltas x 283 ops/sec ±3.83% (78 runs sampled)\n>> natural x 255 ops/sec ±0.76% (88 runs sampled)\n>> levenshtein x 180 ops/sec ±3.55% (86 runs sampled)\n>> fast-levenshtein x 1,792 ops/sec ±2.72% (95 runs sampled)\nBenchmark done.\nFastest test is fast-levenshtein at 4.2x faster than levenshtein-component\n```\n\nYou can run this benchmark yourself by doing:\n\n```bash\n$ npm install\n$ npm run build\n$ npm run benchmark\n```\n\n## Contributing\n\nIf you wish to submit a pull request please update and/or create new tests for any changes you make and ensure the grunt build passes.\n\nSee [CONTRIBUTING.md](https://github.com/hiddentao/fast-levenshtein/blob/master/CONTRIBUTING.md) for details.\n\n## License\n\nMIT - see [LICENSE.md](https://github.com/hiddentao/fast-levenshtein/blob/master/LICENSE.md)\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/fast-levenshtein", "error": "[Circular]", "extraneous": false }, "levn": { "_from": "levn@~0.3.0", "_id": "levn@0.3.0", "_inBundle": false, "_integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "_location": "/levn", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "levn@~0.3.0", "name": "levn", "escapedName": "levn", "rawSpec": "~0.3.0", "saveSpec": "[Circular]", "fetchSpec": "~0.3.0" }, "_requiredBy": [ "/optionator" ], "_resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "_shasum": "3b09924edf9f083c0490fdd4c0bc4421e04764ee", "_spec": "levn@~0.3.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": { "name": "George Zahariev", "email": "z@georgezahariev.com" }, "bugs": { "url": "https://github.com/gkz/levn/issues" }, "dependencies": { "prelude-ls": { "_from": "prelude-ls@~1.1.2", "_id": "prelude-ls@1.1.2", "_inBundle": false, "_integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "_location": "/prelude-ls", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "prelude-ls@~1.1.2", "name": "prelude-ls", "escapedName": "prelude-ls", "rawSpec": "~1.1.2", "saveSpec": "[Circular]", "fetchSpec": "~1.1.2" }, "_requiredBy": [ "/levn", "/optionator", "/type-check" ], "_resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "_shasum": "21932a549f5e52ffd9a827f570e04be62a97da54", "_spec": "prelude-ls@~1.1.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": { "name": "George Zahariev", "email": "z@georgezahariev.com" }, "bugs": { "url": "https://github.com/gkz/prelude-ls/issues" }, "deprecated": false, "description": "prelude.ls is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.", "devDependencies": { "browserify": "~3.24.13", "istanbul": "~0.2.4", "livescript": "~1.4.0", "mocha": "~2.2.4", "sinon": "~1.10.2", "uglify-js": "~2.4.12" }, "engines": { "node": ">= 0.8.0" }, "files": [ "lib/", "README.md", "LICENSE" ], "homepage": "http://preludels.com", "keywords": [ "prelude", "livescript", "utility", "ls", "coffeescript", "javascript", "library", "functional", "array", "list", "object", "string" ], "licenses": [ { "type": "MIT", "url": "https://raw.github.com/gkz/prelude-ls/master/LICENSE" } ], "main": "lib/", "name": "prelude-ls", "repository": { "type": "git", "url": "git://github.com/gkz/prelude-ls.git" }, "scripts": { "test": "make test" }, "version": "1.1.2", "readme": "# prelude.ls [![Build Status](https://travis-ci.org/gkz/prelude-ls.png?branch=master)](https://travis-ci.org/gkz/prelude-ls)\n\nis a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.\n\nSee **[the prelude.ls site](http://preludels.com)** for examples, a reference, and more.\n\nYou can install via npm `npm install prelude-ls`\n\n### Development\n\n`make test` to test\n\n`make build` to build `lib` from `src`\n\n`make build-browser` to build browser versions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/prelude-ls", "error": "[Circular]", "extraneous": false, "_deduped": "prelude-ls" }, "type-check": { "_from": "type-check@~0.3.2", "_id": "type-check@0.3.2", "_inBundle": false, "_integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "_location": "/type-check", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "type-check@~0.3.2", "name": "type-check", "escapedName": "type-check", "rawSpec": "~0.3.2", "saveSpec": "[Circular]", "fetchSpec": "~0.3.2" }, "_requiredBy": [ "/levn", "/optionator" ], "_resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "_shasum": "5884cab512cf1d355e3fb784f30804b2b520db72", "_spec": "type-check@~0.3.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": { "name": "George Zahariev", "email": "z@georgezahariev.com" }, "bugs": { "url": "https://github.com/gkz/type-check/issues" }, "dependencies": {}, "deprecated": false, "description": "type-check allows you to check the types of JavaScript values at runtime with a Haskell like type syntax.", "devDependencies": { "browserify": "~12.0.1", "istanbul": "~0.4.1", "livescript": "~1.4.0", "mocha": "~2.3.4" }, "engines": { "node": ">= 0.8.0" }, "files": [ "lib", "README.md", "LICENSE" ], "homepage": "https://github.com/gkz/type-check", "keywords": [ "type", "check", "checking", "library" ], "license": "MIT", "main": "./lib/", "name": "type-check", "repository": { "type": "git", "url": "git://github.com/gkz/type-check.git" }, "scripts": { "test": "make test" }, "version": "0.3.2", "readme": "# type-check [![Build Status](https://travis-ci.org/gkz/type-check.png?branch=master)](https://travis-ci.org/gkz/type-check)\n\n\n\n`type-check` is a library which allows you to check the types of JavaScript values at runtime with a Haskell like type syntax. It is great for checking external input, for testing, or even for adding a bit of safety to your internal code. It is a major component of [levn](https://github.com/gkz/levn). MIT license. Version 0.3.2. Check out the [demo](http://gkz.github.io/type-check/).\n\nFor updates on `type-check`, [follow me on twitter](https://twitter.com/gkzahariev).\n\n npm install type-check\n\n## Quick Examples\n\n```js\n// Basic types:\nvar typeCheck = require('type-check').typeCheck;\ntypeCheck('Number', 1); // true\ntypeCheck('Number', 'str'); // false\ntypeCheck('Error', new Error); // true\ntypeCheck('Undefined', undefined); // true\n\n// Comment\ntypeCheck('count::Number', 1); // true\n\n// One type OR another type:\ntypeCheck('Number | String', 2); // true\ntypeCheck('Number | String', 'str'); // true\n\n// Wildcard, matches all types:\ntypeCheck('*', 2) // true\n\n// Array, all elements of a single type:\ntypeCheck('[Number]', [1, 2, 3]); // true\ntypeCheck('[Number]', [1, 'str', 3]); // false\n\n// Tuples, or fixed length arrays with elements of different types:\ntypeCheck('(String, Number)', ['str', 2]); // true\ntypeCheck('(String, Number)', ['str']); // false\ntypeCheck('(String, Number)', ['str', 2, 5]); // false\n\n// Object properties:\ntypeCheck('{x: Number, y: Boolean}', {x: 2, y: false}); // true\ntypeCheck('{x: Number, y: Boolean}', {x: 2}); // false\ntypeCheck('{x: Number, y: Maybe Boolean}', {x: 2}); // true\ntypeCheck('{x: Number, y: Boolean}', {x: 2, y: false, z: 3}); // false\ntypeCheck('{x: Number, y: Boolean, ...}', {x: 2, y: false, z: 3}); // true\n\n// A particular type AND object properties:\ntypeCheck('RegExp{source: String, ...}', /re/i); // true\ntypeCheck('RegExp{source: String, ...}', {source: 're'}); // false\n\n// Custom types:\nvar opt = {customTypes:\n {Even: { typeOf: 'Number', validate: function(x) { return x % 2 === 0; }}}};\ntypeCheck('Even', 2, opt); // true\n\n// Nested:\nvar type = '{a: (String, [Number], {y: Array, ...}), b: Error{message: String, ...}}'\ntypeCheck(type, {a: ['hi', [1, 2, 3], {y: [1, 'ms']}], b: new Error('oh no')}); // true\n```\n\nCheck out the [type syntax format](#syntax) and [guide](#guide).\n\n## Usage\n\n`require('type-check');` returns an object that exposes four properties. `VERSION` is the current version of the library as a string. `typeCheck`, `parseType`, and `parsedTypeCheck` are functions.\n\n```js\n// typeCheck(type, input, options);\ntypeCheck('Number', 2); // true\n\n// parseType(type);\nvar parsedType = parseType('Number'); // object\n\n// parsedTypeCheck(parsedType, input, options);\nparsedTypeCheck(parsedType, 2); // true\n```\n\n### typeCheck(type, input, options)\n\n`typeCheck` checks a JavaScript value `input` against `type` written in the [type format](#type-format) (and taking account the optional `options`) and returns whether the `input` matches the `type`.\n\n##### arguments\n* type - `String` - the type written in the [type format](#type-format) which to check against\n* input - `*` - any JavaScript value, which is to be checked against the type\n* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)\n\n##### returns\n`Boolean` - whether the input matches the type\n\n##### example\n```js\ntypeCheck('Number', 2); // true\n```\n\n### parseType(type)\n\n`parseType` parses string `type` written in the [type format](#type-format) into an object representing the parsed type.\n\n##### arguments\n* type - `String` - the type written in the [type format](#type-format) which to parse\n\n##### returns\n`Object` - an object in the parsed type format representing the parsed type\n\n##### example\n```js\nparseType('Number'); // [{type: 'Number'}]\n```\n### parsedTypeCheck(parsedType, input, options)\n\n`parsedTypeCheck` checks a JavaScript value `input` against parsed `type` in the parsed type format (and taking account the optional `options`) and returns whether the `input` matches the `type`. Use this in conjunction with `parseType` if you are going to use a type more than once.\n\n##### arguments\n* type - `Object` - the type in the parsed type format which to check against\n* input - `*` - any JavaScript value, which is to be checked against the type\n* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)\n\n##### returns\n`Boolean` - whether the input matches the type\n\n##### example\n```js\nparsedTypeCheck([{type: 'Number'}], 2); // true\nvar parsedType = parseType('String');\nparsedTypeCheck(parsedType, 'str'); // true\n```\n\n\n## Type Format\n\n### Syntax\n\nWhite space is ignored. The root node is a __Types__.\n\n* __Identifier__ = `[\\$\\w]+` - a group of any lower or upper case letters, numbers, underscores, or dollar signs - eg. `String`\n* __Type__ = an `Identifier`, an `Identifier` followed by a `Structure`, just a `Structure`, or a wildcard `*` - eg. `String`, `Object{x: Number}`, `{x: Number}`, `Array{0: String, 1: Boolean, length: Number}`, `*`\n* __Types__ = optionally a comment (an `Indentifier` followed by a `::`), optionally the identifier `Maybe`, one or more `Type`, separated by `|` - eg. `Number`, `String | Date`, `Maybe Number`, `Maybe Boolean | String`\n* __Structure__ = `Fields`, or a `Tuple`, or an `Array` - eg. `{x: Number}`, `(String, Number)`, `[Date]`\n* __Fields__ = a `{`, followed one or more `Field` separated by a comma `,` (trailing comma `,` is permitted), optionally an `...` (always preceded by a comma `,`), followed by a `}` - eg. `{x: Number, y: String}`, `{k: Function, ...}`\n* __Field__ = an `Identifier`, followed by a colon `:`, followed by `Types` - eg. `x: Date | String`, `y: Boolean`\n* __Tuple__ = a `(`, followed by one or more `Types` separated by a comma `,` (trailing comma `,` is permitted), followed by a `)` - eg `(Date)`, `(Number, Date)`\n* __Array__ = a `[` followed by exactly one `Types` followed by a `]` - eg. `[Boolean]`, `[Boolean | Null]`\n\n### Guide\n\n`type-check` uses `Object.toString` to find out the basic type of a value. Specifically,\n\n```js\n{}.toString.call(VALUE).slice(8, -1)\n{}.toString.call(true).slice(8, -1) // 'Boolean'\n```\nA basic type, eg. `Number`, uses this check. This is much more versatile than using `typeof` - for example, with `document`, `typeof` produces `'object'` which isn't that useful, and our technique produces `'HTMLDocument'`.\n\nYou may check for multiple types by separating types with a `|`. The checker proceeds from left to right, and passes if the value is any of the types - eg. `String | Boolean` first checks if the value is a string, and then if it is a boolean. If it is none of those, then it returns false.\n\nAdding a `Maybe` in front of a list of multiple types is the same as also checking for `Null` and `Undefined` - eg. `Maybe String` is equivalent to `Undefined | Null | String`.\n\nYou may add a comment to remind you of what the type is for by following an identifier with a `::` before a type (or multiple types). The comment is simply thrown out.\n\nThe wildcard `*` matches all types.\n\nThere are three types of structures for checking the contents of a value: 'fields', 'tuple', and 'array'.\n\nIf used by itself, a 'fields' structure will pass with any type of object as long as it is an instance of `Object` and the properties pass - this allows for duck typing - eg. `{x: Boolean}`.\n\nTo check if the properties pass, and the value is of a certain type, you can specify the type - eg. `Error{message: String}`.\n\nIf you want to make a field optional, you can simply use `Maybe` - eg. `{x: Boolean, y: Maybe String}` will still pass if `y` is undefined (or null).\n\nIf you don't care if the value has properties beyond what you have specified, you can use the 'etc' operator `...` - eg. `{x: Boolean, ...}` will match an object with an `x` property that is a boolean, and with zero or more other properties.\n\nFor an array, you must specify one or more types (separated by `|`) - it will pass for something of any length as long as each element passes the types provided - eg. `[Number]`, `[Number | String]`.\n\nA tuple checks for a fixed number of elements, each of a potentially different type. Each element is separated by a comma - eg. `(String, Number)`.\n\nAn array and tuple structure check that the value is of type `Array` by default, but if another type is specified, they will check for that instead - eg. `Int32Array[Number]`. You can use the wildcard `*` to search for any type at all.\n\nCheck out the [type precedence](https://github.com/zaboco/type-precedence) library for type-check.\n\n## Options\n\nOptions is an object. It is an optional parameter to the `typeCheck` and `parsedTypeCheck` functions. The only current option is `customTypes`.\n\n\n### Custom Types\n\n__Example:__\n\n```js\nvar options = {\n customTypes: {\n Even: {\n typeOf: 'Number',\n validate: function(x) {\n return x % 2 === 0;\n }\n }\n }\n};\ntypeCheck('Even', 2, options); // true\ntypeCheck('Even', 3, options); // false\n```\n\n`customTypes` allows you to set up custom types for validation. The value of this is an object. The keys of the object are the types you will be matching. Each value of the object will be an object having a `typeOf` property - a string, and `validate` property - a function.\n\nThe `typeOf` property is the type the value should be, and `validate` is a function which should return true if the value is of that type. `validate` receives one parameter, which is the value that we are checking.\n\n## Technical About\n\n`type-check` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It also uses the [prelude.ls](http://preludels.com/) library.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "prelude-ls": "~1.1.2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/type-check", "error": "[Circular]", "extraneous": false, "_deduped": "type-check" } }, "deprecated": false, "description": "Light ECMAScript (JavaScript) Value Notation - human written, concise, typed, flexible", "devDependencies": { "istanbul": "~0.4.1", "livescript": "~1.4.0", "mocha": "~2.3.4" }, "engines": { "node": ">= 0.8.0" }, "files": [ "lib", "README.md", "LICENSE" ], "homepage": "https://github.com/gkz/levn", "keywords": [ "levn", "light", "ecmascript", "value", "notation", "json", "typed", "human", "concise", "typed", "flexible" ], "license": "MIT", "main": "./lib/", "name": "levn", "repository": { "type": "git", "url": "git://github.com/gkz/levn.git" }, "scripts": { "test": "make test" }, "version": "0.3.0", "readme": "# levn [![Build Status](https://travis-ci.org/gkz/levn.png)](https://travis-ci.org/gkz/levn) \n__Light ECMAScript (JavaScript) Value Notation__\nLevn is a library which allows you to parse a string into a JavaScript value based on an expected type. It is meant for short amounts of human entered data (eg. config files, command line arguments).\n\nLevn aims to concisely describe JavaScript values in text, and allow for the extraction and validation of those values. Levn uses [type-check](https://github.com/gkz/type-check) for its type format, and to validate the results. MIT license. Version 0.3.0.\n\n__How is this different than JSON?__ levn is meant to be written by humans only, is (due to the previous point) much more concise, can be validated against supplied types, has regex and date literals, and can easily be extended with custom types. On the other hand, it is probably slower and thus less efficient at transporting large amounts of data, which is fine since this is not its purpose.\n\n npm install levn\n\nFor updates on levn, [follow me on twitter](https://twitter.com/gkzahariev).\n\n\n## Quick Examples\n\n```js\nvar parse = require('levn').parse;\nparse('Number', '2'); // 2\nparse('String', '2'); // '2'\nparse('String', 'levn'); // 'levn'\nparse('String', 'a b'); // 'a b'\nparse('Boolean', 'true'); // true\n\nparse('Date', '#2011-11-11#'); // (Date object)\nparse('Date', '2011-11-11'); // (Date object)\nparse('RegExp', '/[a-z]/gi'); // /[a-z]/gi\nparse('RegExp', 're'); // /re/\nparse('Int', '2'); // 2\n\nparse('Number | String', 'str'); // 'str'\nparse('Number | String', '2'); // 2\n\nparse('[Number]', '[1,2,3]'); // [1,2,3]\nparse('(String, Boolean)', '(hi, false)'); // ['hi', false]\nparse('{a: String, b: Number}', '{a: str, b: 2}'); // {a: 'str', b: 2}\n\n// at the top level, you can ommit surrounding delimiters\nparse('[Number]', '1,2,3'); // [1,2,3]\nparse('(String, Boolean)', 'hi, false'); // ['hi', false]\nparse('{a: String, b: Number}', 'a: str, b: 2'); // {a: 'str', b: 2}\n\n// wildcard - auto choose type\nparse('*', '[hi,(null,[42]),{k: true}]'); // ['hi', [null, [42]], {k: true}]\n```\n## Usage\n\n`require('levn');` returns an object that exposes three properties. `VERSION` is the current version of the library as a string. `parse` and `parsedTypeParse` are functions.\n\n```js\n// parse(type, input, options);\nparse('[Number]', '1,2,3'); // [1, 2, 3]\n\n// parsedTypeParse(parsedType, input, options);\nvar parsedType = require('type-check').parseType('[Number]');\nparsedTypeParse(parsedType, '1,2,3'); // [1, 2, 3]\n```\n\n### parse(type, input, options)\n\n`parse` casts the string `input` into a JavaScript value according to the specified `type` in the [type format](https://github.com/gkz/type-check#type-format) (and taking account the optional `options`) and returns the resulting JavaScript value.\n\n##### arguments\n* type - `String` - the type written in the [type format](https://github.com/gkz/type-check#type-format) which to check against\n* input - `String` - the value written in the [levn format](#levn-format)\n* options - `Maybe Object` - an optional parameter specifying additional [options](#options)\n\n##### returns\n`*` - the resulting JavaScript value\n\n##### example\n```js\nparse('[Number]', '1,2,3'); // [1, 2, 3]\n```\n\n### parsedTypeParse(parsedType, input, options)\n\n`parsedTypeParse` casts the string `input` into a JavaScript value according to the specified `type` which has already been parsed (and taking account the optional `options`) and returns the resulting JavaScript value. You can parse a type using the [type-check](https://github.com/gkz/type-check) library's `parseType` function.\n\n##### arguments\n* type - `Object` - the type in the parsed type format which to check against\n* input - `String` - the value written in the [levn format](#levn-format)\n* options - `Maybe Object` - an optional parameter specifying additional [options](#options)\n\n##### returns\n`*` - the resulting JavaScript value\n\n##### example\n```js\nvar parsedType = require('type-check').parseType('[Number]');\nparsedTypeParse(parsedType, '1,2,3'); // [1, 2, 3]\n```\n\n## Levn Format\n\nLevn can use the type information you provide to choose the appropriate value to produce from the input. For the same input, it will choose a different output value depending on the type provided. For example, `parse('Number', '2')` will produce the number `2`, but `parse('String', '2')` will produce the string `\"2\"`.\n\nIf you do not provide type information, and simply use `*`, levn will parse the input according the unambiguous \"explicit\" mode, which we will now detail - you can also set the `explicit` option to true manually in the [options](#options).\n\n* `\"string\"`, `'string'` are parsed as a String, eg. `\"a msg\"` is `\"a msg\"`\n* `#date#` is parsed as a Date, eg. `#2011-11-11#` is `new Date('2011-11-11')`\n* `/regexp/flags` is parsed as a RegExp, eg. `/re/gi` is `/re/gi`\n* `undefined`, `null`, `NaN`, `true`, and `false` are all their JavaScript equivalents\n* `[element1, element2, etc]` is an Array, and the casting procedure is recursively applied to each element. Eg. `[1,2,3]` is `[1,2,3]`.\n* `(element1, element2, etc)` is an tuple, and the casting procedure is recursively applied to each element. Eg. `(1, a)` is `(1, a)` (is `[1, 'a']`).\n* `{key1: val1, key2: val2, ...}` is an Object, and the casting procedure is recursively applied to each property. Eg. `{a: 1, b: 2}` is `{a: 1, b: 2}`.\n* Any test which does not fall under the above, and which does not contain special characters (`[``]``(``)``{``}``:``,`) is a string, eg. `$12- blah` is `\"$12- blah\"`.\n\nIf you do provide type information, you can make your input more concise as the program already has some information about what it expects. Please see the [type format](https://github.com/gkz/type-check#type-format) section of [type-check](https://github.com/gkz/type-check) for more information about how to specify types. There are some rules about what levn can do with the information:\n\n* If a String is expected, and only a String, all characters of the input (including any special ones) will become part of the output. Eg. `[({})]` is `\"[({})]\"`, and `\"hi\"` is `'\"hi\"'`.\n* If a Date is expected, the surrounding `#` can be omitted from date literals. Eg. `2011-11-11` is `new Date('2011-11-11')`.\n* If a RegExp is expected, no flags need to be specified, and the regex is not using any of the special characters,the opening and closing `/` can be omitted - this will have the affect of setting the source of the regex to the input. Eg. `regex` is `/regex/`.\n* If an Array is expected, and it is the root node (at the top level), the opening `[` and closing `]` can be omitted. Eg. `1,2,3` is `[1,2,3]`.\n* If a tuple is expected, and it is the root node (at the top level), the opening `(` and closing `)` can be omitted. Eg. `1, a` is `(1, a)` (is `[1, 'a']`).\n* If an Object is expected, and it is the root node (at the top level), the opening `{` and closing `}` can be omitted. Eg `a: 1, b: 2` is `{a: 1, b: 2}`.\n\nIf you list multiple types (eg. `Number | String`), it will first attempt to cast to the first type and then validate - if the validation fails it will move on to the next type and so forth, left to right. You must be careful as some types will succeed with any input, such as String. Thus put String at the end of your list. In non-explicit mode, Date and RegExp will succeed with a large variety of input - also be careful with these and list them near the end if not last in your list.\n\nWhitespace between special characters and elements is inconsequential.\n\n## Options\n\nOptions is an object. It is an optional parameter to the `parse` and `parsedTypeParse` functions.\n\n### Explicit\n\nA `Boolean`. By default it is `false`.\n\n__Example:__\n\n```js\nparse('RegExp', 're', {explicit: false}); // /re/\nparse('RegExp', 're', {explicit: true}); // Error: ... does not type check...\nparse('RegExp | String', 're', {explicit: true}); // 're'\n```\n\n`explicit` sets whether to be in explicit mode or not. Using `*` automatically activates explicit mode. For more information, read the [levn format](#levn-format) section.\n\n### customTypes\n\nAn `Object`. Empty `{}` by default.\n\n__Example:__\n\n```js\nvar options = {\n customTypes: {\n Even: {\n typeOf: 'Number',\n validate: function (x) {\n return x % 2 === 0;\n },\n cast: function (x) {\n return {type: 'Just', value: parseInt(x)};\n }\n }\n }\n}\nparse('Even', '2', options); // 2\nparse('Even', '3', options); // Error: Value: \"3\" does not type check...\n```\n\n__Another Example:__\n```js\nfunction Person(name, age){\n this.name = name;\n this.age = age;\n}\nvar options = {\n customTypes: {\n Person: {\n typeOf: 'Object',\n validate: function (x) {\n x instanceof Person;\n },\n cast: function (value, options, typesCast) {\n var name, age;\n if ({}.toString.call(value).slice(8, -1) !== 'Object') {\n return {type: 'Nothing'};\n }\n name = typesCast(value.name, [{type: 'String'}], options);\n age = typesCast(value.age, [{type: 'Numger'}], options);\n return {type: 'Just', value: new Person(name, age)};\n }\n }\n}\nparse('Person', '{name: Laura, age: 25}', options); // Person {name: 'Laura', age: 25}\n```\n\n`customTypes` is an object whose keys are the name of the types, and whose values are an object with three properties, `typeOf`, `validate`, and `cast`. For more information about `typeOf` and `validate`, please see the [custom types](https://github.com/gkz/type-check#custom-types) section of type-check.\n\n`cast` is a function which receives three arguments, the value under question, options, and the typesCast function. In `cast`, attempt to cast the value into the specified type. If you are successful, return an object in the format `{type: 'Just', value: CAST-VALUE}`, if you know it won't work, return `{type: 'Nothing'}`. You can use the `typesCast` function to cast any child values. Remember to pass `options` to it. In your function you can also check for `options.explicit` and act accordingly.\n\n## Technical About\n\n`levn` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [type-check](https://github.com/gkz/type-check) to both parse types and validate values. It also uses the [prelude.ls](http://preludels.com/) library.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/levn", "error": "[Circular]", "extraneous": false }, "prelude-ls": { "_from": "prelude-ls@~1.1.2", "_id": "prelude-ls@1.1.2", "_inBundle": false, "_integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "_location": "/prelude-ls", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "_shasum": "21932a549f5e52ffd9a827f570e04be62a97da54", "_spec": "prelude-ls@~1.1.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "prelude.ls is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.", "devDependencies": "[Circular]", "engines": "[Circular]", "files": "[Circular]", "homepage": "http://preludels.com", "keywords": "[Circular]", "licenses": "[Circular]", "main": "lib/", "name": "prelude-ls", "repository": "[Circular]", "scripts": "[Circular]", "version": "1.1.2", "readme": "# prelude.ls [![Build Status](https://travis-ci.org/gkz/prelude-ls.png?branch=master)](https://travis-ci.org/gkz/prelude-ls)\n\nis a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.\n\nSee **[the prelude.ls site](http://preludels.com)** for examples, a reference, and more.\n\nYou can install via npm `npm install prelude-ls`\n\n### Development\n\n`make test` to test\n\n`make build` to build `lib` from `src`\n\n`make build-browser` to build browser versions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/prelude-ls", "error": "[Circular]", "extraneous": false }, "type-check": { "_from": "type-check@~0.3.2", "_id": "type-check@0.3.2", "_inBundle": false, "_integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "_location": "/type-check", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "_shasum": "5884cab512cf1d355e3fb784f30804b2b520db72", "_spec": "type-check@~0.3.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": "[Circular]", "bugs": "[Circular]", "dependencies": { "prelude-ls": { "_from": "prelude-ls@~1.1.2", "_id": "prelude-ls@1.1.2", "_inBundle": false, "_integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "_location": "/prelude-ls", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "_shasum": "21932a549f5e52ffd9a827f570e04be62a97da54", "_spec": "prelude-ls@~1.1.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "prelude.ls is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.", "devDependencies": "[Circular]", "engines": "[Circular]", "files": "[Circular]", "homepage": "http://preludels.com", "keywords": "[Circular]", "licenses": "[Circular]", "main": "lib/", "name": "prelude-ls", "repository": "[Circular]", "scripts": "[Circular]", "version": "1.1.2", "readme": "# prelude.ls [![Build Status](https://travis-ci.org/gkz/prelude-ls.png?branch=master)](https://travis-ci.org/gkz/prelude-ls)\n\nis a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.\n\nSee **[the prelude.ls site](http://preludels.com)** for examples, a reference, and more.\n\nYou can install via npm `npm install prelude-ls`\n\n### Development\n\n`make test` to test\n\n`make build` to build `lib` from `src`\n\n`make build-browser` to build browser versions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/prelude-ls", "error": "[Circular]", "extraneous": false, "_deduped": "prelude-ls" } }, "deprecated": false, "description": "type-check allows you to check the types of JavaScript values at runtime with a Haskell like type syntax.", "devDependencies": "[Circular]", "engines": "[Circular]", "files": "[Circular]", "homepage": "https://github.com/gkz/type-check", "keywords": "[Circular]", "license": "MIT", "main": "./lib/", "name": "type-check", "repository": "[Circular]", "scripts": "[Circular]", "version": "0.3.2", "readme": "# type-check [![Build Status](https://travis-ci.org/gkz/type-check.png?branch=master)](https://travis-ci.org/gkz/type-check)\n\n\n\n`type-check` is a library which allows you to check the types of JavaScript values at runtime with a Haskell like type syntax. It is great for checking external input, for testing, or even for adding a bit of safety to your internal code. It is a major component of [levn](https://github.com/gkz/levn). MIT license. Version 0.3.2. Check out the [demo](http://gkz.github.io/type-check/).\n\nFor updates on `type-check`, [follow me on twitter](https://twitter.com/gkzahariev).\n\n npm install type-check\n\n## Quick Examples\n\n```js\n// Basic types:\nvar typeCheck = require('type-check').typeCheck;\ntypeCheck('Number', 1); // true\ntypeCheck('Number', 'str'); // false\ntypeCheck('Error', new Error); // true\ntypeCheck('Undefined', undefined); // true\n\n// Comment\ntypeCheck('count::Number', 1); // true\n\n// One type OR another type:\ntypeCheck('Number | String', 2); // true\ntypeCheck('Number | String', 'str'); // true\n\n// Wildcard, matches all types:\ntypeCheck('*', 2) // true\n\n// Array, all elements of a single type:\ntypeCheck('[Number]', [1, 2, 3]); // true\ntypeCheck('[Number]', [1, 'str', 3]); // false\n\n// Tuples, or fixed length arrays with elements of different types:\ntypeCheck('(String, Number)', ['str', 2]); // true\ntypeCheck('(String, Number)', ['str']); // false\ntypeCheck('(String, Number)', ['str', 2, 5]); // false\n\n// Object properties:\ntypeCheck('{x: Number, y: Boolean}', {x: 2, y: false}); // true\ntypeCheck('{x: Number, y: Boolean}', {x: 2}); // false\ntypeCheck('{x: Number, y: Maybe Boolean}', {x: 2}); // true\ntypeCheck('{x: Number, y: Boolean}', {x: 2, y: false, z: 3}); // false\ntypeCheck('{x: Number, y: Boolean, ...}', {x: 2, y: false, z: 3}); // true\n\n// A particular type AND object properties:\ntypeCheck('RegExp{source: String, ...}', /re/i); // true\ntypeCheck('RegExp{source: String, ...}', {source: 're'}); // false\n\n// Custom types:\nvar opt = {customTypes:\n {Even: { typeOf: 'Number', validate: function(x) { return x % 2 === 0; }}}};\ntypeCheck('Even', 2, opt); // true\n\n// Nested:\nvar type = '{a: (String, [Number], {y: Array, ...}), b: Error{message: String, ...}}'\ntypeCheck(type, {a: ['hi', [1, 2, 3], {y: [1, 'ms']}], b: new Error('oh no')}); // true\n```\n\nCheck out the [type syntax format](#syntax) and [guide](#guide).\n\n## Usage\n\n`require('type-check');` returns an object that exposes four properties. `VERSION` is the current version of the library as a string. `typeCheck`, `parseType`, and `parsedTypeCheck` are functions.\n\n```js\n// typeCheck(type, input, options);\ntypeCheck('Number', 2); // true\n\n// parseType(type);\nvar parsedType = parseType('Number'); // object\n\n// parsedTypeCheck(parsedType, input, options);\nparsedTypeCheck(parsedType, 2); // true\n```\n\n### typeCheck(type, input, options)\n\n`typeCheck` checks a JavaScript value `input` against `type` written in the [type format](#type-format) (and taking account the optional `options`) and returns whether the `input` matches the `type`.\n\n##### arguments\n* type - `String` - the type written in the [type format](#type-format) which to check against\n* input - `*` - any JavaScript value, which is to be checked against the type\n* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)\n\n##### returns\n`Boolean` - whether the input matches the type\n\n##### example\n```js\ntypeCheck('Number', 2); // true\n```\n\n### parseType(type)\n\n`parseType` parses string `type` written in the [type format](#type-format) into an object representing the parsed type.\n\n##### arguments\n* type - `String` - the type written in the [type format](#type-format) which to parse\n\n##### returns\n`Object` - an object in the parsed type format representing the parsed type\n\n##### example\n```js\nparseType('Number'); // [{type: 'Number'}]\n```\n### parsedTypeCheck(parsedType, input, options)\n\n`parsedTypeCheck` checks a JavaScript value `input` against parsed `type` in the parsed type format (and taking account the optional `options`) and returns whether the `input` matches the `type`. Use this in conjunction with `parseType` if you are going to use a type more than once.\n\n##### arguments\n* type - `Object` - the type in the parsed type format which to check against\n* input - `*` - any JavaScript value, which is to be checked against the type\n* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)\n\n##### returns\n`Boolean` - whether the input matches the type\n\n##### example\n```js\nparsedTypeCheck([{type: 'Number'}], 2); // true\nvar parsedType = parseType('String');\nparsedTypeCheck(parsedType, 'str'); // true\n```\n\n\n## Type Format\n\n### Syntax\n\nWhite space is ignored. The root node is a __Types__.\n\n* __Identifier__ = `[\\$\\w]+` - a group of any lower or upper case letters, numbers, underscores, or dollar signs - eg. `String`\n* __Type__ = an `Identifier`, an `Identifier` followed by a `Structure`, just a `Structure`, or a wildcard `*` - eg. `String`, `Object{x: Number}`, `{x: Number}`, `Array{0: String, 1: Boolean, length: Number}`, `*`\n* __Types__ = optionally a comment (an `Indentifier` followed by a `::`), optionally the identifier `Maybe`, one or more `Type`, separated by `|` - eg. `Number`, `String | Date`, `Maybe Number`, `Maybe Boolean | String`\n* __Structure__ = `Fields`, or a `Tuple`, or an `Array` - eg. `{x: Number}`, `(String, Number)`, `[Date]`\n* __Fields__ = a `{`, followed one or more `Field` separated by a comma `,` (trailing comma `,` is permitted), optionally an `...` (always preceded by a comma `,`), followed by a `}` - eg. `{x: Number, y: String}`, `{k: Function, ...}`\n* __Field__ = an `Identifier`, followed by a colon `:`, followed by `Types` - eg. `x: Date | String`, `y: Boolean`\n* __Tuple__ = a `(`, followed by one or more `Types` separated by a comma `,` (trailing comma `,` is permitted), followed by a `)` - eg `(Date)`, `(Number, Date)`\n* __Array__ = a `[` followed by exactly one `Types` followed by a `]` - eg. `[Boolean]`, `[Boolean | Null]`\n\n### Guide\n\n`type-check` uses `Object.toString` to find out the basic type of a value. Specifically,\n\n```js\n{}.toString.call(VALUE).slice(8, -1)\n{}.toString.call(true).slice(8, -1) // 'Boolean'\n```\nA basic type, eg. `Number`, uses this check. This is much more versatile than using `typeof` - for example, with `document`, `typeof` produces `'object'` which isn't that useful, and our technique produces `'HTMLDocument'`.\n\nYou may check for multiple types by separating types with a `|`. The checker proceeds from left to right, and passes if the value is any of the types - eg. `String | Boolean` first checks if the value is a string, and then if it is a boolean. If it is none of those, then it returns false.\n\nAdding a `Maybe` in front of a list of multiple types is the same as also checking for `Null` and `Undefined` - eg. `Maybe String` is equivalent to `Undefined | Null | String`.\n\nYou may add a comment to remind you of what the type is for by following an identifier with a `::` before a type (or multiple types). The comment is simply thrown out.\n\nThe wildcard `*` matches all types.\n\nThere are three types of structures for checking the contents of a value: 'fields', 'tuple', and 'array'.\n\nIf used by itself, a 'fields' structure will pass with any type of object as long as it is an instance of `Object` and the properties pass - this allows for duck typing - eg. `{x: Boolean}`.\n\nTo check if the properties pass, and the value is of a certain type, you can specify the type - eg. `Error{message: String}`.\n\nIf you want to make a field optional, you can simply use `Maybe` - eg. `{x: Boolean, y: Maybe String}` will still pass if `y` is undefined (or null).\n\nIf you don't care if the value has properties beyond what you have specified, you can use the 'etc' operator `...` - eg. `{x: Boolean, ...}` will match an object with an `x` property that is a boolean, and with zero or more other properties.\n\nFor an array, you must specify one or more types (separated by `|`) - it will pass for something of any length as long as each element passes the types provided - eg. `[Number]`, `[Number | String]`.\n\nA tuple checks for a fixed number of elements, each of a potentially different type. Each element is separated by a comma - eg. `(String, Number)`.\n\nAn array and tuple structure check that the value is of type `Array` by default, but if another type is specified, they will check for that instead - eg. `Int32Array[Number]`. You can use the wildcard `*` to search for any type at all.\n\nCheck out the [type precedence](https://github.com/zaboco/type-precedence) library for type-check.\n\n## Options\n\nOptions is an object. It is an optional parameter to the `typeCheck` and `parsedTypeCheck` functions. The only current option is `customTypes`.\n\n\n### Custom Types\n\n__Example:__\n\n```js\nvar options = {\n customTypes: {\n Even: {\n typeOf: 'Number',\n validate: function(x) {\n return x % 2 === 0;\n }\n }\n }\n};\ntypeCheck('Even', 2, options); // true\ntypeCheck('Even', 3, options); // false\n```\n\n`customTypes` allows you to set up custom types for validation. The value of this is an object. The keys of the object are the types you will be matching. Each value of the object will be an object having a `typeOf` property - a string, and `validate` property - a function.\n\nThe `typeOf` property is the type the value should be, and `validate` is a function which should return true if the value is of that type. `validate` receives one parameter, which is the value that we are checking.\n\n## Technical About\n\n`type-check` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It also uses the [prelude.ls](http://preludels.com/) library.\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/type-check", "error": "[Circular]", "extraneous": false }, "word-wrap": { "_from": "word-wrap@~1.2.3", "_id": "word-wrap@1.2.5", "_inBundle": false, "_integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "_location": "/word-wrap", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "word-wrap@~1.2.3", "name": "word-wrap", "escapedName": "word-wrap", "rawSpec": "~1.2.3", "saveSpec": "[Circular]", "fetchSpec": "~1.2.3" }, "_requiredBy": [ "/optionator" ], "_resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "_shasum": "d2c45c6dd4fbce621a66f136cbe328afd0410b34", "_spec": "word-wrap@~1.2.3", "_where": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "author": { "name": "Jon Schlinkert", "url": "https://github.com/jonschlinkert" }, "bugs": { "url": "https://github.com/jonschlinkert/word-wrap/issues" }, "contributors": [ { "name": "Danilo Sampaio", "email": "danilo.sampaio@gmail.com", "url": "localhost:8080" }, { "name": "Fede Ramirez", "email": "i@2fd.me", "url": "https://2fd.github.io" }, { "name": "Joe Hildebrand", "email": "joe-github@cursive.net", "url": "https://twitter.com/hildjj" }, { "name": "Jon Schlinkert", "email": "jon.schlinkert@sellside.com", "url": "http://twitter.com/jonschlinkert" }, { "name": "Todd Kennedy", "url": "https://tck.io" }, { "name": "Waldemar Reusch", "url": "https://github.com/lordvlad" }, { "name": "Wolfgang Faust", "url": "http://www.linestarve.com" }, { "name": "Zach Hale", "email": "zachhale@gmail.com", "url": "http://zachhale.com" } ], "deprecated": false, "description": "Wrap words to a specified length.", "devDependencies": { "gulp-format-md": "^0.1.11", "mocha": "^3.2.0" }, "engines": { "node": ">=0.10.0" }, "files": [ "index.js", "index.d.ts" ], "homepage": "https://github.com/jonschlinkert/word-wrap", "keywords": [ "break", "carriage", "line", "new-line", "newline", "return", "soft", "text", "word", "word-wrap", "words", "wrap" ], "license": "MIT", "main": "index.js", "name": "word-wrap", "repository": { "type": "git", "url": "git+https://github.com/jonschlinkert/word-wrap.git" }, "scripts": { "test": "mocha" }, "typings": "index.d.ts", "verb": { "toc": false, "layout": "default", "tasks": [ "readme" ], "plugins": [ "gulp-format-md" ], "lint": { "reflinks": true }, "related": { "list": [ "common-words", "shuffle-words", "unique-words", "wordcount" ] }, "reflinks": [ "verb", "verb-generate-readme" ] }, "version": "1.2.5", "readme": "# word-wrap [![NPM version](https://img.shields.io/npm/v/word-wrap.svg?style=flat)](https://www.npmjs.com/package/word-wrap) [![NPM monthly downloads](https://img.shields.io/npm/dm/word-wrap.svg?style=flat)](https://npmjs.org/package/word-wrap) [![NPM total downloads](https://img.shields.io/npm/dt/word-wrap.svg?style=flat)](https://npmjs.org/package/word-wrap) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/word-wrap.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/word-wrap)\n\n> Wrap words to a specified length.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save word-wrap\n```\n\n## Usage\n\n```js\nvar wrap = require('word-wrap');\n\nwrap('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');\n```\n\nResults in:\n\n```\n Lorem ipsum dolor sit amet, consectetur adipiscing\n elit, sed do eiusmod tempor incididunt ut labore\n et dolore magna aliqua. Ut enim ad minim veniam,\n quis nostrud exercitation ullamco laboris nisi ut\n aliquip ex ea commodo consequat.\n```\n\n## Options\n\n![image](https://cloud.githubusercontent.com/assets/383994/6543728/7a381c08-c4f6-11e4-8b7d-b6ba197569c9.png)\n\n### options.width\n\nType: `Number`\n\nDefault: `50`\n\nThe width of the text before wrapping to a new line.\n\n**Example:**\n\n```js\nwrap(str, {width: 60});\n```\n\n### options.indent\n\nType: `String`\n\nDefault: `` (two spaces)\n\nThe string to use at the beginning of each line.\n\n**Example:**\n\n```js\nwrap(str, {indent: ' '});\n```\n\n### options.newline\n\nType: `String`\n\nDefault: `\\n`\n\nThe string to use at the end of each line.\n\n**Example:**\n\n```js\nwrap(str, {newline: '\\n\\n'});\n```\n\n### options.escape\n\nType: `function`\n\nDefault: `function(str){return str;}`\n\nAn escape function to run on each line after splitting them.\n\n**Example:**\n\n```js\nvar xmlescape = require('xml-escape');\nwrap(str, {\n escape: function(string){\n return xmlescape(string);\n }\n});\n```\n\n### options.trim\n\nType: `Boolean`\n\nDefault: `false`\n\nTrim trailing whitespace from the returned string. This option is included since `.trim()` would also strip the leading indentation from the first line.\n\n**Example:**\n\n```js\nwrap(str, {trim: true});\n```\n\n### options.cut\n\nType: `Boolean`\n\nDefault: `false`\n\nBreak a word between any two letters when the word is longer than the specified width.\n\n**Example:**\n\n```js\nwrap(str, {cut: true});\n```\n\n## About\n\n
\nContributing\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n
\n\n
\nRunning Tests\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n
\n\n
\nBuilding docs\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n
\n\n### Related projects\n\nYou might also be interested in these projects:\n\n* [common-words](https://www.npmjs.com/package/common-words): Updated list (JSON) of the 100 most common words in the English language. Useful for… [more](https://github.com/jonschlinkert/common-words) | [homepage](https://github.com/jonschlinkert/common-words \"Updated list (JSON) of the 100 most common words in the English language. Useful for excluding these words from arrays.\")\n* [shuffle-words](https://www.npmjs.com/package/shuffle-words): Shuffle the words in a string and optionally the letters in each word using the… [more](https://github.com/jonschlinkert/shuffle-words) | [homepage](https://github.com/jonschlinkert/shuffle-words \"Shuffle the words in a string and optionally the letters in each word using the Fisher-Yates algorithm. Useful for creating test fixtures, benchmarking samples, etc.\")\n* [unique-words](https://www.npmjs.com/package/unique-words): Returns an array of unique words, or the number of occurrences of each word in… [more](https://github.com/jonschlinkert/unique-words) | [homepage](https://github.com/jonschlinkert/unique-words \"Returns an array of unique words, or the number of occurrences of each word in a string or list.\")\n* [wordcount](https://www.npmjs.com/package/wordcount): Count the words in a string. Support for english, CJK and Cyrillic. | [homepage](https://github.com/jonschlinkert/wordcount \"Count the words in a string. Support for english, CJK and Cyrillic.\")\n\n### Contributors\n\n| **Commits** | **Contributor** | \n| --- | --- | \n| 47 | [jonschlinkert](https://github.com/jonschlinkert) | \n| 7 | [OlafConijn](https://github.com/OlafConijn) | \n| 3 | [doowb](https://github.com/doowb) | \n| 2 | [aashutoshrathi](https://github.com/aashutoshrathi) | \n| 2 | [lordvlad](https://github.com/lordvlad) | \n| 2 | [hildjj](https://github.com/hildjj) | \n| 1 | [danilosampaio](https://github.com/danilosampaio) | \n| 1 | [2fd](https://github.com/2fd) | \n| 1 | [leonard-thieu](https://github.com/leonard-thieu) | \n| 1 | [mohd-akram](https://github.com/mohd-akram) | \n| 1 | [toddself](https://github.com/toddself) | \n| 1 | [wolfgang42](https://github.com/wolfgang42) | \n| 1 | [zachhale](https://github.com/zachhale) | \n\n### Author\n\n**Jon Schlinkert**\n\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n\n### License\n\nCopyright © 2023, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on July 22, 2023._", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/word-wrap", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "option parsing and help generation", "devDependencies": { "istanbul": "~0.4.5", "livescript": "~1.6.0", "mocha": "~6.2.2" }, "engines": { "node": ">= 0.8.0" }, "files": [ "lib", "README.md", "LICENSE" ], "homepage": "https://github.com/gkz/optionator", "keywords": [ "options", "flags", "option parsing", "cli" ], "license": "MIT", "main": "./lib/", "name": "optionator", "repository": { "type": "git", "url": "git://github.com/gkz/optionator.git" }, "scripts": { "test": "make test" }, "version": "0.8.3", "readme": "# Optionator\n
\n\nOptionator is a JavaScript/Node.js option parsing and help generation library used by [eslint](http://eslint.org), [Grasp](http://graspjs.com), [LiveScript](http://livescript.net), [esmangle](https://github.com/estools/esmangle), [escodegen](https://github.com/estools/escodegen), and [many more](https://www.npmjs.com/browse/depended/optionator).\n\nFor an online demo, check out the [Grasp online demo](http://www.graspjs.com/#demo).\n\n[About](#about) · [Usage](#usage) · [Settings Format](#settings-format) · [Argument Format](#argument-format)\n\n## Why?\nThe problem with other option parsers, such as `yargs` or `minimist`, is they just accept all input, valid or not.\nWith Optionator, if you mistype an option, it will give you an error (with a suggestion for what you meant).\nIf you give the wrong type of argument for an option, it will give you an error rather than supplying the wrong input to your application.\n\n $ cmd --halp\n Invalid option '--halp' - perhaps you meant '--help'?\n\n $ cmd --count str\n Invalid value for option 'count' - expected type Int, received value: str.\n\nOther helpful features include reformatting the help text based on the size of the console, so that it fits even if the console is narrow, and accepting not just an array (eg. process.argv), but a string or object as well, making things like testing much easier.\n\n## About\nOptionator uses [type-check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) behind the scenes to cast and verify input according the specified types.\n\nMIT license. Version 0.8.3\n\n npm install optionator\n\nFor updates on Optionator, [follow me on twitter](https://twitter.com/gkzahariev).\n\nOptionator is a Node.js module, but can be used in the browser as well if packed with webpack/browserify.\n\n## Usage\n`require('optionator');` returns a function. It has one property, `VERSION`, the current version of the library as a string. This function is called with an object specifying your options and other information, see the [settings format section](#settings-format). This in turn returns an object with three properties, `parse`, `parseArgv`, `generateHelp`, and `generateHelpForOption`, which are all functions.\n\n```js\nvar optionator = require('optionator')({\n prepend: 'Usage: cmd [options]',\n append: 'Version 1.0.0',\n options: [{\n option: 'help',\n alias: 'h',\n type: 'Boolean',\n description: 'displays help'\n }, {\n option: 'count',\n alias: 'c',\n type: 'Int',\n description: 'number of things',\n example: 'cmd --count 2'\n }]\n});\n\nvar options = optionator.parseArgv(process.argv);\nif (options.help) {\n console.log(optionator.generateHelp());\n}\n...\n```\n\n### parse(input, parseOptions)\n`parse` processes the `input` according to your settings, and returns an object with the results.\n\n##### arguments\n* input - `[String] | Object | String` - the input you wish to parse\n* parseOptions - `{slice: Int}` - all options optional\n - `slice` specifies how much to slice away from the beginning if the input is an array or string - by default `0` for string, `2` for array (works with `process.argv`)\n\n##### returns\n`Object` - the parsed options, each key is a camelCase version of the option name (specified in dash-case), and each value is the processed value for that option. Positional values are in an array under the `_` key.\n\n##### example\n```js\nparse(['node', 't.js', '--count', '2', 'positional']); // {count: 2, _: ['positional']}\nparse('--count 2 positional'); // {count: 2, _: ['positional']}\nparse({count: 2, _:['positional']}); // {count: 2, _: ['positional']}\n```\n\n### parseArgv(input)\n`parseArgv` works exactly like `parse`, but only for array input and it slices off the first two elements.\n\n##### arguments\n* input - `[String]` - the input you wish to parse\n\n##### returns\nSee \"returns\" section in \"parse\"\n\n##### example\n```js\nparseArgv(process.argv);\n```\n\n### generateHelp(helpOptions)\n`generateHelp` produces help text based on your settings.\n\n##### arguments\n* helpOptions - `{showHidden: Boolean, interpolate: Object}` - all options optional\n - `showHidden` specifies whether to show options with `hidden: true` specified, by default it is `false`\n - `interpolate` specify data to be interpolated in `prepend` and `append` text, `{{key}}` is the format - eg. `generateHelp({interpolate:{version: '0.4.2'}})`, will change this `append` text: `Version {{version}}` to `Version 0.4.2`\n\n##### returns\n`String` - the generated help text\n\n##### example\n```js\ngenerateHelp(); /*\n\"Usage: cmd [options] positional\n\n -h, --help displays help\n -c, --count Int number of things\n\nVersion 1.0.0\n\"*/\n```\n\n### generateHelpForOption(optionName)\n`generateHelpForOption` produces expanded help text for the specified with `optionName` option. If an `example` was specified for the option, it will be displayed, and if a `longDescription` was specified, it will display that instead of the `description`.\n\n##### arguments\n* optionName - `String` - the name of the option to display\n\n##### returns\n`String` - the generated help text for the option\n\n##### example\n```js\ngenerateHelpForOption('count'); /*\n\"-c, --count Int\ndescription: number of things\nexample: cmd --count 2\n\"*/\n```\n\n## Settings Format\nWhen your `require('optionator')`, you get a function that takes in a settings object. This object has the type:\n\n {\n prepend: String,\n append: String,\n options: [{heading: String} | {\n option: String,\n alias: [String] | String,\n type: String,\n enum: [String],\n default: String,\n restPositional: Boolean,\n required: Boolean,\n overrideRequired: Boolean,\n dependsOn: [String] | String,\n concatRepeatedArrays: Boolean | (Boolean, Object),\n mergeRepeatedObjects: Boolean,\n description: String,\n longDescription: String,\n example: [String] | String\n }],\n helpStyle: {\n aliasSeparator: String,\n typeSeparator: String,\n descriptionSeparator: String,\n initialIndent: Int,\n secondaryIndent: Int,\n maxPadFactor: Number\n },\n mutuallyExclusive: [[String | [String]]],\n concatRepeatedArrays: Boolean | (Boolean, Object), // deprecated, set in defaults object\n mergeRepeatedObjects: Boolean, // deprecated, set in defaults object\n positionalAnywhere: Boolean,\n typeAliases: Object,\n defaults: Object\n }\n\nAll of the properties are optional (the `Maybe` has been excluded for brevities sake), except for having either `heading: String` or `option: String` in each object in the `options` array.\n\n### Top Level Properties\n* `prepend` is an optional string to be placed before the options in the help text\n* `append` is an optional string to be placed after the options in the help text\n* `options` is a required array specifying your options and headings, the options and headings will be displayed in the order specified\n* `helpStyle` is an optional object which enables you to change the default appearance of some aspects of the help text\n* `mutuallyExclusive` is an optional array of arrays of either strings or arrays of strings. The top level array is a list of rules, each rule is a list of elements - each element can be either a string (the name of an option), or a list of strings (a group of option names) - there will be an error if more than one element is present\n* `concatRepeatedArrays` see description under the \"Option Properties\" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property\n* `mergeRepeatedObjects` see description under the \"Option Properties\" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property\n* `positionalAnywhere` is an optional boolean (defaults to `true`) - when `true` it allows positional arguments anywhere, when `false`, all arguments after the first positional one are taken to be positional as well, even if they look like a flag. For example, with `positionalAnywhere: false`, the arguments `--flag --boom 12 --crack` would have two positional arguments: `12` and `--crack`\n* `typeAliases` is an optional object, it allows you to set aliases for types, eg. `{Path: 'String'}` would allow you to use the type `Path` as an alias for the type `String`\n* `defaults` is an optional object following the option properties format, which specifies default values for all options. A default will be overridden if manually set. For example, you can do `default: { type: \"String\" }` to set the default type of all options to `String`, and then override that default in an individual option by setting the `type` property\n\n#### Heading Properties\n* `heading` a required string, the name of the heading\n\n#### Option Properties\n* `option` the required name of the option - use dash-case, without the leading dashes\n* `alias` is an optional string or array of strings which specify any aliases for the option\n* `type` is a required string in the [type check](https://github.com/gkz/type-check) [format](https://github.com/gkz/type-check#type-format), this will be used to cast the inputted value and validate it\n* `enum` is an optional array of strings, each string will be parsed by [levn](https://github.com/gkz/levn) - the argument value must be one of the resulting values - each potential value must validate against the specified `type`\n* `default` is a optional string, which will be parsed by [levn](https://github.com/gkz/levn) and used as the default value if none is set - the value must validate against the specified `type`\n* `restPositional` is an optional boolean - if set to `true`, everything after the option will be taken to be a positional argument, even if it looks like a named argument\n* `required` is an optional boolean - if set to `true`, the option parsing will fail if the option is not defined\n* `overrideRequired` is a optional boolean - if set to `true` and the option is used, and there is another option which is required but not set, it will override the need for the required option and there will be no error - this is useful if you have required options and want to use `--help` or `--version` flags\n* `concatRepeatedArrays` is an optional boolean or tuple with boolean and options object (defaults to `false`) - when set to `true` and an option contains an array value and is repeated, the subsequent values for the flag will be appended rather than overwriting the original value - eg. option `g` of type `[String]`: `-g a -g b -g c,d` will result in `['a','b','c','d']`\n\n You can supply an options object by giving the following value: `[true, options]`. The one currently supported option is `oneValuePerFlag`, this only allows one array value per flag. This is useful if your potential values contain a comma.\n* `mergeRepeatedObjects` is an optional boolean (defaults to `false`) - when set to `true` and an option contains an object value and is repeated, the subsequent values for the flag will be merged rather than overwriting the original value - eg. option `g` of type `Object`: `-g a:1 -g b:2 -g c:3,d:4` will result in `{a: 1, b: 2, c: 3, d: 4}`\n* `dependsOn` is an optional string or array of strings - if simply a string (the name of another option), it will make sure that that other option is set, if an array of strings, depending on whether `'and'` or `'or'` is first, it will either check whether all (`['and', 'option-a', 'option-b']`), or at least one (`['or', 'option-a', 'option-b']`) other options are set\n* `description` is an optional string, which will be displayed next to the option in the help text\n* `longDescription` is an optional string, it will be displayed instead of the `description` when `generateHelpForOption` is used\n* `example` is an optional string or array of strings with example(s) for the option - these will be displayed when `generateHelpForOption` is used\n\n#### Help Style Properties\n* `aliasSeparator` is an optional string, separates multiple names from each other - default: ' ,'\n* `typeSeparator` is an optional string, separates the type from the names - default: ' '\n* `descriptionSeparator` is an optional string , separates the description from the padded name and type - default: ' '\n* `initialIndent` is an optional int - the amount of indent for options - default: 2\n* `secondaryIndent` is an optional int - the amount of indent if wrapped fully (in addition to the initial indent) - default: 4\n* `maxPadFactor` is an optional number - affects the default level of padding for the names/type, it is multiplied by the average of the length of the names/type - default: 1.5\n\n## Argument Format\nAt the highest level there are two types of arguments: named, and positional.\n\nName arguments of any length are prefixed with `--` (eg. `--go`), and those of one character may be prefixed with either `--` or `-` (eg. `-g`).\n\nThere are two types of named arguments: boolean flags (eg. `--problemo`, `-p`) which take no value and result in a `true` if they are present, the falsey `undefined` if they are not present, or `false` if present and explicitly prefixed with `no` (eg. `--no-problemo`). Named arguments with values (eg. `--tseries 800`, `-t 800`) are the other type. If the option has a type `Boolean` it will automatically be made into a boolean flag. Any other type results in a named argument that takes a value.\n\nFor more information about how to properly set types to get the value you want, take a look at the [type check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) pages.\n\nYou can group single character arguments that use a single `-`, however all except the last must be boolean flags (which take no value). The last may be a boolean flag, or an argument which takes a value - eg. `-ba 2` is equivalent to `-b -a 2`.\n\nPositional arguments are all those values which do not fall under the above - they can be anywhere, not just at the end. For example, in `cmd -b one -a 2 two` where `b` is a boolean flag, and `a` has the type `Number`, there are two positional arguments, `one` and `two`.\n\nEverything after an `--` is positional, even if it looks like a named argument.\n\nYou may optionally use `=` to separate option names from values, for example: `--count=2`.\n\nIf you specify the option `NUM`, then any argument using a single `-` followed by a number will be valid and will set the value of `NUM`. Eg. `-2` will be parsed into `NUM: 2`.\n\nIf duplicate named arguments are present, the last one will be taken.\n\n## Technical About\n`optionator` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [levn](https://github.com/gkz/levn) to cast arguments to their specified type, and uses [type-check](https://github.com/gkz/type-check) to validate values. It also uses the [prelude.ls](http://preludels.com/) library.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/optionator", "error": "[Circular]", "extraneous": false }, "source-map": { "_from": "source-map@~0.6.1", "_id": "source-map@0.6.1", "_inBundle": false, "_integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "_location": "/source-map", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "source-map@~0.6.1", "name": "source-map", "escapedName": "source-map", "rawSpec": "~0.6.1", "saveSpec": "[Circular]", "fetchSpec": "~0.6.1" }, "_requiredBy": [ "/escodegen", "/istanbul-lib-source-maps", "/karma", "/less", "/resolve-url-loader", "/source-map-support" ], "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "_shasum": "74722af32e9614e9c287a8d0bbde48b5e2f1a263", "_spec": "source-map@~0.6.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/escodegen", "author": { "name": "Nick Fitzgerald", "email": "nfitzgerald@mozilla.com" }, "bugs": { "url": "https://github.com/mozilla/source-map/issues" }, "contributors": [ { "name": "Tobias Koppers", "email": "tobias.koppers@googlemail.com" }, { "name": "Duncan Beevers", "email": "duncan@dweebd.com" }, { "name": "Stephen Crane", "email": "scrane@mozilla.com" }, { "name": "Ryan Seddon", "email": "seddon.ryan@gmail.com" }, { "name": "Miles Elam", "email": "miles.elam@deem.com" }, { "name": "Mihai Bazon", "email": "mihai.bazon@gmail.com" }, { "name": "Michael Ficarra", "email": "github.public.email@michael.ficarra.me" }, { "name": "Todd Wolfson", "email": "todd@twolfson.com" }, { "name": "Alexander Solovyov", "email": "alexander@solovyov.net" }, { "name": "Felix Gnass", "email": "fgnass@gmail.com" }, { "name": "Conrad Irwin", "email": "conrad.irwin@gmail.com" }, { "name": "usrbincc", "email": "usrbincc@yahoo.com" }, { "name": "David Glasser", "email": "glasser@davidglasser.net" }, { "name": "Chase Douglas", "email": "chase@newrelic.com" }, { "name": "Evan Wallace", "email": "evan.exe@gmail.com" }, { "name": "Heather Arthur", "email": "fayearthur@gmail.com" }, { "name": "Hugh Kennedy", "email": "hughskennedy@gmail.com" }, { "name": "David Glasser", "email": "glasser@davidglasser.net" }, { "name": "Simon Lydell", "email": "simon.lydell@gmail.com" }, { "name": "Jmeas Smith", "email": "jellyes2@gmail.com" }, { "name": "Michael Z Goddard", "email": "mzgoddard@gmail.com" }, { "name": "azu", "email": "azu@users.noreply.github.com" }, { "name": "John Gozde", "email": "john@gozde.ca" }, { "name": "Adam Kirkton", "email": "akirkton@truefitinnovation.com" }, { "name": "Chris Montgomery", "email": "christopher.montgomery@dowjones.com" }, { "name": "J. Ryan Stinnett", "email": "jryans@gmail.com" }, { "name": "Jack Herrington", "email": "jherrington@walmartlabs.com" }, { "name": "Chris Truter", "email": "jeffpalentine@gmail.com" }, { "name": "Daniel Espeset", "email": "daniel@danielespeset.com" }, { "name": "Jamie Wong", "email": "jamie.lf.wong@gmail.com" }, { "name": "Eddy Bruël", "email": "ejpbruel@mozilla.com" }, { "name": "Hawken Rives", "email": "hawkrives@gmail.com" }, { "name": "Gilad Peleg", "email": "giladp007@gmail.com" }, { "name": "djchie", "email": "djchie.dev@gmail.com" }, { "name": "Gary Ye", "email": "garysye@gmail.com" }, { "name": "Nicolas Lalevée", "email": "nicolas.lalevee@hibnet.org" } ], "deprecated": false, "description": "Generates and consumes source maps", "devDependencies": { "doctoc": "^0.15.0", "webpack": "^1.12.0" }, "engines": { "node": ">=0.10.0" }, "files": [ "source-map.js", "source-map.d.ts", "lib/", "dist/source-map.debug.js", "dist/source-map.js", "dist/source-map.min.js", "dist/source-map.min.js.map" ], "homepage": "https://github.com/mozilla/source-map", "license": "BSD-3-Clause", "main": "./source-map.js", "name": "source-map", "repository": { "type": "git", "url": "git+ssh://git@github.com/mozilla/source-map.git" }, "scripts": { "build": "webpack --color", "test": "npm run build && node test/run-tests.js", "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md" }, "typings": "source-map", "version": "0.6.1", "readme": "# Source Map\n\n[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map)\n\n[![NPM](https://nodei.co/npm/source-map.png?downloads=true&downloadRank=true)](https://www.npmjs.com/package/source-map)\n\nThis is a library to generate and consume the source map format\n[described here][format].\n\n[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit\n\n## Use with Node\n\n $ npm install source-map\n\n## Use on the Web\n\n \n\n--------------------------------------------------------------------------------\n\n\n\n\n\n## Table of Contents\n\n- [Examples](#examples)\n - [Consuming a source map](#consuming-a-source-map)\n - [Generating a source map](#generating-a-source-map)\n - [With SourceNode (high level API)](#with-sourcenode-high-level-api)\n - [With SourceMapGenerator (low level API)](#with-sourcemapgenerator-low-level-api)\n- [API](#api)\n - [SourceMapConsumer](#sourcemapconsumer)\n - [new SourceMapConsumer(rawSourceMap)](#new-sourcemapconsumerrawsourcemap)\n - [SourceMapConsumer.prototype.computeColumnSpans()](#sourcemapconsumerprototypecomputecolumnspans)\n - [SourceMapConsumer.prototype.originalPositionFor(generatedPosition)](#sourcemapconsumerprototypeoriginalpositionforgeneratedposition)\n - [SourceMapConsumer.prototype.generatedPositionFor(originalPosition)](#sourcemapconsumerprototypegeneratedpositionfororiginalposition)\n - [SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)](#sourcemapconsumerprototypeallgeneratedpositionsfororiginalposition)\n - [SourceMapConsumer.prototype.hasContentsOfAllSources()](#sourcemapconsumerprototypehascontentsofallsources)\n - [SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])](#sourcemapconsumerprototypesourcecontentforsource-returnnullonmissing)\n - [SourceMapConsumer.prototype.eachMapping(callback, context, order)](#sourcemapconsumerprototypeeachmappingcallback-context-order)\n - [SourceMapGenerator](#sourcemapgenerator)\n - [new SourceMapGenerator([startOfSourceMap])](#new-sourcemapgeneratorstartofsourcemap)\n - [SourceMapGenerator.fromSourceMap(sourceMapConsumer)](#sourcemapgeneratorfromsourcemapsourcemapconsumer)\n - [SourceMapGenerator.prototype.addMapping(mapping)](#sourcemapgeneratorprototypeaddmappingmapping)\n - [SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)](#sourcemapgeneratorprototypesetsourcecontentsourcefile-sourcecontent)\n - [SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])](#sourcemapgeneratorprototypeapplysourcemapsourcemapconsumer-sourcefile-sourcemappath)\n - [SourceMapGenerator.prototype.toString()](#sourcemapgeneratorprototypetostring)\n - [SourceNode](#sourcenode)\n - [new SourceNode([line, column, source[, chunk[, name]]])](#new-sourcenodeline-column-source-chunk-name)\n - [SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])](#sourcenodefromstringwithsourcemapcode-sourcemapconsumer-relativepath)\n - [SourceNode.prototype.add(chunk)](#sourcenodeprototypeaddchunk)\n - [SourceNode.prototype.prepend(chunk)](#sourcenodeprototypeprependchunk)\n - [SourceNode.prototype.setSourceContent(sourceFile, sourceContent)](#sourcenodeprototypesetsourcecontentsourcefile-sourcecontent)\n - [SourceNode.prototype.walk(fn)](#sourcenodeprototypewalkfn)\n - [SourceNode.prototype.walkSourceContents(fn)](#sourcenodeprototypewalksourcecontentsfn)\n - [SourceNode.prototype.join(sep)](#sourcenodeprototypejoinsep)\n - [SourceNode.prototype.replaceRight(pattern, replacement)](#sourcenodeprototypereplacerightpattern-replacement)\n - [SourceNode.prototype.toString()](#sourcenodeprototypetostring)\n - [SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])](#sourcenodeprototypetostringwithsourcemapstartofsourcemap)\n\n\n\n## Examples\n\n### Consuming a source map\n\n```js\nvar rawSourceMap = {\n version: 3,\n file: 'min.js',\n names: ['bar', 'baz', 'n'],\n sources: ['one.js', 'two.js'],\n sourceRoot: 'http://example.com/www/js/',\n mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'\n};\n\nvar smc = new SourceMapConsumer(rawSourceMap);\n\nconsole.log(smc.sources);\n// [ 'http://example.com/www/js/one.js',\n// 'http://example.com/www/js/two.js' ]\n\nconsole.log(smc.originalPositionFor({\n line: 2,\n column: 28\n}));\n// { source: 'http://example.com/www/js/two.js',\n// line: 2,\n// column: 10,\n// name: 'n' }\n\nconsole.log(smc.generatedPositionFor({\n source: 'http://example.com/www/js/two.js',\n line: 2,\n column: 10\n}));\n// { line: 2, column: 28 }\n\nsmc.eachMapping(function (m) {\n // ...\n});\n```\n\n### Generating a source map\n\nIn depth guide:\n[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)\n\n#### With SourceNode (high level API)\n\n```js\nfunction compile(ast) {\n switch (ast.type) {\n case 'BinaryExpression':\n return new SourceNode(\n ast.location.line,\n ast.location.column,\n ast.location.source,\n [compile(ast.left), \" + \", compile(ast.right)]\n );\n case 'Literal':\n return new SourceNode(\n ast.location.line,\n ast.location.column,\n ast.location.source,\n String(ast.value)\n );\n // ...\n default:\n throw new Error(\"Bad AST\");\n }\n}\n\nvar ast = parse(\"40 + 2\", \"add.js\");\nconsole.log(compile(ast).toStringWithSourceMap({\n file: 'add.js'\n}));\n// { code: '40 + 2',\n// map: [object SourceMapGenerator] }\n```\n\n#### With SourceMapGenerator (low level API)\n\n```js\nvar map = new SourceMapGenerator({\n file: \"source-mapped.js\"\n});\n\nmap.addMapping({\n generated: {\n line: 10,\n column: 35\n },\n source: \"foo.js\",\n original: {\n line: 33,\n column: 2\n },\n name: \"christopher\"\n});\n\nconsole.log(map.toString());\n// '{\"version\":3,\"file\":\"source-mapped.js\",\"sources\":[\"foo.js\"],\"names\":[\"christopher\"],\"mappings\":\";;;;;;;;;mCAgCEA\"}'\n```\n\n## API\n\nGet a reference to the module:\n\n```js\n// Node.js\nvar sourceMap = require('source-map');\n\n// Browser builds\nvar sourceMap = window.sourceMap;\n\n// Inside Firefox\nconst sourceMap = require(\"devtools/toolkit/sourcemap/source-map.js\");\n```\n\n### SourceMapConsumer\n\nA SourceMapConsumer instance represents a parsed source map which we can query\nfor information about the original file positions by giving it a file position\nin the generated source.\n\n#### new SourceMapConsumer(rawSourceMap)\n\nThe only parameter is the raw source map (either as a string which can be\n`JSON.parse`'d, or an object). According to the spec, source maps have the\nfollowing attributes:\n\n* `version`: Which version of the source map spec this map is following.\n\n* `sources`: An array of URLs to the original source files.\n\n* `names`: An array of identifiers which can be referenced by individual\n mappings.\n\n* `sourceRoot`: Optional. The URL root from which all sources are relative.\n\n* `sourcesContent`: Optional. An array of contents of the original source files.\n\n* `mappings`: A string of base64 VLQs which contain the actual mappings.\n\n* `file`: Optional. The generated filename this source map is associated with.\n\n```js\nvar consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData);\n```\n\n#### SourceMapConsumer.prototype.computeColumnSpans()\n\nCompute the last column for each generated mapping. The last column is\ninclusive.\n\n```js\n// Before:\nconsumer.allGeneratedPositionsFor({ line: 2, source: \"foo.coffee\" })\n// [ { line: 2,\n// column: 1 },\n// { line: 2,\n// column: 10 },\n// { line: 2,\n// column: 20 } ]\n\nconsumer.computeColumnSpans();\n\n// After:\nconsumer.allGeneratedPositionsFor({ line: 2, source: \"foo.coffee\" })\n// [ { line: 2,\n// column: 1,\n// lastColumn: 9 },\n// { line: 2,\n// column: 10,\n// lastColumn: 19 },\n// { line: 2,\n// column: 20,\n// lastColumn: Infinity } ]\n\n```\n\n#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)\n\nReturns the original source, line, and column information for the generated\nsource's line and column positions provided. The only argument is an object with\nthe following properties:\n\n* `line`: The line number in the generated source. Line numbers in\n this library are 1-based (note that the underlying source map\n specification uses 0-based line numbers -- this library handles the\n translation).\n\n* `column`: The column number in the generated source. Column numbers\n in this library are 0-based.\n\n* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or\n `SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest\n element that is smaller than or greater than the one we are searching for,\n respectively, if the exact element cannot be found. Defaults to\n `SourceMapConsumer.GREATEST_LOWER_BOUND`.\n\nand an object is returned with the following properties:\n\n* `source`: The original source file, or null if this information is not\n available.\n\n* `line`: The line number in the original source, or null if this information is\n not available. The line number is 1-based.\n\n* `column`: The column number in the original source, or null if this\n information is not available. The column number is 0-based.\n\n* `name`: The original identifier, or null if this information is not available.\n\n```js\nconsumer.originalPositionFor({ line: 2, column: 10 })\n// { source: 'foo.coffee',\n// line: 2,\n// column: 2,\n// name: null }\n\nconsumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 })\n// { source: null,\n// line: null,\n// column: null,\n// name: null }\n```\n\n#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)\n\nReturns the generated line and column information for the original source,\nline, and column positions provided. The only argument is an object with\nthe following properties:\n\n* `source`: The filename of the original source.\n\n* `line`: The line number in the original source. The line number is\n 1-based.\n\n* `column`: The column number in the original source. The column\n number is 0-based.\n\nand an object is returned with the following properties:\n\n* `line`: The line number in the generated source, or null. The line\n number is 1-based.\n\n* `column`: The column number in the generated source, or null. The\n column number is 0-based.\n\n```js\nconsumer.generatedPositionFor({ source: \"example.js\", line: 2, column: 10 })\n// { line: 1,\n// column: 56 }\n```\n\n#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)\n\nReturns all generated line and column information for the original source, line,\nand column provided. If no column is provided, returns all mappings\ncorresponding to a either the line we are searching for or the next closest line\nthat has any mappings. Otherwise, returns all mappings corresponding to the\ngiven line and either the column we are searching for or the next closest column\nthat has any offsets.\n\nThe only argument is an object with the following properties:\n\n* `source`: The filename of the original source.\n\n* `line`: The line number in the original source. The line number is\n 1-based.\n\n* `column`: Optional. The column number in the original source. The\n column number is 0-based.\n\nand an array of objects is returned, each with the following properties:\n\n* `line`: The line number in the generated source, or null. The line\n number is 1-based.\n\n* `column`: The column number in the generated source, or null. The\n column number is 0-based.\n\n```js\nconsumer.allGeneratedpositionsfor({ line: 2, source: \"foo.coffee\" })\n// [ { line: 2,\n// column: 1 },\n// { line: 2,\n// column: 10 },\n// { line: 2,\n// column: 20 } ]\n```\n\n#### SourceMapConsumer.prototype.hasContentsOfAllSources()\n\nReturn true if we have the embedded source content for every source listed in\nthe source map, false otherwise.\n\nIn other words, if this method returns `true`, then\n`consumer.sourceContentFor(s)` will succeed for every source `s` in\n`consumer.sources`.\n\n```js\n// ...\nif (consumer.hasContentsOfAllSources()) {\n consumerReadyCallback(consumer);\n} else {\n fetchSources(consumer, consumerReadyCallback);\n}\n// ...\n```\n\n#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])\n\nReturns the original source content for the source provided. The only\nargument is the URL of the original source file.\n\nIf the source content for the given source is not found, then an error is\nthrown. Optionally, pass `true` as the second param to have `null` returned\ninstead.\n\n```js\nconsumer.sources\n// [ \"my-cool-lib.clj\" ]\n\nconsumer.sourceContentFor(\"my-cool-lib.clj\")\n// \"...\"\n\nconsumer.sourceContentFor(\"this is not in the source map\");\n// Error: \"this is not in the source map\" is not in the source map\n\nconsumer.sourceContentFor(\"this is not in the source map\", true);\n// null\n```\n\n#### SourceMapConsumer.prototype.eachMapping(callback, context, order)\n\nIterate over each mapping between an original source/line/column and a\ngenerated line/column in this source map.\n\n* `callback`: The function that is called with each mapping. Mappings have the\n form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,\n name }`\n\n* `context`: Optional. If specified, this object will be the value of `this`\n every time that `callback` is called.\n\n* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or\n `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over\n the mappings sorted by the generated file's line/column order or the\n original's source/line/column order, respectively. Defaults to\n `SourceMapConsumer.GENERATED_ORDER`.\n\n```js\nconsumer.eachMapping(function (m) { console.log(m); })\n// ...\n// { source: 'illmatic.js',\n// generatedLine: 1,\n// generatedColumn: 0,\n// originalLine: 1,\n// originalColumn: 0,\n// name: null }\n// { source: 'illmatic.js',\n// generatedLine: 2,\n// generatedColumn: 0,\n// originalLine: 2,\n// originalColumn: 0,\n// name: null }\n// ...\n```\n### SourceMapGenerator\n\nAn instance of the SourceMapGenerator represents a source map which is being\nbuilt incrementally.\n\n#### new SourceMapGenerator([startOfSourceMap])\n\nYou may pass an object with the following properties:\n\n* `file`: The filename of the generated source that this source map is\n associated with.\n\n* `sourceRoot`: A root for all relative URLs in this source map.\n\n* `skipValidation`: Optional. When `true`, disables validation of mappings as\n they are added. This can improve performance but should be used with\n discretion, as a last resort. Even then, one should avoid using this flag when\n running tests, if possible.\n\n```js\nvar generator = new sourceMap.SourceMapGenerator({\n file: \"my-generated-javascript-file.js\",\n sourceRoot: \"http://example.com/app/js/\"\n});\n```\n\n#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)\n\nCreates a new `SourceMapGenerator` from an existing `SourceMapConsumer` instance.\n\n* `sourceMapConsumer` The SourceMap.\n\n```js\nvar generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer);\n```\n\n#### SourceMapGenerator.prototype.addMapping(mapping)\n\nAdd a single mapping from original source line and column to the generated\nsource's line and column for this source map being created. The mapping object\nshould have the following properties:\n\n* `generated`: An object with the generated line and column positions.\n\n* `original`: An object with the original line and column positions.\n\n* `source`: The original source file (relative to the sourceRoot).\n\n* `name`: An optional original token name for this mapping.\n\n```js\ngenerator.addMapping({\n source: \"module-one.scm\",\n original: { line: 128, column: 0 },\n generated: { line: 3, column: 456 }\n})\n```\n\n#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)\n\nSet the source content for an original source file.\n\n* `sourceFile` the URL of the original source file.\n\n* `sourceContent` the content of the source file.\n\n```js\ngenerator.setSourceContent(\"module-one.scm\",\n fs.readFileSync(\"path/to/module-one.scm\"))\n```\n\n#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])\n\nApplies a SourceMap for a source file to the SourceMap.\nEach mapping to the supplied source file is rewritten using the\nsupplied SourceMap. Note: The resolution for the resulting mappings\nis the minimum of this map and the supplied map.\n\n* `sourceMapConsumer`: The SourceMap to be applied.\n\n* `sourceFile`: Optional. The filename of the source file.\n If omitted, sourceMapConsumer.file will be used, if it exists.\n Otherwise an error will be thrown.\n\n* `sourceMapPath`: Optional. The dirname of the path to the SourceMap\n to be applied. If relative, it is relative to the SourceMap.\n\n This parameter is needed when the two SourceMaps aren't in the same\n directory, and the SourceMap to be applied contains relative source\n paths. If so, those relative source paths need to be rewritten\n relative to the SourceMap.\n\n If omitted, it is assumed that both SourceMaps are in the same directory,\n thus not needing any rewriting. (Supplying `'.'` has the same effect.)\n\n#### SourceMapGenerator.prototype.toString()\n\nRenders the source map being generated to a string.\n\n```js\ngenerator.toString()\n// '{\"version\":3,\"sources\":[\"module-one.scm\"],\"names\":[],\"mappings\":\"...snip...\",\"file\":\"my-generated-javascript-file.js\",\"sourceRoot\":\"http://example.com/app/js/\"}'\n```\n\n### SourceNode\n\nSourceNodes provide a way to abstract over interpolating and/or concatenating\nsnippets of generated JavaScript source code, while maintaining the line and\ncolumn information associated between those snippets and the original source\ncode. This is useful as the final intermediate representation a compiler might\nuse before outputting the generated JS and source map.\n\n#### new SourceNode([line, column, source[, chunk[, name]]])\n\n* `line`: The original line number associated with this source node, or null if\n it isn't associated with an original line. The line number is 1-based.\n\n* `column`: The original column number associated with this source node, or null\n if it isn't associated with an original column. The column number\n is 0-based.\n\n* `source`: The original source's filename; null if no filename is provided.\n\n* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see\n below.\n\n* `name`: Optional. The original identifier.\n\n```js\nvar node = new SourceNode(1, 2, \"a.cpp\", [\n new SourceNode(3, 4, \"b.cpp\", \"extern int status;\\n\"),\n new SourceNode(5, 6, \"c.cpp\", \"std::string* make_string(size_t n);\\n\"),\n new SourceNode(7, 8, \"d.cpp\", \"int main(int argc, char** argv) {}\\n\"),\n]);\n```\n\n#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])\n\nCreates a SourceNode from generated code and a SourceMapConsumer.\n\n* `code`: The generated code\n\n* `sourceMapConsumer` The SourceMap for the generated code\n\n* `relativePath` The optional path that relative sources in `sourceMapConsumer`\n should be relative to.\n\n```js\nvar consumer = new SourceMapConsumer(fs.readFileSync(\"path/to/my-file.js.map\", \"utf8\"));\nvar node = SourceNode.fromStringWithSourceMap(fs.readFileSync(\"path/to/my-file.js\"),\n consumer);\n```\n\n#### SourceNode.prototype.add(chunk)\n\nAdd a chunk of generated JS to this source node.\n\n* `chunk`: A string snippet of generated JS code, another instance of\n `SourceNode`, or an array where each member is one of those things.\n\n```js\nnode.add(\" + \");\nnode.add(otherNode);\nnode.add([leftHandOperandNode, \" + \", rightHandOperandNode]);\n```\n\n#### SourceNode.prototype.prepend(chunk)\n\nPrepend a chunk of generated JS to this source node.\n\n* `chunk`: A string snippet of generated JS code, another instance of\n `SourceNode`, or an array where each member is one of those things.\n\n```js\nnode.prepend(\"/** Build Id: f783haef86324gf **/\\n\\n\");\n```\n\n#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)\n\nSet the source content for a source file. This will be added to the\n`SourceMap` in the `sourcesContent` field.\n\n* `sourceFile`: The filename of the source file\n\n* `sourceContent`: The content of the source file\n\n```js\nnode.setSourceContent(\"module-one.scm\",\n fs.readFileSync(\"path/to/module-one.scm\"))\n```\n\n#### SourceNode.prototype.walk(fn)\n\nWalk over the tree of JS snippets in this node and its children. The walking\nfunction is called once for each snippet of JS and is passed that snippet and\nthe its original associated source's line/column location.\n\n* `fn`: The traversal function.\n\n```js\nvar node = new SourceNode(1, 2, \"a.js\", [\n new SourceNode(3, 4, \"b.js\", \"uno\"),\n \"dos\",\n [\n \"tres\",\n new SourceNode(5, 6, \"c.js\", \"quatro\")\n ]\n]);\n\nnode.walk(function (code, loc) { console.log(\"WALK:\", code, loc); })\n// WALK: uno { source: 'b.js', line: 3, column: 4, name: null }\n// WALK: dos { source: 'a.js', line: 1, column: 2, name: null }\n// WALK: tres { source: 'a.js', line: 1, column: 2, name: null }\n// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null }\n```\n\n#### SourceNode.prototype.walkSourceContents(fn)\n\nWalk over the tree of SourceNodes. The walking function is called for each\nsource file content and is passed the filename and source content.\n\n* `fn`: The traversal function.\n\n```js\nvar a = new SourceNode(1, 2, \"a.js\", \"generated from a\");\na.setSourceContent(\"a.js\", \"original a\");\nvar b = new SourceNode(1, 2, \"b.js\", \"generated from b\");\nb.setSourceContent(\"b.js\", \"original b\");\nvar c = new SourceNode(1, 2, \"c.js\", \"generated from c\");\nc.setSourceContent(\"c.js\", \"original c\");\n\nvar node = new SourceNode(null, null, null, [a, b, c]);\nnode.walkSourceContents(function (source, contents) { console.log(\"WALK:\", source, \":\", contents); })\n// WALK: a.js : original a\n// WALK: b.js : original b\n// WALK: c.js : original c\n```\n\n#### SourceNode.prototype.join(sep)\n\nLike `Array.prototype.join` except for SourceNodes. Inserts the separator\nbetween each of this source node's children.\n\n* `sep`: The separator.\n\n```js\nvar lhs = new SourceNode(1, 2, \"a.rs\", \"my_copy\");\nvar operand = new SourceNode(3, 4, \"a.rs\", \"=\");\nvar rhs = new SourceNode(5, 6, \"a.rs\", \"orig.clone()\");\n\nvar node = new SourceNode(null, null, null, [ lhs, operand, rhs ]);\nvar joinedNode = node.join(\" \");\n```\n\n#### SourceNode.prototype.replaceRight(pattern, replacement)\n\nCall `String.prototype.replace` on the very right-most source snippet. Useful\nfor trimming white space from the end of a source node, etc.\n\n* `pattern`: The pattern to replace.\n\n* `replacement`: The thing to replace the pattern with.\n\n```js\n// Trim trailing white space.\nnode.replaceRight(/\\s*$/, \"\");\n```\n\n#### SourceNode.prototype.toString()\n\nReturn the string representation of this source node. Walks over the tree and\nconcatenates all the various snippets together to one string.\n\n```js\nvar node = new SourceNode(1, 2, \"a.js\", [\n new SourceNode(3, 4, \"b.js\", \"uno\"),\n \"dos\",\n [\n \"tres\",\n new SourceNode(5, 6, \"c.js\", \"quatro\")\n ]\n]);\n\nnode.toString()\n// 'unodostresquatro'\n```\n\n#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])\n\nReturns the string representation of this tree of source nodes, plus a\nSourceMapGenerator which contains all the mappings between the generated and\noriginal sources.\n\nThe arguments are the same as those to `new SourceMapGenerator`.\n\n```js\nvar node = new SourceNode(1, 2, \"a.js\", [\n new SourceNode(3, 4, \"b.js\", \"uno\"),\n \"dos\",\n [\n \"tres\",\n new SourceNode(5, 6, \"c.js\", \"quatro\")\n ]\n]);\n\nnode.toStringWithSourceMap({ file: \"my-output-file.js\" })\n// { code: 'unodostresquatro',\n// map: [object SourceMapGenerator] }\n```\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/source-map", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "ECMAScript code generator", "devDependencies": { "acorn": "^7.1.0", "bluebird": "^3.4.7", "bower-registry-client": "^1.0.0", "chai": "^3.5.0", "commonjs-everywhere": "^0.9.7", "gulp": "^3.8.10", "gulp-eslint": "^3.0.1", "gulp-mocha": "^3.0.1", "semver": "^5.1.0" }, "engines": { "node": ">=4.0" }, "files": [ "LICENSE.BSD", "README.md", "bin", "escodegen.js", "package.json" ], "homepage": "http://github.com/estools/escodegen", "license": "BSD-2-Clause", "main": "escodegen.js", "maintainers": [ { "name": "Yusuke Suzuki", "email": "utatane.tea@gmail.com", "url": "http://github.com/Constellation" } ], "name": "escodegen", "optionalDependencies": { "source-map": "~0.6.1" }, "repository": { "type": "git", "url": "git+ssh://git@github.com/estools/escodegen.git" }, "scripts": { "build": "cjsify -a path: tools/entry-point.js > escodegen.browser.js", "build-min": "cjsify -ma path: tools/entry-point.js > escodegen.browser.min.js", "lint": "gulp lint", "release": "node tools/release.js", "test": "gulp travis", "unit-test": "gulp test" }, "version": "1.14.3", "readme": "## Escodegen\n[![npm version](https://badge.fury.io/js/escodegen.svg)](http://badge.fury.io/js/escodegen)\n[![Build Status](https://secure.travis-ci.org/estools/escodegen.svg)](http://travis-ci.org/estools/escodegen)\n[![Dependency Status](https://david-dm.org/estools/escodegen.svg)](https://david-dm.org/estools/escodegen)\n[![devDependency Status](https://david-dm.org/estools/escodegen/dev-status.svg)](https://david-dm.org/estools/escodegen#info=devDependencies)\n\nEscodegen ([escodegen](http://github.com/estools/escodegen)) is an\n[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)\n(also popularly known as [JavaScript](http://en.wikipedia.org/wiki/JavaScript))\ncode generator from [Mozilla's Parser API](https://developer.mozilla.org/en/SpiderMonkey/Parser_API)\nAST. See the [online generator](https://estools.github.io/escodegen/demo/index.html)\nfor a demo.\n\n\n### Install\n\nEscodegen can be used in a web browser:\n\n \n\nescodegen.browser.js can be found in tagged revisions on GitHub.\n\nOr in a Node.js application via npm:\n\n npm install escodegen\n\n### Usage\n\nA simple example: the program\n\n escodegen.generate({\n type: 'BinaryExpression',\n operator: '+',\n left: { type: 'Literal', value: 40 },\n right: { type: 'Literal', value: 2 }\n });\n\nproduces the string `'40 + 2'`.\n\nSee the [API page](https://github.com/estools/escodegen/wiki/API) for\noptions. To run the tests, execute `npm test` in the root directory.\n\n### Building browser bundle / minified browser bundle\n\nAt first, execute `npm install` to install the all dev dependencies.\nAfter that,\n\n npm run-script build\n\nwill generate `escodegen.browser.js`, which can be used in browser environments.\n\nAnd,\n\n npm run-script build-min\n\nwill generate the minified file `escodegen.browser.min.js`.\n\n### License\n\n#### Escodegen\n\nCopyright (C) 2012 [Yusuke Suzuki](http://github.com/Constellation)\n (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors.\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\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\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\nARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\nDIRECT, 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\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", "readmeFilename": "README.md", "_dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/escodegen", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "evaluate statically-analyzable expressions", "devDependencies": { "esprima": "^2.7.3", "tape": "^4.6.0" }, "homepage": "https://github.com/substack/static-eval", "keywords": [ "static", "eval", "expression", "esprima", "ast", "abstract", "syntax", "tree", "analysis" ], "license": "MIT", "main": "index.js", "name": "static-eval", "repository": { "type": "git", "url": "git://github.com/substack/static-eval.git" }, "scripts": { "test": "tape test/*.js" }, "testling": { "files": "test/*.js", "browsers": [ "ie/8..latest", "ff/latest", "chrome/latest", "opera/latest", "safari/latest" ] }, "version": "2.0.2", "readme": "# static-eval\n\nevaluate statically-analyzable expressions\n\n[![testling badge](https://ci.testling.com/substack/static-eval.png)](https://ci.testling.com/substack/static-eval)\n\n[![build status](https://secure.travis-ci.org/substack/static-eval.png)](http://travis-ci.org/substack/static-eval)\n\n# security\n\nstatic-eval is like `eval`. It is intended for use in build scripts and code transformations, doing some evaluation at build time—it is **NOT** suitable for handling arbitrary untrusted user input. Malicious user input _can_ execute arbitrary code.\n\n# example\n\n``` js\nvar evaluate = require('static-eval');\nvar parse = require('esprima').parse;\n\nvar src = process.argv[2];\nvar ast = parse(src).body[0].expression;\n\nconsole.log(evaluate(ast));\n```\n\nIf you stick to simple expressions, the result is statically analyzable:\n\n```\n$ node '7*8+9'\n65\n$ node eval.js '[1,2,3+4*5-(5*11)]'\n[ 1, 2, -32 ]\n```\n\nbut if you use statements, undeclared identifiers, or syntax, the result is no\nlonger statically analyzable and `evaluate()` returns `undefined`:\n\n```\n$ node eval.js '1+2+3*n'\nundefined\n$ node eval.js 'x=5; x*2'\nundefined\n$ node eval.js '5-4*3'\n-7\n```\n\nYou can also declare variables and functions to use in the static evaluation:\n\n``` js\nvar evaluate = require('static-eval');\nvar parse = require('esprima').parse;\n\nvar src = '[1,2,3+4*10+n,foo(3+5),obj[\"\"+\"x\"].y]';\nvar ast = parse(src).body[0].expression;\n\nconsole.log(evaluate(ast, {\n n: 6,\n foo: function (x) { return x * 100 },\n obj: { x: { y: 555 } }\n}));\n```\n\n# methods\n\n``` js\nvar evaluate = require('static-eval');\n```\n\n## evaluate(ast, vars={})\n\nEvaluate the [esprima](https://npmjs.org/package/esprima)-parsed abstract syntax\ntree object `ast` with an optional collection of variables `vars` to use in the\nstatic expression resolution.\n\nIf the expression contained in `ast` can't be statically resolved, `evaluate()`\nreturns undefined.\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install static-eval\n```\n\n# license\n\nMIT\n", "readmeFilename": "readme.markdown", "optionalDependencies": {}, "_dependencies": { "escodegen": "^1.8.1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/static-eval", "error": "[Circular]", "extraneous": false }, "underscore": { "_from": "underscore@1.12.1", "_id": "underscore@1.12.1", "_inBundle": false, "_integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", "_location": "/underscore", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "underscore@1.12.1", "name": "underscore", "escapedName": "underscore", "rawSpec": "1.12.1", "saveSpec": "[Circular]", "fetchSpec": "1.12.1" }, "_requiredBy": [ "/jsonpath" ], "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", "_shasum": "7bb8cc9b3d397e201cf8553336d262544ead829e", "_spec": "underscore@1.12.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/jsonpath", "author": { "name": "Jeremy Ashkenas", "email": "jeremy@documentcloud.org" }, "bugs": { "url": "https://github.com/jashkenas/underscore/issues" }, "deprecated": false, "description": "JavaScript's functional programming helper library.", "devDependencies": { "coveralls": "^2.11.2", "docco": "^0.8.0", "eslint": "^6.8.0", "eslint-plugin-import": "^2.20.1", "glob": "^7.1.6", "gzip-size-cli": "^1.0.0", "husky": "^4.2.3", "karma": "^0.13.13", "karma-qunit": "~2.0.1", "karma-sauce-launcher": "^1.2.0", "nyc": "^2.1.3", "pretty-bytes-cli": "^1.0.0", "qunit": "^2.10.0", "rollup": "^1.32.1", "terser": "^4.6.13" }, "files": [ "underscore.js", "underscore.js.map", "underscore-min.js", "underscore-min.js.map", "underscore-esm.js", "underscore-esm.js.map", "underscore-esm-min.js", "underscore-esm-min.js.map", "modules/", "amd/", "cjs/" ], "homepage": "https://underscorejs.org", "husky": { "hooks": { "pre-commit": "npm run bundle && git add underscore.js underscore.js.map underscore-esm.js underscore-esm.js.map", "post-commit": "git reset underscore.js underscore.js.map underscore-esm.js underscore-esm.js.map" } }, "keywords": [ "util", "functional", "server", "client", "browser" ], "license": "MIT", "main": "underscore.js", "module": "modules/index-all.js", "name": "underscore", "repository": { "type": "git", "url": "git://github.com/jashkenas/underscore.git" }, "scripts": { "build": "npm run bundle && npm run build-umd && npm run build-esm", "build-esm": "npm run minify-esm -- --source-map content=underscore-esm.js.map --source-map-url \" \" -o underscore-esm-min.js", "build-umd": "npm run minify-umd -- --source-map content=underscore.js.map --source-map-url \" \" -o underscore-min.js", "bundle": "rollup --config && eslint underscore.js", "bundle-treeshake": "cd test-treeshake && rollup --config", "coverage": "nyc npm run test-node && nyc report", "coveralls": "nyc npm run test-node && nyc report --reporter=text-lcov | coveralls", "doc": "docco underscore-esm.js && docco modules/*.js -c docco.css -t docs/linked-esm.jst", "lint": "eslint modules/*.js test/*.js", "minify-esm": "terser underscore-esm.js -c \"evaluate=false\" --comments \"/ .*/\" -m", "minify-umd": "terser underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m", "prepare-tests": "npm run bundle && npm run bundle-treeshake", "prepublishOnly": "npm run build && npm run doc", "test": "npm run lint && npm run test-node", "test-browser": "npm run prepare-tests && npm i karma-phantomjs-launcher && karma start", "test-node": "npm run prepare-tests && qunit test/", "weight": "npm run bundle && npm run minify-umd | gzip-size | pretty-bytes" }, "version": "1.12.1", "readme": " __\n /\\ \\ __\n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____\n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\\n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/\n \\ \\____/\n \\/___/\n\nUnderscore.js is a utility-belt library for JavaScript that provides\nsupport for the usual functional suspects (each, map, reduce, filter...)\nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttps://underscorejs.org\n\nFor support and questions, please use\n[the gitter channel](https://gitter.im/jashkenas/underscore)\nor [stackoverflow](https://stackoverflow.com/search?q=underscore.js)\n\nUnderscore is an open-sourced component of DocumentCloud:\nhttps://github.com/documentcloud\n\nMany thanks to our contributors:\nhttps://github.com/jashkenas/underscore/contributors\n\nThis project adheres to a [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/underscore", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Query JavaScript objects with JSONPath expressions. Robust / safe JSONPath engine for Node.js.", "devDependencies": { "grunt": "0.4.5", "grunt-browserify": "3.8.0", "grunt-cli": "0.1.13", "grunt-contrib-uglify": "0.9.1", "jison": "0.4.13", "jscs": "1.10.0", "jshint": "2.6.0", "mocha": "2.1.0" }, "homepage": "https://github.com/dchester/jsonpath#readme", "keywords": [ "JSONPath", "jsonpath", "json-path", "object", "traversal", "json", "path", "data structures" ], "license": "MIT", "name": "jsonpath", "repository": { "type": "git", "url": "git+https://github.com/dchester/jsonpath.git" }, "scripts": { "generate": "node bin/generate_parser.js > generated/parser.js", "prepublishOnly": "node lib/aesprim.js > generated/aesprim-browser.js", "test": "mocha -u tdd test && jscs lib && jshint lib" }, "version": "1.1.1", "readme": "[![Build Status](https://travis-ci.org/dchester/jsonpath.png?branch=master)](https://travis-ci.org/dchester/jsonpath)\n\n# jsonpath\n\nQuery JavaScript objects with JSONPath expressions. Robust / safe JSONPath engine for Node.js.\n\n\n## Query Example\n\n```javascript\nvar cities = [\n { name: \"London\", \"population\": 8615246 },\n { name: \"Berlin\", \"population\": 3517424 },\n { name: \"Madrid\", \"population\": 3165235 },\n { name: \"Rome\", \"population\": 2870528 }\n];\n\nvar jp = require('jsonpath');\nvar names = jp.query(cities, '$..name');\n\n// [ \"London\", \"Berlin\", \"Madrid\", \"Rome\" ]\n```\n\n## Install\n\nInstall from npm:\n```bash\n$ npm install jsonpath\n```\n\n## JSONPath Syntax\n\nHere are syntax and examples adapted from [Stefan Goessner's original post](http://goessner.net/articles/JsonPath/) introducing JSONPath in 2007.\n\nJSONPath | Description\n-----------------|------------\n`$` | The root object/element\n`@` | The current object/element\n`.` | Child member operator\n`..`\t | Recursive descendant operator; JSONPath borrows this syntax from E4X\n`*`\t | Wildcard matching all objects/elements regardless their names\n`[]`\t | Subscript operator\n`[,]`\t | Union operator for alternate names or array indices as a set\n`[start:end:step]` | Array slice operator borrowed from ES4 / Python\n`?()` | Applies a filter (script) expression via static evaluation\n`()`\t | Script expression via static evaluation \n\nGiven this sample data set, see example expressions below:\n\n```javascript\n{\n \"store\": {\n \"book\": [ \n {\n \"category\": \"reference\",\n \"author\": \"Nigel Rees\",\n \"title\": \"Sayings of the Century\",\n \"price\": 8.95\n }, {\n \"category\": \"fiction\",\n \"author\": \"Evelyn Waugh\",\n \"title\": \"Sword of Honour\",\n \"price\": 12.99\n }, {\n \"category\": \"fiction\",\n \"author\": \"Herman Melville\",\n \"title\": \"Moby Dick\",\n \"isbn\": \"0-553-21311-3\",\n \"price\": 8.99\n }, {\n \"category\": \"fiction\",\n \"author\": \"J. R. R. Tolkien\",\n \"title\": \"The Lord of the Rings\",\n \"isbn\": \"0-395-19395-8\",\n \"price\": 22.99\n }\n ],\n \"bicycle\": {\n \"color\": \"red\",\n \"price\": 19.95\n }\n }\n}\n```\n\nExample JSONPath expressions:\n\nJSONPath | Description\n------------------------------|------------\n`$.store.book[*].author` | The authors of all books in the store\n`$..author` | All authors\n`$.store.*` | All things in store, which are some books and a red bicycle\n`$.store..price` | The price of everything in the store\n`$..book[2]` | The third book\n`$..book[(@.length-1)]` | The last book via script subscript\n`$..book[-1:]` | The last book via slice\n`$..book[0,1]` | The first two books via subscript union\n`$..book[:2]` | The first two books via subscript array slice\n`$..book[?(@.isbn)]` | Filter all books with isbn number\n`$..book[?(@.price<10)]` | Filter all books cheaper than 10\n`$..book[?(@.price==8.95)]` | Filter all books that cost 8.95\n`$..book[?(@.price<30 && @.category==\"fiction\")]` | Filter all fiction books cheaper than 30\n`$..*` | All members of JSON structure\n\n\n## Methods\n\n#### jp.query(obj, pathExpression[, count])\n\nFind elements in `obj` matching `pathExpression`. Returns an array of elements that satisfy the provided JSONPath expression, or an empty array if none were matched. Returns only first `count` elements if specified.\n\n```javascript\nvar authors = jp.query(data, '$..author');\n// [ 'Nigel Rees', 'Evelyn Waugh', 'Herman Melville', 'J. R. R. Tolkien' ]\n```\n\n#### jp.paths(obj, pathExpression[, count])\n\nFind paths to elements in `obj` matching `pathExpression`. Returns an array of element paths that satisfy the provided JSONPath expression. Each path is itself an array of keys representing the location within `obj` of the matching element. Returns only first `count` paths if specified.\n\n\n```javascript\nvar paths = jp.paths(data, '$..author');\n// [\n// ['$', 'store', 'book', 0, 'author'] },\n// ['$', 'store', 'book', 1, 'author'] },\n// ['$', 'store', 'book', 2, 'author'] },\n// ['$', 'store', 'book', 3, 'author'] }\n// ]\n```\n\n#### jp.nodes(obj, pathExpression[, count])\n\nFind elements and their corresponding paths in `obj` matching `pathExpression`. Returns an array of node objects where each node has a `path` containing an array of keys representing the location within `obj`, and a `value` pointing to the matched element. Returns only first `count` nodes if specified.\n\n```javascript\nvar nodes = jp.nodes(data, '$..author');\n// [\n// { path: ['$', 'store', 'book', 0, 'author'], value: 'Nigel Rees' },\n// { path: ['$', 'store', 'book', 1, 'author'], value: 'Evelyn Waugh' },\n// { path: ['$', 'store', 'book', 2, 'author'], value: 'Herman Melville' },\n// { path: ['$', 'store', 'book', 3, 'author'], value: 'J. R. R. Tolkien' }\n// ]\n```\n\n#### jp.value(obj, pathExpression[, newValue])\n\nReturns the value of the first element matching `pathExpression`. If `newValue` is provided, sets the value of the first matching element and returns the new value.\n\n#### jp.parent(obj, pathExpression)\n\nReturns the parent of the first matching element.\n\n#### jp.apply(obj, pathExpression, fn)\n\nRuns the supplied function `fn` on each matching element, and replaces each matching element with the return value from the function. The function accepts the value of the matching element as its only parameter. Returns matching nodes with their updated values.\n\n\n```javascript\nvar nodes = jp.apply(data, '$..author', function(value) { return value.toUpperCase() });\n// [\n// { path: ['$', 'store', 'book', 0, 'author'], value: 'NIGEL REES' },\n// { path: ['$', 'store', 'book', 1, 'author'], value: 'EVELYN WAUGH' },\n// { path: ['$', 'store', 'book', 2, 'author'], value: 'HERMAN MELVILLE' },\n// { path: ['$', 'store', 'book', 3, 'author'], value: 'J. R. R. TOLKIEN' }\n// ]\n```\n\n#### jp.parse(pathExpression)\n\nParse the provided JSONPath expression into path components and their associated operations.\n\n```javascript\nvar path = jp.parse('$..author');\n// [\n// { expression: { type: 'root', value: '$' } },\n// { expression: { type: 'identifier', value: 'author' }, operation: 'member', scope: 'descendant' }\n// ]\n```\n\n#### jp.stringify(path)\n\nReturns a path expression in string form, given a path. The supplied path may either be a flat array of keys, as returned by `jp.nodes` for example, or may alternatively be a fully parsed path expression in the form of an array of path components as returned by `jp.parse`.\n\n```javascript\nvar pathExpression = jp.stringify(['$', 'store', 'book', 0, 'author']);\n// \"$.store.book[0].author\"\n```\n\n## Differences from Original Implementation\n\nThis implementation aims to be compatible with Stefan Goessner's original implementation with a few notable exceptions described below.\n\n#### Evaluating Script Expressions\n\nScript expressions (i.e, `(...)` and `?(...)`) are statically evaluated via [static-eval](https://github.com/substack/static-eval) rather than using the underlying script engine directly. That means both that the scope is limited to the instance variable (`@`), and only simple expressions (with no side effects) will be valid. So for example, `?(@.length>10)` will be just fine to match arrays with more than ten elements, but `?(process.exit())` will not get evaluated since `process` would yield a `ReferenceError`. This method is even safer than `vm.runInNewContext`, since the script engine itself is more limited and entirely distinct from the one running the application code. See more details in the [implementation](https://github.com/substack/static-eval/blob/master/index.js) of the evaluator.\n\n#### Grammar\n\nThis project uses a formal BNF [grammar](https://github.com/dchester/jsonpath/blob/master/lib/grammar.js) to parse JSONPath expressions, an attempt at reverse-engineering the intent of the original implementation, which parses via a series of creative regular expressions. The original regex approach can sometimes be forgiving for better or for worse (e.g., `$['store]` => `$['store']`), and in other cases, can be just plain wrong (e.g. `[` => `$`). \n\n#### Other Minor Differences\n\nAs a result of using a real parser and static evaluation, there are some arguable bugs in the original library that have not been carried through here:\n\n- strings in subscripts may now be double-quoted\n- final `step` arguments in slice operators may now be negative\n- script expressions may now contain `.` and `@` characters not referring to instance variables\n- subscripts no longer act as character slices on string elements\n- non-ascii non-word characters are no-longer valid in member identifier names; use quoted subscript strings instead (e.g., `$['$']` instead of `$.$`)\n- unions now yield real unions with no duplicates rather than concatenated results\n\n## License\n\n[MIT](LICENSE)\n\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "esprima": "1.2.2", "static-eval": "2.0.2", "underscore": "1.12.1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/jsonpath", "error": "[Circular]", "extraneous": false }, "ng-sidebar": { "_from": "ng-sidebar@~9.2.0", "_id": "ng-sidebar@9.2.1", "_inBundle": false, "_integrity": "sha512-wYAh8ff4P6nzVDz06hBSMjt+1lwfVY2+0WNuMg5NUiaQBwdJdXq71vgtjtDmYfcrrfYcc6hQ/AJ9Lldcuujjgg==", "_location": "/ng-sidebar", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "ng-sidebar@~9.2.0", "name": "ng-sidebar", "escapedName": "ng-sidebar", "rawSpec": "~9.2.0", "saveSpec": "[Circular]", "fetchSpec": "~9.2.0" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/ng-sidebar/-/ng-sidebar-9.2.1.tgz", "_shasum": "20d508ab6b8dd1a77c5098b7266168831beb8e07", "_spec": "ng-sidebar@~9.2.0", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Eugene Cheung" }, "bugs": { "url": "https://github.com/arkon/ng-sidebar/issues" }, "deprecated": false, "description": "Angular sidebar component.", "devDependencies": { "@angular/common": "^8.2.14", "@angular/compiler": "^8.2.14", "@angular/compiler-cli": "^8.2.14", "@angular/core": "^8.2.14", "@angular/platform-browser": "^8.2.14", "rimraf": "^3.0.2", "rxjs": "^6.5.5", "tslint": "^5.20.1", "typescript": "~3.4.0", "zone.js": "~0.9.1" }, "files": [ "src/*", "lib/*", "README.md", "LICENSE" ], "homepage": "http://echeung.me/ng-sidebar/", "keywords": [ "angular", "ng", "sidebar", "component" ], "license": "MIT", "main": "./lib/index.js", "name": "ng-sidebar", "peerDependencies": { "@angular/core": ">=8.0.0", "@angular/common": ">=8.0.0" }, "repository": { "type": "git", "url": "git+https://github.com/arkon/ng-sidebar.git" }, "scripts": { "build": "npm run lint && rimraf lib && ngc", "lint": "tslint --project tsconfig.json src/**/*.ts", "prepare": "npm run build" }, "typings": "./lib/index.d.ts", "version": "9.2.1", "readme": "# ng-sidebar\n\n[![NPM](https://nodei.co/npm/ng-sidebar.png?compact=true)](https://nodei.co/npm/ng-sidebar)\n\n**[Demo](https://echeung.me/ng-sidebar)**\n\n*Formerly called [ng2-sidebar](https://github.com/arkon/ng2-sidebar)*\n\nAn Angular sidebar component.\n\n\n## Installation\n\n```shell\nnpm install --save ng-sidebar\n```\n\n### SystemJS configuration\n\nIf you're using SystemJS, be sure to add the appropriate settings to your SystemJS config:\n\n```js\nconst map = {\n // ...\n 'ng-sidebar': 'node_modules/ng-sidebar',\n // ...\n};\n\nconst packages = {\n // ...\n 'ng-sidebar': {\n main: 'lib/index',\n defaultExtension: 'js'\n },\n // ...\n};\n```\n\n\n## Changelog\n\nSee the [releases page](https://github.com/arkon/ng-sidebar/releases) on GitHub.\n\n\n## Usage\n\nAdd `SidebarModule` to your app module:\n\n```typescript\nimport { SidebarModule } from 'ng-sidebar';\n\n@NgModule({\n declarations: [AppComponent],\n imports: [BrowserModule, SidebarModule.forRoot()],\n bootstrap: [AppComponent],\n})\nclass AppModule {}\n```\n\nIn your app component, simply use add a `` wrapper, then place your ``(s) and content within it.\nYour page content should be in some container with a `ng-sidebar-content` attribute.\n\n```typescript\n@Component({\n selector: 'app',\n template: `\n \n \n\n \n \n

Sidebar contents

\n
\n\n \n
\n \n
\n\n
\n `\n})\nclass AppComponent {\n private _opened: boolean = false;\n\n private _toggleSidebar() {\n this._opened = !this._opened;\n }\n}\n```\n\nIf nothing seems to show up, your wrappers' heights may be collapsing. Try adding a height (e.g. `height: 100vh;`) to the wrapper `` or other wrapper elements you may have. (See [issue #100](https://github.com/arkon/ng-sidebar/issues/100) for more info.)\n\nA directive is also provided to easily close the sidebar by clicking something inside it:\n\n```html\n\n
Closes the sidebar\n\n```\n\nYou can also use the `open()` and `close()` functions:\n\n```html\n\n \n\n\n\n```\n\n\n## Functions\n\nThe sidebar has a few public functions:\n\n| Function | Description |\n| -------- | ----------- |\n| `open()` | Opens the sidebar. |\n| `close()` | Closes the sidebar. |\n| `triggerRerender()` | Manually trigger a re-render of the container. Useful if the sidebar contents might change. |\n\n\n## Styling\n\nVarious class names are attached to the sidebar and container for easier styling.\n\nIf you are using Angular's default emulated view encapsulation, you may have to use the `>>>` selector to target the sidebar's classes. Check out [Angular's documentation](https://angular.io/guide/component-styles#deep) for more details. Note that the `/deep/` selector [will soon be deprecated](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/68qSZM5QMRQ/pT2YCqZSomAJ).\n\n### Sidebar\n\n| Class name | Description |\n| ---------- | ----------- |\n| `ng-sidebar` | Always on the sidebar element. |\n| `ng-sidebar--opened` | When `opened` is `true`. |\n| `ng-sidebar--closed` | When `opened` is `false`. |\n| `ng-sidebar--left` | When `position` is `'left'` (or the `'start'`/`'end'` aliases are equivalent to `'left'`). |\n| `ng-sidebar--right` | When `position` is `'right'` (or the `'start'`/`'end'` aliases are equivalent to `'right'`). |\n| `ng-sidebar--top` | When `position` is `'top'`. |\n| `ng-sidebar--bottom` | When `position` is `'bottom'`. |\n| `ng-sidebar--over` | When `mode` is `'over'`. |\n| `ng-sidebar--push` | When `mode` is `'push'`. |\n| `ng-sidebar--slide` | When `mode` is `'slide'`. |\n| `ng-sidebar--docked` | When the sidebar is docked (i.e. it is \"closed\" and `dock` is `true`). |\n| `ng-sidebar--inert` | Ignores pointer clicks. Class is applied when the sidebar is closed. |\n| `ng-sidebar--animate` | When `animate` is `true` for a sidebar. |\n\n### Backdrop\n\n| Class name | Description |\n| ---------- | ----------- |\n| `ng-sidebar__backdrop` | Class of the backdrop `div`. Note that the `div` is only in the DOM when the backdrop is shown. |\n\n### Page content\n\n| Class name | Description |\n| ---------- | ----------- |\n| `ng-sidebar__content` | Class of the wrapper `div` for the page content. |\n| `ng-sidebar__content--animate` | When `animate` is `true` for the container. |\n\n\n\n## Options\n\n### ``\n\n### Inputs\n\n| Property name | Type | Default | Description |\n| ------------- | ---- | ------- | ----------- |\n| contentClass | string | | Additional class name on the `div` wrapping the page contents. |\n| backdropClass | string | | Additional class name on the overlay element. |\n| showBackdrop | boolean | `false` | Controls the backdrop state of the sidebar container. This should be two-way bound. |\n| allowSidebarBackdropControl | boolean | `true` | Determines if the container component respects the sidebar's `showBackdrop` input option. |\n| animate | boolean | `true` | Animates the container sliding. |\n\n#### Outputs\n\n| Property name | Callback arguments | Description |\n| ------------- | ------------------ | ----------- |\n| showBackdropChange | `showBackdrop: boolean` | Emitted when `showBackdrop` is modified. This allows for you to do \"two-way binding\" (i.e. `[(showBackdrop)]`). |\n| onBackdropClicked | | Emitted when a backdrop is clicked. |\n\n\n### ``\n\n#### Inputs\n\n| Property name | Type | Default | Description |\n| ------------- | ---- | ------- | ----------- |\n| opened | boolean | `false` | Controls the opened state of the sidebar. This should be two-way bound. |\n| mode | `'over'`, `'push'`, `'slide'` | `'over'` | See the \"Modes\" section. |\n| dock | boolean | `false` | Show the sidebar as docked when closed. |\n| dockedSize | string | `'0px'` | When `mode` is set to `'dock'`, this value indicates how much of the sidebar is still visible when \"closed\". |\n| position | `'left'`, `'right'`, `'top'`, `'bottom'`, `'start'`, `'end'` | `'start'` | What side the sidebar should be docked to. `'start'` and `'end'` are aliases that respect the page's language (e.g. `start` is the same as `left` for English, but would be `right` for Hebrew. |\n| autoCollapseHeight | number | | Window height in pixels in which to automatically close the sidebar. |\n| autoCollapseWidth | number | | Window width in pixels in which to automatically close the sidebar. |\n| autoCollapseOnInit | boolean | `true` | Collapse sidebar based on `autoCollapseHeight` and/or `autoCollapseWidth` on initial render as needed. |\n| animate | boolean | `true` | Animate the opening/closing of the sidebar. |\n| sidebarClass | string | | Additional class name on the sidebar element. |\n| ariaLabel | string | | Value for the sidebar's `aria-label` attribute. |\n| trapFocus | boolean | `false` | Keeps focus within the sidebar when open. Note that this only works if there's one sidebar open at a time. |\n| autoFocus | boolean | `true` | Automatically focus the first focusable element in the sidebar when opened. |\n| showBackdrop | boolean | `false` | If a translucent black backdrop overlay should appear over the page contents when the sidebar is opened. This is ignored if the sidebar's parent container has its `allowSidebarBackdropControl` property set to `true`. |\n| closeOnClickBackdrop | boolean | `false` | Whether clicking on the backdrop of the open sidebar will close it. |\n| closeOnClickOutside | boolean | `false` | Whether clicking outside of the open sidebar will close it. |\n| keyClose | boolean | `false` | Close the sidebar when a keyboard button is pressed. |\n| keyCode | number | `27` | The [key code](http://keycode.info/) for `keyClose`. |\n\n#### Outputs\n\n| Property name | Callback arguments | Description |\n| ------------- | ------------------ | ----------- |\n| openedChange | `opened: boolean` | Emitted when `opened` is modified. This allows for you to do \"two-way binding\" (i.e. `[(opened)]`). |\n| onOpenStart | | Emitted when the sidebar is opening. |\n| onOpened | | Emitted when the sidebar is opened. |\n| onCloseStart | | Emitted when the sidebar is closing. |\n| onClosed | | Emitted when the sidebar is closed. |\n| onTransitionEnd | | Emitted when the animation for opening or closing ends. |\n| onModeChange | `mode: string` | Emitted when `mode` is changed. |\n| onPositionChange | `position: string` | Emitted when `position` is changed. |\n\n#### Modes\n\n##### `over`\n\nThis is the default mode. The sidebar slides in over the page contents.\n\n##### `push`\n\nThe page contents is pushed to make space for the sidebar.\n\n##### `slide`\n\nThe entire page slides over to show the sidebar. Note that this only works if you have one sidebar open at a time.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/ng-sidebar", "error": "[Circular]", "extraneous": false }, "ng2-charts": { "_from": "ng2-charts@^3.0.0-rc.7", "_id": "ng2-charts@3.1.2", "_inBundle": false, "_integrity": "sha512-KkbpQhbf8DhcEm5SnqKBQMa25cBOKBiopjl4+8aUbfOaKY59uOfImAYPDsT3du7cfMVD6w7xt4SWhRbbelY9sQ==", "_location": "/ng2-charts", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "ng2-charts@^3.0.0-rc.7", "name": "ng2-charts", "escapedName": "ng2-charts", "rawSpec": "^3.0.0-rc.7", "saveSpec": "[Circular]", "fetchSpec": "^3.0.0-rc.7" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-3.1.2.tgz", "_shasum": "2af56b2d8382269595e1e01f63b7c5e6b3d3e60a", "_spec": "ng2-charts@^3.0.0-rc.7", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Aviad Pineles" }, "bugs": { "url": "https://github.com/valor-software/ng2-charts/issues" }, "dependencies": { "lodash-es": { "_from": "lodash-es@^4.17.15", "_id": "lodash-es@4.17.21", "_inBundle": false, "_integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "_location": "/lodash-es", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "lodash-es@^4.17.15", "name": "lodash-es", "escapedName": "lodash-es", "rawSpec": "^4.17.15", "saveSpec": "[Circular]", "fetchSpec": "^4.17.15" }, "_requiredBy": [ "/ng2-charts" ], "_resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "_shasum": "43e626c46e6591b7750beb2b50117390c609e3ee", "_spec": "lodash-es@^4.17.15", "_where": "/builds/gitlab/osm/ng-ui/node_modules/ng2-charts", "author": { "name": "John-David Dalton", "email": "john.david.dalton@gmail.com" }, "bugs": { "url": "https://github.com/lodash/lodash-cli/issues" }, "contributors": [ { "name": "John-David Dalton", "email": "john.david.dalton@gmail.com" }, { "name": "Mathias Bynens", "email": "mathias@qiwi.be" } ], "deprecated": false, "description": "Lodash exported as ES modules.", "homepage": "https://lodash.com/custom-builds", "jsnext:main": "lodash.js", "keywords": [ "es6", "modules", "stdlib", "util" ], "license": "MIT", "main": "lodash.js", "module": "lodash.js", "name": "lodash-es", "repository": { "type": "git", "url": "git+https://github.com/lodash/lodash.git" }, "scripts": { "test": "echo \"See https://travis-ci.org/lodash-archive/lodash-cli for testing details.\"" }, "sideEffects": false, "type": "module", "version": "4.17.21", "readme": "# lodash-es v4.17.21\n\nThe [Lodash](https://lodash.com/) library exported as [ES](http://www.ecma-international.org/ecma-262/6.0/) modules.\n\nGenerated using [lodash-cli](https://www.npmjs.com/package/lodash-cli):\n```shell\n$ lodash modularize exports=es -o ./\n```\n\nSee the [package source](https://github.com/lodash/lodash/tree/4.17.21-es) for more details.\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/lodash-es", "error": "[Circular]", "extraneous": false }, "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]", "_deduped": "tslib" } }, "deprecated": false, "description": "Reactive, responsive, beautiful charts for Angular based on Chart.js", "es2020": "fesm2020/ng2-charts.mjs", "esm2020": "esm2020/ng2-charts.mjs", "exports": { "./package.json": { "default": "./package.json" }, ".": { "types": "./ng2-charts.d.ts", "esm2020": "./esm2020/ng2-charts.mjs", "es2020": "./fesm2020/ng2-charts.mjs", "es2015": "./fesm2015/ng2-charts.mjs", "node": "./fesm2015/ng2-charts.mjs", "default": "./fesm2020/ng2-charts.mjs" } }, "fesm2015": "fesm2015/ng2-charts.mjs", "fesm2020": "fesm2020/ng2-charts.mjs", "homepage": "https://github.com/valor-software/ng2-charts#readme", "keywords": [ "chart.js", "angular" ], "license": "ISC", "main": "src/public_api.ts", "module": "fesm2015/ng2-charts.mjs", "name": "ng2-charts", "ng-add": { "save": "dependencies" }, "peerDependencies": { "@angular/common": ">=11.0.0", "@angular/core": ">=11.0.0", "chart.js": "^3.4.0", "rxjs": "^6.5.3 || ^7.4.0" }, "publishConfig": { "registry": "https://registry.npmjs.org/" }, "repository": { "type": "git", "url": "git+https://github.com/valor-software/ng2-charts.git" }, "schematics": "./schematics/collection.json", "sideEffects": false, "typings": "ng2-charts.d.ts", "version": "3.1.2", "readme": "# ng2-charts [![npm version](https://badge.fury.io/js/ng2-charts.svg)](http://badge.fury.io/js/ng2-charts) [![npm downloads](https://img.shields.io/npm/dm/ng2-charts.svg)](https://npmjs.org/ng2-charts) ![Travis CI](https://travis-ci.org/valor-software/ng2-charts.svg?branch=development) [slack](https://ngx-home.slack.com)\n\nBeautiful charts for Angular based on Chart.js\n\n[![NPM](https://nodei.co/npm/ng2-charts.png?downloads=true&downloadRank=true&stars=true)](https://npmjs.org/ng2-charts)\n[![NPM](https://nodei.co/npm-dl/ng2-charts.png?height=3&months=9)](https://npmjs.org/ng2-charts)\n\n# Usage & Demo\n\nSamples using `ng2-charts`\n\nhttps://valor-software.com/ng2-charts/\n\n- - -\n\n### Installation\n\nYou can install ***ng2-charts*** by using the Angular CLI:\n\n ```bash\n ng add ng2-charts\n ```\n\nThe required packages will be automatically installed, and your `app.module.ts` will be updated with the required\nchanges to start using the library right away.\n\n#### Manual install through package managers\n\n1. You can install ***ng2-charts*** using npm\n\n ```bash\n npm install ng2-charts --save\n ```\n\nor yarn\n\n ```bash\n yarn add ng2-charts --save\n ```\n\n2. You will also need to install and include `Chart.js` library in your application (it is a peer dependency of this\n library, more info can be found in the\n official `chart.js` [documentation](http://www.chartjs.org/docs/#getting-started))\n\n ```bash\n npm install chart.js --save\n ```\n\nor with yarn:\n\n ```bash\n yarn add chart.js --save\n ```\n\n3. Import the `NgChartsModule` in your app main module:\n\n ```typescript\n import { NgChartsModule } from 'ng2-charts';\n\n // In your App's module:\n imports: [\n NgChartsModule\n ]\n ```\n\n### Stackblitz Starting Templates\n\n* Line Chart - https://stackblitz.com/github/santam85/ng2-charts-line-template?preset=node\n* Pie Chart - https://stackblitz.com/github/santam85/ng2-charts-pie-template?preset=node\n* Bar Chart - https://stackblitz.com/github/santam85/ng2-charts-bar-template?preset=node\n* Doughnut Chart - https://stackblitz.com/github/santam85/ng2-charts-doughnut-template?preset=node\n* Radar Chart - https://stackblitz.com/github/santam85/ng2-charts-radar-template?preset=node\n* Polar Area Chart - https://stackblitz.com/github/santam85/ng2-charts-polar-area-template?preset=node\n* Bubble Chart - https://stackblitz.com/github/santam85/ng2-charts-bubble-template?preset=node\n* Scatter Chart - https://stackblitz.com/github/santam85/ng2-charts-scatter-template?preset=node\n\n## API\n\n### Chart types\n\nThere is one directive for all chart types: `baseChart`, and there are 8 types of charts: `line`, `bar`, `radar`, `pie`\n, `polarArea`, `doughnut`, `bubble` and `scatter`. You can use the directive on a `canvas` element as follows:\n\n ```html\n\n\n ```\n\n### Properties\n\n**Note**: For more information about possible options please refer to original [chart.js](http://www.chartjs.org/docs)\ndocumentation\n\n- `type`: (`ChartType`) - indicates the type of chart, it can be: `line`, `bar`, `radar`, `pie`, `polarArea`, `doughnut`\n or any custom type added to Chart.js\n- `data`: (`ChartData`) - the whole data structure to be rendered in the chart. Support different\n flexible formats and parsing options,\n see [here](https://www.chartjs.org/docs/latest/general/data-structures.html#object). In alternative, and depending on\n the `type` of your chart, you can use the `labels` and `datasets` properties to specify individual options.\n- `labels`: (`TLabel[]`) - Datasets labels. It's necessary for charts: `line`, `bar` and `radar`. And just labels (on\n hover) for charts: `polarArea`, `pie` and `doughnut`. Labels are matched in order with the `datasets` array.\n- `datasets`: (` ChartDataset[]`) - Same as the `datasets` property of the `data` input.\n See [here](https://www.chartjs.org/docs/latest/general/data-structures.html#dataset-configuration) for details.\n- `options`: (`ChartOptions`) - chart options (as\n per [chart.js documentation](https://www.chartjs.org/docs/latest/general/options.html)).\n- `legend`: (`boolean = false`) - if true, chart legend is shown.\n\n### Events\n\n- `chartClick`: fires when click on a chart has occurred, returns information regarding active points and labels\n- `chartHover`: fires when mousemove (hover) on a chart has occurred, returns information regarding active points and\n labels\n\n### Colors\n\nThe library comes with a set of predefined default colors (which are exported as `baseColors`). If there are more\ndatasets than colors, colors are generated randomly. You can specify custom colors by following\nthese [instructions](https://www.chartjs.org/docs/latest/general/colors.html).\n\n### Dynamic Theming\n\nThe `NgChartsModule` provides a service called `ThemeService` which allows clients to set a structure specifying colors\noverride settings. This service may be called when the dynamic theme changes, with colors which fit the theme. The\nstructure is interpreted as an override, with special functionality when dealing with arrays. Example:\n\n```typescript\ntype Theme = 'light-theme' | 'dark-theme';\n\nprivate _selectedTheme: Theme = 'light-theme';\npublic get selectedTheme(){\n return this._selectedTheme;\n}\n\npublic set selectedTheme(value){\n this._selectedTheme = value;\n let overrides: ChartOptions;\n if (this.selectedTheme === 'dark-theme') {\n overrides = {\n legend: {\n labels: { fontColor: 'white' }\n },\n scales: {\n xAxes: [ {\n ticks: { fontColor: 'white' },\n gridLines: { color: 'rgba(255,255,255,0.1)' }\n } ],\n yAxes: [ {\n ticks: { fontColor: 'white' },\n gridLines: { color: 'rgba(255,255,255,0.1)' }\n } ]\n }\n };\n } else {\n overrides = {};\n }\n this.themeService.setColorschemesOptions(overrides);\n}\n\nconstructor(private themeService: ThemeService){\n}\n\nsetCurrentTheme(theme: Theme){\n this.selectedTheme = theme;\n}\n```\n\nThe `overrides` object has the same type as the chart options object `ChartOptions`, and wherever a simple field is\nencountered it replaces the matching field in the `options` object. When an array is encountered (as in the `xAxes`\nand `yAxes` fields above), the single object inside the array is used as a template to override all array elements in\nthe matching field in the `options` object. So in the case above, every axis will have its ticks and gridline colors\nchanged.\n\n## Schematics\n\nThere are schematics that may be used to add this library to your project and generate chart components using Angular\nCLI.\n\n### Installation of library through ng-add schematics\n\n```bash\nng add ng2-charts\n```\n\nThis schematics will add the `NgChartsModule` as an imported module in the main app module (or another module as specified\nin the `--module` command option).\n\n### Example of Generating a Line Chart using Angular CLI\n\n```bash\nng generate ng2-charts:line my-line-chart\n```\n\nThis calls angular's component schematics and then modifies the result, so all the options for the component schematic\nare also usable here.\n\n## Troubleshooting\n\nPlease follow this guidelines when reporting bugs and feature requests:\n\n1. Use [GitHub Issues](https://github.com/valor-software/ng2-charts/issues) board to report bugs and feature requests (\n not our email address)\n2. Please **always** write steps to reproduce the error. That way we can focus on fixing the bug, not scratching our\n heads trying to reproduce it.\n\nThanks for understanding!\n\n### License\n\nThe MIT License (see the [LICENSE](https://github.com/valor-software/ng2-charts/blob/master/LICENSE) file for the full\ntext)\n", "readmeFilename": "README.md", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "lodash-es": "^4.17.15", "tslib": "^2.3.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/ng2-charts", "error": "[Circular]", "extraneous": false }, "ng2-file-upload": { "_from": "ng2-file-upload@^1.3.0", "_id": "ng2-file-upload@1.4.0", "_inBundle": false, "_integrity": "sha512-3J/KPU/tyh/ad6TFeUbrxX+SihUj0iOEt2Zsg4EX7mB3GFiQscXOfcUOxCkBtPWWWaqt3azrYbVGzsYa3/7NzQ==", "_location": "/ng2-file-upload", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "ng2-file-upload@^1.3.0", "name": "ng2-file-upload", "escapedName": "ng2-file-upload", "rawSpec": "^1.3.0", "saveSpec": "[Circular]", "fetchSpec": "^1.3.0" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/ng2-file-upload/-/ng2-file-upload-1.4.0.tgz", "_shasum": "8dea28d573234c52af474ad2a4001b335271e5c4", "_spec": "ng2-file-upload@^1.3.0", "_where": "/builds/gitlab/osm/ng-ui", "dependencies": { "tslib": { "_from": "tslib@^1.9.0", "_id": "tslib@1.14.1", "_inBundle": false, "_integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "_location": "/ng2-file-upload/tslib", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "tslib@^1.9.0", "name": "tslib", "escapedName": "tslib", "rawSpec": "^1.9.0", "saveSpec": "[Circular]", "fetchSpec": "^1.9.0" }, "_requiredBy": [ "/ng2-file-upload" ], "_resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "_shasum": "cf2d38bdc34a134bcaf1091c41f6619e2f672d00", "_spec": "tslib@^1.9.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/ng2-file-upload", "author": { "name": "Microsoft Corp." }, "bugs": { "url": "https://github.com/Microsoft/TypeScript/issues" }, "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": { ".": { "module": "./tslib.es6.js", "import": "./modules/index.js", "default": "./tslib.js" }, "./": "./" }, "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": [ "TypeScript", "Microsoft", "compiler", "language", "javascript", "tslib", "runtime" ], "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": { "type": "git", "url": "git+https://github.com/Microsoft/tslib.git" }, "sideEffects": false, "typings": "tslib.d.ts", "version": "1.14.1", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](http://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 2.3.3 or later\r\nnpm install tslib\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 2.3.3 or later\r\nyarn add tslib\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 2.3.3 or later\r\nbower install tslib\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 2.3.3 or later\r\njspm install tslib\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@1.[version].0/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/ng2-file-upload/node_modules/tslib", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "es2015": "fesm2015/ng2-file-upload.js", "esm2015": "esm2015/ng2-file-upload.js", "esm5": "esm5/ng2-file-upload.js", "fesm2015": "fesm2015/ng2-file-upload.js", "fesm5": "fesm5/ng2-file-upload.js", "main": "bundles/ng2-file-upload.umd.js", "metadata": "ng2-file-upload.metadata.json", "module": "fesm5/ng2-file-upload.js", "name": "ng2-file-upload", "peerDependencies": { "@angular/common": "*", "@angular/core": "*" }, "sideEffects": false, "typings": "ng2-file-upload.d.ts", "version": "1.4.0", "readme": "ERROR: No README data found!", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "tslib": "^1.9.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/ng2-file-upload", "error": "[Circular]", "extraneous": false }, "ng2-smart-table": { "_from": "ng2-smart-table@~1.6.0", "_id": "ng2-smart-table@1.6.0", "_inBundle": false, "_integrity": "sha512-ejAIcVgEznsMD79xg+HfCha804KyGEiX9KH5BnmVzQZFzpC782I5W2wn4zackp4Gi9km1H6pKf3+MXLCF8IRXQ==", "_location": "/ng2-smart-table", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "ng2-smart-table@~1.6.0", "name": "ng2-smart-table", "escapedName": "ng2-smart-table", "rawSpec": "~1.6.0", "saveSpec": "[Circular]", "fetchSpec": "~1.6.0" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/ng2-smart-table/-/ng2-smart-table-1.6.0.tgz", "_shasum": "b18c1ab29b1c04a0186d489b591ad665e5a06c85", "_spec": "ng2-smart-table@~1.6.0", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "akveo" }, "dependencies": { "lodash": { "_from": "lodash@^4.17.10", "_id": "lodash@4.17.21", "_inBundle": false, "_integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "_location": "/lodash", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "lodash@^4.17.10", "name": "lodash", "escapedName": "lodash", "rawSpec": "^4.17.10", "saveSpec": "[Circular]", "fetchSpec": "^4.17.10" }, "_requiredBy": [ "/cypress", "/eslint-plugin-lodash", "/inquirer", "/karma", "/ng2-smart-table" ], "_resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "_shasum": "679591c564c3bffaae8454cf0b3df370c3d6911c", "_spec": "lodash@^4.17.10", "_where": "/builds/gitlab/osm/ng-ui/node_modules/ng2-smart-table", "author": { "name": "John-David Dalton", "email": "john.david.dalton@gmail.com" }, "bugs": { "url": "https://github.com/lodash/lodash/issues" }, "contributors": [ { "name": "John-David Dalton", "email": "john.david.dalton@gmail.com" }, { "name": "Mathias Bynens", "email": "mathias@qiwi.be" } ], "deprecated": false, "description": "Lodash modular utilities.", "homepage": "https://lodash.com/", "icon": "https://lodash.com/icon.svg", "keywords": [ "modules", "stdlib", "util" ], "license": "MIT", "main": "lodash.js", "name": "lodash", "repository": { "type": "git", "url": "git+https://github.com/lodash/lodash.git" }, "scripts": { "test": "echo \"See https://travis-ci.org/lodash-archive/lodash-cli for testing details.\"" }, "version": "4.17.21", "readme": "# lodash v4.17.21\n\nThe [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules.\n\n## Installation\n\nUsing npm:\n```shell\n$ npm i -g npm\n$ npm i --save lodash\n```\n\nIn Node.js:\n```js\n// Load the full build.\nvar _ = require('lodash');\n// Load the core build.\nvar _ = require('lodash/core');\n// Load the FP build for immutable auto-curried iteratee-first data-last methods.\nvar fp = require('lodash/fp');\n\n// Load method categories.\nvar array = require('lodash/array');\nvar object = require('lodash/fp/object');\n\n// Cherry-pick methods for smaller browserify/rollup/webpack bundles.\nvar at = require('lodash/at');\nvar curryN = require('lodash/fp/curryN');\n```\n\nSee the [package source](https://github.com/lodash/lodash/tree/4.17.21-npm) for more details.\n\n**Note:**
\nInstall [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL.\n\n## Support\n\nTested in Chrome 74-75, Firefox 66-67, IE 11, Edge 18, Safari 11-12, & Node.js 8-12.
\nAutomated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available.\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/lodash", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Angular Smart Table", "es2015": "fesm2015/ng2-smart-table.js", "esm2015": "esm2015/ng2-smart-table.js", "esm5": "esm5/ng2-smart-table.js", "fesm2015": "fesm2015/ng2-smart-table.js", "fesm5": "fesm5/ng2-smart-table.js", "license": "MIT", "main": "bundles/ng2-smart-table.umd.js", "metadata": "ng2-smart-table.metadata.json", "module": "fesm5/ng2-smart-table.js", "name": "ng2-smart-table", "peerDependencies": { "@akveo/ng2-completer": "9.0.1", "@angular/common": "^9.0.0", "@angular/core": "^9.0.0", "@angular/forms": "^9.0.0", "tslib": "^1.9.0" }, "sideEffects": false, "typings": "ng2-smart-table.d.ts", "version": "1.6.0", "readme": "ERROR: No README data found!", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "lodash": "^4.17.10" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/ng2-smart-table", "error": "[Circular]", "extraneous": false }, "ngx-toastr": { "$schema": "../../node_modules/ng-packagr/package.schema.json", "_from": "ngx-toastr@^13.2.1", "_id": "ngx-toastr@13.2.1", "_inBundle": false, "_integrity": "sha512-UAzp7/xWK9IXA2LsOmhpaaIGCqscvJokoQpBNpAMrjEkDeSlFf8PWQAuQY795KW0mJb3qF9UG/s23nsXfMYKmg==", "_location": "/ngx-toastr", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "ngx-toastr@^13.2.1", "name": "ngx-toastr", "escapedName": "ngx-toastr", "rawSpec": "^13.2.1", "saveSpec": "[Circular]", "fetchSpec": "^13.2.1" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-13.2.1.tgz", "_shasum": "531bc7da6a524a861e0409bd2749878b3b3f8a3f", "_spec": "ngx-toastr@^13.2.1", "_where": "/builds/gitlab/osm/ng-ui", "bugs": { "url": "https://github.com/scttcper/ngx-toastr/issues" }, "dependencies": { "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]", "_deduped": "tslib" } }, "deprecated": false, "description": "Toastr for Angular", "es2015": "fesm2015/ngx-toastr.js", "esm2015": "esm2015/ngx-toastr.js", "fesm2015": "fesm2015/ngx-toastr.js", "homepage": "https://ngx-toastr.vercel.app", "keywords": [ "ng2", "ngx", "ngx-toastr", "toastr-ng2", "angular", "angular2", "typescript", "alert", "toast", "toastr", "angular toastr", "notifications" ], "license": "MIT", "main": "bundles/ngx-toastr.umd.js", "metadata": "ngx-toastr.metadata.json", "module": "fesm2015/ngx-toastr.js", "name": "ngx-toastr", "peerDependencies": { "@angular/core": ">=10.0.0-0", "@angular/common": ">=10.0.0-0", "@angular/platform-browser": ">=10.0.0-0" }, "repository": { "type": "git", "url": "git+https://github.com/scttcper/ngx-toastr.git" }, "sideEffects": false, "typings": "ngx-toastr.d.ts", "version": "13.2.1", "readme": "
\n \"Angular\n
\n

ngx-toastr

\n
\n \n \"npm\"\n \n \n \"circleci\"\n \n \n \"codecov\"\n \n
\n
\n
\n\nDEMO: https://ngx-toastr.vercel.app\n\n## Features\n\n- Toast Component Injection without being passed `ViewContainerRef`\n- No use of `*ngFor`. Fewer dirty checks and higher performance.\n- AoT compilation and lazy loading compatible\n- Component inheritance for custom toasts\n- SystemJS/UMD rollup bundle\n- Animations using Angular's\n [Web Animations API](https://angular.io/docs/ts/latest/guide/animations.html)\n- Output toasts to an optional target directive\n\n## Dependencies\n\nLatest version available for each version of Angular\n\n| ngx-toastr | Angular |\n| ---------- | ----------- |\n| 6.5.0 | 4.x |\n| 8.10.2 | 5.x |\n| 10.1.0 | 8.x 7.x 6.x |\n| 11.3.3 | 8.x |\n| 12.1.0 | 9.x |\n| current | >= 10.x |\n\n## Install\n\n```bash\nnpm install ngx-toastr --save\n```\n\n`@angular/animations` package is a required dependency for the default toast\n\n```bash\nnpm install @angular/animations --save\n```\n\nDon't want to use `@angular/animations`? See\n[Setup Without Animations](#setup-without-animations).\n\n## Setup\n\n**step 1:** add css\n\n- copy\n [toast css](/src/lib/toastr.css)\n to your project.\n- If you are using sass you can import the css.\n\n```scss\n// regular style toast\n@import '~ngx-toastr/toastr';\n\n// bootstrap style toast\n// or import a bootstrap 4 alert styled design (SASS ONLY)\n// should be after your bootstrap imports, it uses bs4 variables, mixins, functions\n@import '~ngx-toastr/toastr-bs4-alert';\n\n// if you'd like to use it without importing all of bootstrap it requires\n@import '~bootstrap/scss/functions';\n@import '~bootstrap/scss/variables';\n@import '~bootstrap/scss/mixins';\n@import '~ngx-toastr/toastr-bs4-alert';\n```\n\n- If you are using angular-cli you can add it to your angular.json\n\n```ts\n\"styles\": [\n \"styles.scss\",\n \"node_modules/ngx-toastr/toastr.css\" // try adding '../' if you're using angular cli before 6\n]\n```\n\n**step 2:** add ToastrModule to app NgModule, make sure you have BrowserAnimationsModule as well\n\n```typescript\nimport { CommonModule } from '@angular/common';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\nimport { ToastrModule } from 'ngx-toastr';\n\n@NgModule({\n imports: [\n CommonModule,\n BrowserAnimationsModule, // required animations module\n ToastrModule.forRoot(), // ToastrModule added\n ],\n bootstrap: [App],\n declarations: [App],\n})\nclass MainModule {}\n```\n\n## Use\n\n```typescript\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({...})\nexport class YourComponent {\n constructor(private toastr: ToastrService) {}\n\n showSuccess() {\n this.toastr.success('Hello world!', 'Toastr fun!');\n }\n}\n```\n\n## Options\n\nThere are **individual options** and **global options**.\n\n### Individual Options\n\nPassed to `ToastrService.success/error/warning/info/show()`\n\n| Option | Type | Default | Description |\n| ----------------- | ------------------------------ | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |\n| toastComponent | Component | Toast | Angular component that will be used |\n| closeButton | boolean | false | Show close button |\n| timeOut | number | 5000 | Time to live in milliseconds |\n| extendedTimeOut | number | 1000 | Time to close after a user hovers over toast |\n| disableTimeOut | boolean \\| | 'timeOut' \\| 'extendedTimeOut' | false | Disable both timeOut and extendedTimeOut when set to `true`. Allows specifying which timeOut to disable, either: `timeOut` or `extendedTimeOut` |\n| easing | string | 'ease-in' | Toast component easing |\n| easeTime | string \\| number | 300 | Time spent easing |\n| enableHtml | boolean | false | Allow html in message |\n| progressBar | boolean | false | Show progress bar |\n| progressAnimation | `'decreasing' \\| 'increasing'` | 'decreasing' | Changes the animation of the progress bar. |\n| toastClass | string | 'ngx-toastr' | Class on toast |\n| positionClass | string | 'toast-top-right' | Class on toast container |\n| titleClass | string | 'toast-title' | Class inside toast on title |\n| messageClass | string | 'toast-message' | Class inside toast on message |\n| tapToDismiss | boolean | true | Close on click |\n| onActivateTick | boolean | false | Fires `changeDetectorRef.detectChanges()` when activated. Helps show toast from asynchronous events outside of Angular's change detection |\n\n#### Setting Individual Options\n\nsuccess, error, info, warning take `(message, title, ToastConfig)` pass an\noptions object to replace any default option.\n\n```typescript\nthis.toastrService.error('everything is broken', 'Major Error', {\n timeOut: 3000,\n});\n```\n\n### Global Options\n\nAll [individual options](#individual-options) can be overridden in the global\noptions to affect all toasts. In addition, global options include the following\noptions:\n\n| Option | Type | Default | Description |\n| ----------------------- | ------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------- |\n| maxOpened | number | 0 | Max toasts opened. Toasts will be queued. 0 is unlimited |\n| autoDismiss | boolean | false | Dismiss current toast when max is reached |\n| iconClasses | object | [see below](#iconclasses-defaults) | Classes used on toastr service methods |\n| newestOnTop | boolean | true | New toast placement |\n| preventDuplicates | boolean | false | Block duplicate messages |\n| countDuplicates | boolean | false | Displays a duplicates counter (preventDuplicates must be true). Toast must have a title and duplicate message |\n| resetTimeoutOnDuplicate | boolean | false | Reset toast timeout on duplicate (preventDuplicates must be true) |\n| includeTitleDuplicates | boolean | false | Include the title of a toast when checking for duplicates (by default only message is compared) |\n\n##### iconClasses defaults\n\n```typescript\niconClasses = {\n error: 'toast-error',\n info: 'toast-info',\n success: 'toast-success',\n warning: 'toast-warning',\n};\n```\n\n#### Setting Global Options\n\nPass values to `ToastrModule.forRoot()`\n\n```typescript\n// root app NgModule\nimports: [\n ToastrModule.forRoot({\n timeOut: 10000,\n positionClass: 'toast-bottom-right',\n preventDuplicates: true,\n }),\n],\n```\n\n### Toastr Service methods return:\n\n```typescript\nexport interface ActiveToast {\n /** Your Toast ID. Use this to close it individually */\n toastId: number;\n /** the title of your toast. Stored to prevent duplicates if includeTitleDuplicates set */\n title: string\n /** the message of your toast. Stored to prevent duplicates */\n message: string;\n /** a reference to the component see portal.ts */\n portal: ComponentRef;\n /** a reference to your toast */\n toastRef: ToastRef;\n /** triggered when toast is active */\n onShown: Observable;\n /** triggered when toast is destroyed */\n onHidden: Observable;\n /** triggered on toast click */\n onTap: Observable;\n /** available for your use in custom toast */\n onAction: Observable;\n}\n```\n\n### Put toasts in your own container\n\nPut toasts in a specific div inside your application. This should probably be\nsomewhere that doesn't get deleted. Add `ToastContainerModule` to the ngModule\nwhere you need the directive available.\n\n```typescript\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\nimport { ToastrModule, ToastContainerModule } from 'ngx-toastr';\n\nimport { AppComponent } from './app.component';\n\n@NgModule({\n declarations: [AppComponent],\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n\n ToastrModule.forRoot({ positionClass: 'inline' }),\n ToastContainerModule,\n ],\n providers: [],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n```\n\nAdd a div with `toastContainer` directive on it.\n\n```typescript\nimport { Component, OnInit, ViewChild } from '@angular/core';\n\nimport { ToastContainerDirective, ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'app-root',\n template: `\n

Click

\n
\n `,\n})\nexport class AppComponent implements OnInit {\n @ViewChild(ToastContainerDirective, { static: true })\n toastContainer: ToastContainerDirective;\n\n constructor(private toastrService: ToastrService) {}\n ngOnInit() {\n this.toastrService.overlayContainer = this.toastContainer;\n }\n onClick() {\n this.toastrService.success('in div');\n }\n}\n```\n\n## Functions\n\n##### Clear\n\nRemove all or a single toast by optional id\n\n```ts\ntoastrService.clear(toastId?: number);\n```\n\n##### Remove\n\nRemove and destroy a single toast by id\n\n```\ntoastrService.remove(toastId: number);\n```\n\n## SystemJS\n\nIf you are using SystemJS, you should also adjust your configuration to point to\nthe UMD bundle.\n\nIn your SystemJS config file, `map` needs to tell the System loader where to\nlook for `ngx-toastr`:\n\n```js\nmap: {\n 'ngx-toastr': 'node_modules/ngx-toastr/bundles/ngx-toastr.umd.min.js',\n}\n```\n\n## Setup Without Animations\n\nIf you do not want to include `@angular/animations` in your project you can\noverride the default toast component in the global config to use\n`ToastNoAnimation` instead of the default one.\n\nIn your main module (ex: `app.module.ts`)\n\n```typescript\nimport { ToastrModule, ToastNoAnimation, ToastNoAnimationModule } from 'ngx-toastr';\n\n@NgModule({\n imports: [\n // ...\n\n // BrowserAnimationsModule no longer required\n ToastNoAnimationModule.forRoot(),\n ],\n // ...\n})\nclass AppModule {}\n```\n\nThat's it! Animations are no longer required.\n\n## Using A Custom Toast\n\nCreate your toast component extending Toast see the demo's pink toast for an example\nhttps://github.com/scttcper/ngx-toastr/blob/master/src/app/pink.toast.ts\n\n```typescript\nimport { ToastrModule } from 'ngx-toastr';\n\n@NgModule({\n imports: [\n ToastrModule.forRoot({\n toastComponent: YourToastComponent, // added custom toast!\n }),\n ],\n entryComponents: [YourToastComponent], // add!\n bootstrap: [App],\n declarations: [App, YourToastComponent], // add!\n})\nclass AppModule {}\n```\n\n## FAQ\n\n1. ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it\n was checked\\\n When opening a toast inside an angular lifecycle wrap it in setTimeout\n\n```typescript\nngOnInit() {\n setTimeout(() => this.toastr.success('sup'))\n}\n```\n\n2. Change default icons (check, warning sign, etc)\\\n Overwrite the css background-image https://github.com/scttcper/ngx-toastr/blob/master/src/lib/toastr.css\n3. How do I use this in an ErrorHandler? See:\n https://github.com/scttcper/ngx-toastr/issues/179\n4. How can I translate messages See:\n https://github.com/scttcper/ngx-toastr/issues/201\n5. How to handle toastr click/tap action?\n\n```ts\nshowToaster() {\n this.toastr.success('Hello world!', 'Toastr fun!')\n .onTap\n .pipe(take(1))\n .subscribe(() => this.toasterClickedHandler());\n}\n\ntoasterClickedHandler() {\n console.log('Toastr clicked');\n}\n```\n\n## Previous Works\n\n[toastr](https://github.com/CodeSeven/toastr) original toastr\\\n[angular-toastr](https://github.com/Foxandxss/angular-toastr) AngularJS toastr\\\n[notyf](https://github.com/caroso1222/notyf) notyf (css)\n\n## License\n\nMIT\n\n---\n\n> GitHub [@scttcper](https://github.com/scttcper)  · \n> Twitter [@scttcper](https://twitter.com/scttcper)\n", "readmeFilename": "README.md", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "tslib": "^2.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/ngx-toastr", "error": "[Circular]", "extraneous": false }, "ol": { "_from": "ol@^5.3.3", "_id": "ol@5.3.3", "_inBundle": false, "_integrity": "sha512-7eU4x8YMduNcED1D5wI+AMWDRe7/1HmGfsbV+kFFROI9RNABU/6n4osj6Q3trZbxxKnK2DSRIjIRGwRHT/Z+Ww==", "_location": "/ol", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "ol@^5.3.3", "name": "ol", "escapedName": "ol", "rawSpec": "^5.3.3", "saveSpec": "[Circular]", "fetchSpec": "^5.3.3" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/ol/-/ol-5.3.3.tgz", "_shasum": "ad39b7b485fdbae4b3e1535a0a07cc5d88b0b9b5", "_spec": "ol@^5.3.3", "_where": "/builds/gitlab/osm/ng-ui", "bugs": { "url": "https://github.com/openlayers/openlayers/issues" }, "dependencies": { "pbf": { "_from": "pbf@3.1.0", "_id": "pbf@3.1.0", "_inBundle": false, "_integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", "_location": "/pbf", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "pbf@3.1.0", "name": "pbf", "escapedName": "pbf", "rawSpec": "3.1.0", "saveSpec": "[Circular]", "fetchSpec": "3.1.0" }, "_requiredBy": [ "/ol" ], "_resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", "_shasum": "f70004badcb281761eabb1e76c92f179f08189e9", "_spec": "pbf@3.1.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/ol", "author": { "name": "Konstantin Kaefer" }, "bin": { "pbf": "bin/pbf" }, "bugs": { "url": "https://github.com/mapbox/pbf/issues" }, "dependencies": { "ieee754": { "_from": "ieee754@^1.1.6", "_id": "ieee754@1.2.1", "_inBundle": false, "_integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "_location": "/ieee754", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "ieee754@^1.1.6", "name": "ieee754", "escapedName": "ieee754", "rawSpec": "^1.1.6", "saveSpec": "[Circular]", "fetchSpec": "^1.1.6" }, "_requiredBy": [ "/buffer", "/pbf" ], "_resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "_shasum": "8eb7a10a63fff25d15a57b001586d177d1b0d352", "_spec": "ieee754@^1.1.6", "_where": "/builds/gitlab/osm/ng-ui/node_modules/pbf", "author": { "name": "Feross Aboukhadijeh", "email": "feross@feross.org", "url": "https://feross.org" }, "bugs": { "url": "https://github.com/feross/ieee754/issues" }, "contributors": [ { "name": "Romain Beauxis", "email": "toots@rastageeks.org" } ], "deprecated": false, "description": "Read/write IEEE754 floating point numbers from/to a Buffer or array-like object", "devDependencies": { "airtap": "^3.0.0", "standard": "*", "tape": "^5.0.1" }, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "homepage": "https://github.com/feross/ieee754#readme", "keywords": [ "IEEE 754", "buffer", "convert", "floating point", "ieee754" ], "license": "BSD-3-Clause", "main": "index.js", "name": "ieee754", "repository": { "type": "git", "url": "git://github.com/feross/ieee754.git" }, "scripts": { "test": "standard && npm run test-node && npm run test-browser", "test-browser": "airtap -- test/*.js", "test-browser-local": "airtap --local -- test/*.js", "test-node": "tape test/*.js" }, "types": "index.d.ts", "version": "1.2.1", "readme": "# ieee754 [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]\n\n[travis-image]: https://img.shields.io/travis/feross/ieee754/master.svg\n[travis-url]: https://travis-ci.org/feross/ieee754\n[npm-image]: https://img.shields.io/npm/v/ieee754.svg\n[npm-url]: https://npmjs.org/package/ieee754\n[downloads-image]: https://img.shields.io/npm/dm/ieee754.svg\n[downloads-url]: https://npmjs.org/package/ieee754\n[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n[standard-url]: https://standardjs.com\n\n[![saucelabs][saucelabs-image]][saucelabs-url]\n\n[saucelabs-image]: https://saucelabs.com/browser-matrix/ieee754.svg\n[saucelabs-url]: https://saucelabs.com/u/ieee754\n\n### Read/write IEEE754 floating point numbers from/to a Buffer or array-like object.\n\n## install\n\n```\nnpm install ieee754\n```\n\n## methods\n\n`var ieee754 = require('ieee754')`\n\nThe `ieee754` object has the following functions:\n\n```\nieee754.read = function (buffer, offset, isLE, mLen, nBytes)\nieee754.write = function (buffer, value, offset, isLE, mLen, nBytes)\n```\n\nThe arguments mean the following:\n\n- buffer = the buffer\n- offset = offset into the buffer\n- value = value to set (only for `write`)\n- isLe = is little endian?\n- mLen = mantissa length\n- nBytes = number of bytes\n\n## what is ieee754?\n\nThe IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point computation. [Read more](http://en.wikipedia.org/wiki/IEEE_floating_point).\n\n## license\n\nBSD 3 Clause. Copyright (c) 2008, Fair Oaks Labs, Inc.\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/ieee754", "error": "[Circular]", "extraneous": false }, "resolve-protobuf-schema": { "_from": "resolve-protobuf-schema@^2.0.0", "_id": "resolve-protobuf-schema@2.1.0", "_inBundle": false, "_integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", "_location": "/resolve-protobuf-schema", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "resolve-protobuf-schema@^2.0.0", "name": "resolve-protobuf-schema", "escapedName": "resolve-protobuf-schema", "rawSpec": "^2.0.0", "saveSpec": "[Circular]", "fetchSpec": "^2.0.0" }, "_requiredBy": [ "/pbf" ], "_resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", "_shasum": "9ca9a9e69cf192bbdaf1006ec1973948aa4a3758", "_spec": "resolve-protobuf-schema@^2.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/pbf", "author": { "name": "Mathias Buus", "url": "@mafintosh" }, "bugs": { "url": "https://github.com/mafintosh/resolve-protobuf-schema/issues" }, "dependencies": { "protocol-buffers-schema": { "_from": "protocol-buffers-schema@^3.3.1", "_id": "protocol-buffers-schema@3.6.0", "_inBundle": false, "_integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", "_location": "/protocol-buffers-schema", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "protocol-buffers-schema@^3.3.1", "name": "protocol-buffers-schema", "escapedName": "protocol-buffers-schema", "rawSpec": "^3.3.1", "saveSpec": "[Circular]", "fetchSpec": "^3.3.1" }, "_requiredBy": [ "/resolve-protobuf-schema" ], "_resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", "_shasum": "77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03", "_spec": "protocol-buffers-schema@^3.3.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/resolve-protobuf-schema", "author": { "name": "Mathias Buus" }, "bugs": { "url": "https://github.com/mafintosh/protocol-buffers-schema/issues" }, "deprecated": false, "description": "No nonsense protocol buffers schema parser written in Javascript", "devDependencies": { "standard": "^10.0.3", "tape": "^4.8.0" }, "homepage": "https://github.com/mafintosh/protocol-buffers-schema", "keywords": [ "protobuf", "protocol", "buffers", "schema", "parser", "parse" ], "license": "MIT", "main": "index.js", "name": "protocol-buffers-schema", "repository": { "type": "git", "url": "git+https://github.com/mafintosh/protocol-buffers-schema.git" }, "scripts": { "test": "standard && tape test/*.js" }, "version": "3.6.0", "readme": "# protocol-buffers-schema\n\nNo nonsense [protocol buffers](https://developers.google.com/protocol-buffers) schema parser written in Javascript\n\n``` js\nnpm install protocol-buffers-schema\n```\n\n[![build status](http://img.shields.io/travis/mafintosh/protocol-buffers-schema.svg?style=flat)](http://travis-ci.org/mafintosh/protocol-buffers-schema)\n\n## Usage\n\nFirst save the following file as `example.proto`\n\n```proto\nsyntax = \"proto2\";\n\nmessage Point {\n required int32 x = 1;\n required int32 y=2;\n optional string label = 3;\n}\n\nmessage Line {\n required Point start = 1;\n required Point end = 2;\n optional string label = 3;\n}\n```\n\nThe run the following example\n\n``` js\nvar fs = require('fs')\nvar schema = require('protocol-buffers-schema')\n\n// pass a buffer or string to schema.parse\nvar sch = schema.parse(fs.readFileSync('example.proto'))\n\n// will print out the schema as a javascript object\nconsole.log(sch)\n```\n\nRunning the above example will print something like\n\n``` js\n{\n syntax: 2,\n package: null,\n enums: [],\n messages: [{\n name: 'Point',\n enums: [],\n messages: [],\n options: {},\n fields: [{\n name: 'x',\n type: 'int32',\n tag: 1,\n required: true,\n repeated: false,\n options: {}\n }, {\n name: 'y',\n type: 'int32',\n tag: 2,\n required: true,\n repeated: false,\n options: {}\n }, {\n name: 'label',\n type: 'string',\n tag: 3,\n required: false,\n repeated: false,\n options: {}\n }]\n }, {\n name: 'Line',\n enums: [],\n messages: [],\n options: {},\n fields: [{\n name: 'start',\n type: 'Point',\n tag: 1,\n required: true,\n repeated: false,\n options: {}\n }, {\n name: 'end',\n type: 'Point',\n tag: 2,\n required: true,\n repeated: false,\n options: {}\n }, {\n name: 'label',\n type: 'string',\n tag: 3,\n required: false,\n repeated: false,\n options: {}\n }]\n }],\n options:{}\n}\n```\n\n## API\n\n#### `schema.parse(protobufSchemaBufferOrString)`\n\nParses a .proto schema into a javascript object\n\n#### `schema.stringify(schema)`\n\nStringifies a parsed schema back into .proto format\n\n## License\n\nMIT\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/protocol-buffers-schema", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Read a protobuf schema from the disk, parse it and resolve all imports", "devDependencies": { "tape": "^3.0.0" }, "homepage": "https://github.com/mafintosh/resolve-protobuf-schema", "license": "MIT", "main": "index.js", "name": "resolve-protobuf-schema", "repository": { "type": "git", "url": "git+https://github.com/mafintosh/resolve-protobuf-schema.git" }, "scripts": { "test": "tape test/index.js" }, "version": "2.1.0", "readme": "# resolve-protobuf-schema\n\nRead a protobuf schema from the disk, parse it and resolve all imports\n\n```\nnpm install resolve-protobuf-schema\n```\n\n[![build status](http://img.shields.io/travis/mafintosh/resolve-protobuf-schema.svg?style=flat)](http://travis-ci.org/mafintosh/resolve-protobuf-schema)\n\n## Usage\n\nStore the following example protobuf schema in `test.proto`\n\n```\nmessage Test {\n optional string test = 1;\n}\n```\n\nThen run\n\n``` js\nvar resolve = require('resolve-protobuf-schema')\nconsole.log(resolve.sync('test.proto')) // prints the parsed schema\n```\n\nSchema imports will resolved as well\n\n```\nimport \"./test.proto\"\n\nmessage AnotherTest {\n optional string test = 1;\n}\n```\n\n``` js\nconsole.log(resolve.sync('./another-test.proto')) // will print a combined parsed schema\n```\n\n## API\n\n* `resolve(path, cb)` read and resolve a schema\n* `resolve.sync(path)` sync version of `resolve`\n\n## License\n\nMIT\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "protocol-buffers-schema": "^3.3.1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/resolve-protobuf-schema", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "a low-level, lightweight protocol buffers implementation in JavaScript", "devDependencies": { "benchmark": "^2.1.0", "browserify": "^14.4.0", "eslint": "^4.2.0", "eslint-config-mourner": "^2.0.1", "mkdirp": "^0.5.1", "protocol-buffers": "^3.1.6", "tap": "^10.7.0", "tile-stats-runner": "^1.0.0", "uglify-js": "^3.0.25" }, "eslintConfig": { "extends": "mourner", "rules": { "space-before-function-paren": [ 2, "never" ], "key-spacing": 0, "no-empty": 0, "global-require": 0, "indent": [ 2, 4, { "flatTernaryExpressions": true } ] } }, "homepage": "https://github.com/mapbox/pbf", "keywords": [ "protocol", "buffer", "pbf", "protobuf", "binary", "format", "serialization", "encoder", "decoder" ], "license": "BSD-3-Clause", "main": "index.js", "name": "pbf", "repository": { "type": "git", "url": "git+ssh://git@github.com/mapbox/pbf.git" }, "scripts": { "build-dev": "mkdirp dist && browserify index.js -d -s Pbf > dist/pbf-dev.js", "build-min": "mkdirp dist && browserify index.js -s Pbf | uglifyjs -c warnings=false -m > dist/pbf.js", "cov": "tap test/*.test.js --cov --coverage-report=html", "prepublish": "npm run build-dev && npm run build-min", "test": "eslint index.js compile.js test/*.js bench/bench-tiles.js bin/pbf && tap test/*.test.js" }, "version": "3.1.0", "readme": "# pbf\n\n[![build status](https://secure.travis-ci.org/mapbox/pbf.svg)](http://travis-ci.org/mapbox/pbf) [![Coverage Status](https://coveralls.io/repos/mapbox/pbf/badge.svg)](https://coveralls.io/r/mapbox/pbf)\n\nA low-level, fast, ultra-lightweight (3KB gzipped) JavaScript library for decoding and encoding [protocol buffers](https://developers.google.com/protocol-buffers), a compact binary format for structured data serialization. Works both in Node and the browser. Supports lazy decoding and detailed customization of the reading/writing code.\n\n## Performance\n\nThis library is extremely fast — much faster than native `JSON.parse`/`JSON.stringify`\nand the [protocol-buffers](https://github.com/mafintosh/protocol-buffers) module.\nHere's a result from running a real-world benchmark on Node v6.5\n(decoding and encoding a sample of 439 vector tiles, 22.6 MB total):\n\n- **pbf** decode: 387ms, or 57 MB/s\n- **pbf** encode: 396ms, or 56 MB/s\n- **protocol-buffers** decode: 837ms, or 26 MB/s\n- **protocol-buffers** encode: 4197ms, or 5 MB/s\n- **JSON.parse**: 1540ms, or 125 MB/s (parsing an equivalent 77.5 MB JSON file)\n- **JSON.stringify**: 607ms, or 49 MB/s\n\n## Examples\n\n#### Using Compiled Code\n\nInstall `pbf` and compile a JavaScript module from a `.proto` file:\n\n```bash\n$ npm install -g pbf\n$ pbf example.proto > example.js\n```\n\nThen read and write objects using the module like this:\n\n```js\nvar Pbf = require('pbf');\nvar Example = require('./example.js').Example;\n\n// read\nvar pbf = new Pbf(buffer);\nvar obj = Example.read(pbf);\n\n// write\nvar pbf = new Pbf();\nExample.write(obj, pbf);\nvar buffer = pbf.finish();\n```\n\nAlternatively, you can compile a module directly in the code:\n\n```js\nvar compile = require('pbf/compile');\nvar schema = require('protocol-buffers-schema');\n\nvar proto = schema.parse(fs.readFileSync('example.proto'));\nvar Test = compile(proto).Test;\n```\n\nIf you use `webpack` as your module bundler, you can use [pbf-loader](https://github.com/trivago/pbf-loader)\nto load .proto files directly. It returns a compiled module ready to be used.\n\nGiven you already configured your `webpack.config.js`, the code above would look like:\n```js\nvar Pbf = require('pbf');\nvar proto = require('./example.proto');\n\nvar Test = proto.Test;\n```\n\n#### Custom Reading\n\n```js\nvar data = new Pbf(buffer).readFields(readData, {});\n\nfunction readData(tag, data, pbf) {\n if (tag === 1) data.name = pbf.readString();\n else if (tag === 2) data.version = pbf.readVarint();\n else if (tag === 3) data.layer = pbf.readMessage(readLayer, {});\n}\nfunction readLayer(tag, layer, pbf) {\n if (tag === 1) layer.name = pbf.readString();\n else if (tag === 3) layer.size = pbf.readVarint();\n}\n```\n\n#### Custom Writing\n\n```js\nvar pbf = new Pbf();\nwriteData(data, pbf);\nvar buffer = pbf.finish();\n\nfunction writeData(data, pbf) {\n pbf.writeStringField(1, data.name);\n pbf.writeVarintField(2, data.version);\n pbf.writeMessage(3, writeLayer, data.layer);\n}\nfunction writeLayer(layer, pbf) {\n pbf.writeStringField(1, layer.name);\n pbf.writeVarintField(2, layer.size);\n}\n```\n\n## Install\n\nNode and Browserify:\n\n```bash\nnpm install pbf\n```\n\nMaking a browser build:\n\n```bash\nnpm install\nnpm run build-dev # dist/pbf-dev.js (development build)\nnpm run build-min # dist/pbf.js (minified production build)\n```\n\nCDN link: https://unpkg.com/pbf@3.0.5/dist/pbf.js\n\n## API\n\nCreate a `Pbf` object, optionally given a `Buffer` or `Uint8Array` as input data:\n\n```js\n// parse a pbf file from disk in Node\nvar pbf = new Pbf(fs.readFileSync('data.pbf'));\n\n// parse a pbf file in a browser after an ajax request with responseType=\"arraybuffer\"\nvar pbf = new Pbf(new Uint8Array(xhr.response));\n```\n\n`Pbf` object properties:\n\n```js\npbf.length; // length of the underlying buffer\npbf.pos; // current offset for reading or writing\n```\n\n#### Reading\n\nRead a sequence of fields:\n\n```js\npbf.readFields(function (tag) {\n if (tag === 1) pbf.readVarint();\n else if (tag === 2) pbf.readString();\n else ...\n});\n```\n\nIt optionally accepts an object that will be passed to the reading function for easier construction of decoded data,\nand also passes the `Pbf` object as a third argument:\n\n```js\nvar result = pbf.readFields(callback, {})\n\nfunction callback(tag, result, pbf) {\n if (tag === 1) result.id = pbf.readVarint();\n}\n```\n\nTo read an embedded message, use `pbf.readMessage(fn[, obj])` (in the same way as `read`).\n\nRead values:\n\n```js\nvar value = pbf.readVarint();\nvar str = pbf.readString();\nvar numbers = pbf.readPackedVarint();\n```\n\nFor lazy or partial decoding, simply save the position instead of reading a value,\nthen later set it back to the saved value and read:\n\n```js\nvar fooPos = -1;\npbf.readFields(function (tag) {\n if (tag === 1) fooPos = pbf.pos;\n});\n...\npbf.pos = fooPos;\npbf.readMessage(readFoo);\n```\n\nScalar reading methods:\n\n* `readVarint(isSigned)` (pass `true` if you expect negative varints)\n* `readSVarint()`\n* `readFixed32()`\n* `readFixed64()`\n* `readSFixed32()`\n* `readSFixed64()`\n* `readBoolean()`\n* `readFloat()`\n* `readDouble()`\n* `readString()`\n* `readBytes()`\n* `skip(value)`\n\nPacked reading methods:\n\n* `readPackedVarint(arr, isSigned)` (appends read items to `arr`)\n* `readPackedSVarint(arr)`\n* `readPackedFixed32(arr)`\n* `readPackedFixed64(arr)`\n* `readPackedSFixed32(arr)`\n* `readPackedSFixed64(arr)`\n* `readPackedBoolean(arr)`\n* `readPackedFloat(arr)`\n* `readPackedDouble(arr)`\n\n#### Writing\n\nWrite values:\n\n```js\npbf.writeVarint(123);\npbf.writeString(\"Hello world\");\n```\n\nWrite an embedded message:\n\n```js\npbf.writeMessage(1, writeObj, obj);\n\nfunction writeObj(obj, pbf) {\n pbf.writeStringField(obj.name);\n pbf.writeVarintField(obj.version);\n}\n```\n\nField writing methods:\n\n* `writeVarintField(tag, val)`\n* `writeSVarintField(tag, val)`\n* `writeFixed32Field(tag, val)`\n* `writeFixed64Field(tag, val)`\n* `writeSFixed32Field(tag, val)`\n* `writeSFixed64Field(tag, val)`\n* `writeBooleanField(tag, val)`\n* `writeFloatField(tag, val)`\n* `writeDoubleField(tag, val)`\n* `writeStringField(tag, val)`\n* `writeBytesField(tag, buffer)`\n\nPacked field writing methods:\n\n* `writePackedVarint(tag, val)`\n* `writePackedSVarint(tag, val)`\n* `writePackedSFixed32(tag, val)`\n* `writePackedSFixed64(tag, val)`\n* `writePackedBoolean(tag, val)`\n* `writePackedFloat(tag, val)`\n* `writePackedDouble(tag, val)`\n\nScalar writing methods:\n\n* `writeVarint(val)`\n* `writeSVarint(val)`\n* `writeSFixed32(val)`\n* `writeSFixed64(val)`\n* `writeBoolean(val)`\n* `writeFloat(val)`\n* `writeDouble(val)`\n* `writeString(val)`\n* `writeBytes(buffer)`\n\nMessage writing methods:\n\n* `writeMessage(tag, fn[, obj])`\n* `writeRawMessage(fn[, obj])`\n\nMisc methods:\n\n* `realloc(minBytes)` - pad the underlying buffer size to accommodate the given number of bytes;\n note that the size increases exponentially, so it won't necessarily equal the size of data written\n* `finish()` - make the current buffer ready for reading and return the data as a buffer slice\n* `destroy()` - dispose the buffer\n\nFor an example of a real-world usage of the library, see [vector-tile-js](https://github.com/mapbox/vector-tile-js).\n\n\n## Proto Schema to JavaScript\n\nIf installed globally, `pbf` provides a binary that compiles `proto` files into JavaScript modules. Usage:\n\n```bash\n$ pbf [--no-write] [--no-read] [--browser]\n```\n\nThe `--no-write` and `--no-read` switches remove corresponding code in the output.\nThe `--browser` switch makes the module work in browsers instead of Node.\n\nThe resulting module exports each message by name with the following methods:\n\n* `read(pbf)` - decodes an object from the given `Pbf` instance\n* `write(obj, pbf)` - encodes an object into the given `Pbf` instance (usually empty)\n\nThe resulting code is clean and simple, so feel free to customize it.\n\n## Changelog\n\n#### 3.0.5 (Nov 30, 2016)\n\n- Fixed an error appearing in some versions of IE11 and old Android browsers.\n\n#### 3.0.4 (Nov 14, 2016)\n\n- Fixed compiling repeated packed enum fields.\n\n#### 3.0.3 (Nov 14, 2016)\n\n- Fixed a regression that broke compiling repeated enum fields with defaults.\n\n#### 3.0.2 (Sep 30, 2016)\n\n- Fixed a regression that broke decoding of packed fields with a tag that didn't fit into one byte.\n\n#### 3.0.1 (Sep 20, 2016)\n\n- Fixed a regression that broke encoding of long strings.\n\n#### 3.0.0 (Aug 30, 2016)\n\nThis release include tons of compatibility/robustness fixes, and a more reliable Node implementation. Decoding performance is expected to get up to ~15% slower than v2.0 in Node (browsers are unaffected), but encoding got faster by ~15% in return.\n\n##### Encoder/decoder\n\n- **Breaking**: changed Node implementation to use `Uint8Array` instead of `Buffer` internally (and produce corresponding result on `finish()`), making it fully match the browser implementation for consistency and simplicity.\n- Fixed `writeVarint` to write `0` when given `NaN` or other non-number to avoid producing a broken Protobuf message.\n- Changed `readPacked*` methods signature to accept an optional `arr` argument to append the results to (to support messages with repeated fields that mix packed/non-packed encoding).\n- Added an optional `isSigned` argument to `readVarint` that enables proper reading of negative varints.\n- Deprecated `readVarint64()` (it still works, but it's recommended to be changed to `readVarint(true)`).\n- Faster string encoding.\n\n##### Proto compiler\n\n- **Breaking:** Full support for defaults field values (both implicit and explicit); they're now included in the decoded JSON objects.\n- Fixed reading of repeated fields with mixed packed/non-packed encoding for compatibility.\n- Fixed proto3 compiler to use packed by default for repeated scalar fields.\n- Fixed reading of negative varint types.\n- Fixed packed fields to decode into `[]` if they're not present.\n- Fixed nested message references handling.\n- Fixed `packed=false` being interpreted as packed.\n- Added a comment to generated code with pbf version number.\n\n#### 2.0.1 (May 28, 2016)\n\n- Fixed a regression with `writeVarint` that affected certain numbers.\n\n#### 2.0.0 (May 28, 2016)\n\n- Significantly improved the proto compiler, which now produces a much safer reading/writing code.\n- Added the ability to compile a read/write module from a protobuf schema directly in the code.\n- Proto compiler: fixed name resolutions and collisions in schemas with nested messages.\n- Proto compiler: fixed broken top-level enums.\n\n#### 1.3.7 (May 28, 2016)\n\n- Fixed a regression with `writeVarint` that affected certain numbers.\n\n#### 1.3.6 (May 27, 2016)\n\n- Improved read and write performance (both ~15% faster).\n- Improved generated code for default values.\n\n#### 1.3.5 (Oct 5, 2015)\n\n- Added support for `syntax` keyword proto files (by updating `resolve-protobuf-schema` dependency).\n\n#### 1.3.4 (Jul 31, 2015)\n\n- Added `writeRawMessage` method for writing a message without a tag, useful for creating pbfs with multiple top-level messages.\n\n#### 1.3.2 (Mar 5, 2015)\n\n- Added `readVarint64` method for proper decoding of negative `int64`-encoded values.\n\n#### 1.3.1 (Feb 20, 2015)\n\n- Fixed pbf proto compile tool generating broken writing code.\n\n#### 1.3.0 (Feb 5, 2015)\n\n- Added `pbf` binary that compiles `.proto` files into `Pbf`-based JavaScript modules.\n\n#### 1.2.0 (Jan 5, 2015)\n\n##### Breaking API changes\n\n- Changed `writeMessage` signature to `(tag, fn, obj)` (see example in the docs)\n for a huge encoding performance improvement.\n- Replaced `readPacked` and `writePacked` methods that accept type as a string\n with `readPackedVarint`, etc. for each type (better performance and simpler API).\n\n##### Improvements\n\n- 5x faster encoding in Node (vector tile benchmark).\n- 40x faster encoding and 3x faster decoding in the browser (vector tile benchmark).\n\n#### 1.1.4 (Jan 2, 2015)\n\n- Significantly improved `readPacked` and `writePacked` performance (the tile reading benchmark is now 70% faster).\n\n#### 1.1.3 (Dec 26, 2014)\n\nBrings tons of improvements and fixes over the previous version (`0.0.2`).\nBasically makes the library complete.\n\n##### Improvements\n\n- Improved performance of both reading and writing.\n- Made the browser build 3 times smaller.\n- Added convenience `readFields` and `readMessage` methods for a much easier reading API.\n- Added reading methods: `readFloat`, `readBoolean`, `readSFixed32`, `readSFixed64`.\n- Added writing methods: `writeUInt64`, `writeSFixed32`, `writeSFixed64`.\n- Improved `readDouble` and `readString` to use native Buffer methods under Node.\n- Improved `readString` and `writeString` to use HTML5 `TextEncoder` and `TextDecoder` where available.\n- Made `Pbf` `buffer` argument optional.\n- Added extensive docs and examples in the readme.\n- Added an extensive test suite that brings test coverage up to 100%.\n\n##### Breaking API changes\n\n- Renamed `readBuffer`/`writeBuffer` to `readBytes`/`writeBytes`.\n- Renamed `readUInt32`/`writeUInt32` to `readFixed32`/`writeFixed32`, etc.\n- Renamed `writeTaggedVarint` to `writeVarintField`, etc.\n- Changed `writePacked` signature from `(type, tag, items)` to `(tag, type, items)`.\n\n##### Bugfixes\n\n- Fixed `readVarint` to handle varints bigger than 6 bytes.\n- Fixed `readSVarint` to handle number bigger than `2^30`.\n- Fixed `writeVarint` failing on some integers.\n- Fixed `writeVarint` not throwing an error on numbers that are too big.\n- Fixed `readUInt64` always failing.\n- Fixed writing to an empty buffer always failing.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "ieee754": "^1.1.6", "resolve-protobuf-schema": "^2.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/pbf", "error": "[Circular]", "extraneous": false }, "pixelworks": { "_from": "pixelworks@1.1.0", "_id": "pixelworks@1.1.0", "_inBundle": false, "_integrity": "sha512-nDqeyp0pvOvCihLsyc9GHWKP4THUtcfQ+qs61uiVaZdlNv0j7y6PWNyPfnTtuxMJ+MTAqff2QbbM/1DyCcRdOQ==", "_location": "/pixelworks", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "pixelworks@1.1.0", "name": "pixelworks", "escapedName": "pixelworks", "rawSpec": "1.1.0", "saveSpec": "[Circular]", "fetchSpec": "1.1.0" }, "_requiredBy": [ "/ol" ], "_resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", "_shasum": "1f095ad48dca8bf8a1c8258e0092031a44f22ca5", "_spec": "pixelworks@1.1.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/ol", "bugs": { "url": "https://github.com/tschaub/pixelworks/issues" }, "deprecated": false, "description": "Utilities for working with ImageData in Workers", "devDependencies": { "browserify": "^13.0.0", "chai": "^3.5.0", "eslint": "^2.2.0", "eslint-config-tschaub": "^4.0.0", "karma": "^0.13.21", "karma-browserify": "^5.0.2", "karma-chrome-launcher": "^0.2.2", "karma-mocha": "^0.2.2", "karma-sauce-launcher": "^0.3.1", "mocha": "^2.4.5", "sinon": "^1.17.3", "watchify": "^3.7.0" }, "eslintConfig": { "extends": "tschaub", "globals": { "ImageData": false }, "rules": { "dot-notation": 0 } }, "homepage": "https://github.com/tschaub/pixelworks#readme", "license": "MIT", "main": "lib/index.js", "name": "pixelworks", "repository": { "type": "git", "url": "git://github.com/tschaub/pixelworks.git" }, "scripts": { "bundle": "mkdir -p dist && browserify lib/index.js --standalone pixelworks > dist/pixelworks.js", "prepublish": "npm run bundle", "pretest": "eslint lib test examples", "start": "karma start test/karma.conf.js", "test": "karma start test/karma.conf.js --single-run" }, "version": "1.1.0", "readme": "# **pixelworks**\n\nUtilities for working with [`ImageData`](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) in [`Workers`](https://developer.mozilla.org/en-US/docs/Web/API/Worker/Worker).\n\n## Install\n\nThe `pixelworks` package is meant to be used in a browser with a CommonJS module loader (e.g. [Browserify](http://browserify.org/) or [Webpack](http://webpack.github.io/)). Add it as a dependency to your project with `npm`:\n\n npm install pixelworks\n\n## Use\n\n var pixelworks = require('pixelworks');\n\nThe package also comes with a standalone build in the `dist` directory that can be added to a page with a script tag. If a module loader is not present, this script will make a global `pixelworks` object available.\n\n## API\n\n### `new Processor(options)`\n\nA processor runs pixel or image operations in workers.\n\n var processor = new pixelworks.Processor(options);\n\n#### Supported options\n\n * `imageOps : boolean` - By default, operations will be called for each pixel. By setting `imageOps: true`, operations will be called with an `ImageData` object.\n\n * `operation : Function` - A function that processes input data and returns output data. The operation will be called with two arguments: an array of inputs, and a user storage object. By default, operations will be called for each pixel in the input data, and the first argument is an array of input pixels (each a `[R, G, B, A]` array). If `imageOps` is `false`, the first argument will be an array of `ImageData` objects. The second object is the user storage object passed to the `process` method.\n\n Operations return processed output data. For pixel-wise operations, this must be an output pixel (a `[R, G, B, A]` array). For image operations, this must be an `ImageData` object.\n\n Because operations run in workers, they must only operate on the arguments they are given.\n\n * `lib : Object` - An optional lookup of functions that can be accessed by an operation run in a worker. Because operations are run in workers, they cannot access functions from the scope where they are authored. The `lib` object can be used to pass additional library functions that are made available in the worker scope. For example, if `{lib: {someFunc: function() {/* do something */}}}` were provided, the operation could call `someFunc()`.\n\n * `threads : number` - Pixel-wise operations can be run in parallel in multiple worker threads. By default, a single worker thread is created for running operations. Setting `threads: 2` would process half of the input pixels in one thread and half in another. For image type operations, `threads` cannot be greater than `1`. If you want to force operations to run in the main (UI) thread, set `threads: 0`.\n\n * `queue : number` - Maximum queue length. This limits the number of pending workers when `process` is called multiple times before work completes. If you want to call `process` many times (in response to user generated events for example), set `queue: 1`, and only one worker will be pending at a time.\n\n### `processor.process(inputs, meta, callback)`\n\nRun the operation on an array of input image data.\n\n * `inputs : Array.` - Array of pixels or image data (depending on the operation type).\n * `meta : Object` - A user data object. This is passed to all operations and must be serializable.\n * `callback : function(Error, ImageData, Object)` - Called when work completes. The first argument is any error. The second is the `ImageData` generated by the operation. The third is the user data object. When `process` is called repeatedly, a queue of pending workers will be generated. If this queue exceeds the maximum `queue` length, workers will be removed from the queue and the callback will be called with `null` for the second `ImageData` argument.\n\n### `processor.destroy()`\n\nStop responding to any completed work and destroy the processor.\n\n\n[![Current Status](https://secure.travis-ci.org/tschaub/pixelworks.svg?branch=master)](https://travis-ci.org/tschaub/pixelworks)\n", "readmeFilename": "readme.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/pixelworks", "error": "[Circular]", "extraneous": false }, "rbush": { "_from": "rbush@2.0.2", "_id": "rbush@2.0.2", "_inBundle": false, "_integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", "_location": "/rbush", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "rbush@2.0.2", "name": "rbush", "escapedName": "rbush", "rawSpec": "2.0.2", "saveSpec": "[Circular]", "fetchSpec": "2.0.2" }, "_requiredBy": [ "/ol" ], "_resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", "_shasum": "bb6005c2731b7ba1d5a9a035772927d16a614605", "_spec": "rbush@2.0.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/ol", "author": { "name": "Vladimir Agafonkin" }, "bugs": { "url": "https://github.com/mourner/rbush/issues" }, "dependencies": { "quickselect": { "_from": "quickselect@^1.0.1", "_id": "quickselect@1.1.1", "_inBundle": false, "_integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==", "_location": "/quickselect", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "quickselect@^1.0.1", "name": "quickselect", "escapedName": "quickselect", "rawSpec": "^1.0.1", "saveSpec": "[Circular]", "fetchSpec": "^1.0.1" }, "_requiredBy": [ "/rbush" ], "_resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", "_shasum": "852e412ce418f237ad5b660d70cffac647ae94c2", "_spec": "quickselect@^1.0.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/rbush", "author": { "name": "Vladimir Agafonkin" }, "dependencies": {}, "deprecated": false, "description": "A tiny and fast selection algorithm in JavaScript.", "devDependencies": { "eslint": "^4.19.1", "eslint-config-mourner": "^2.0.3", "esm": "^3.0.15", "rollup": "^0.57.1", "tape": "^4.9.0" }, "eslintConfig": { "extends": "mourner", "parserOptions": { "sourceType": "module" } }, "files": [ "index.js", "quickselect.js" ], "keywords": [ "selection", "algorithm", "quickselect", "sort", "partial", "floyd", "rivest" ], "license": "ISC", "main": "quickselect.js", "name": "quickselect", "scripts": { "bench": "node -r esm bench.js", "build": "rollup -c", "prepublishOnly": "npm run build", "pretest": "eslint index.js test.js bench.js", "test": "node -r esm test.js" }, "version": "1.1.1", "readme": "## quickselect [![Build Status](https://travis-ci.org/mourner/quickselect.svg?branch=master)](https://travis-ci.org/mourner/quickselect)\n\nA tiny and fast [selection algorithm](https://en.wikipedia.org/wiki/Selection_algorithm) in JavaScript\n(specifically, [Floyd-Rivest selection](https://en.wikipedia.org/wiki/Floyd%E2%80%93Rivest_algorithm)).\n\n```js\nquickselect(array, k[, left, right, compareFn]);\n```\n\nRearranges items so that all items in the `[left, k]` are the smallest.\nThe `k`-th element will have the `(k - left + 1)`-th smallest value in `[left, right]`.\n\n- `array`: the array to partially sort (in place)\n- `k`: middle index for partial sorting (as defined above)\n- `left`: left index of the range to sort (`0` by default)\n- `right`: right index (last index of the array by default)\n- `compareFn`: compare function\n\nExample:\n\n```js\nvar arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];\n\nquickselect(arr, 8);\n\n// arr is [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]\n// ^^ middle index\n```\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/quickselect", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "High-performance 2D spatial index for rectangles (based on R*-tree with bulk loading and bulk insertion algorithms)", "devDependencies": { "benchmark": "^2.1.4", "browserify": "^14.5.0", "eslint": "^4.13.1", "eslint-config-mourner": "^2.0.3", "faucet": "0.0.1", "istanbul": "~0.4.5", "tape": "^4.8.0", "uglify-js": "^3.2.2" }, "eslintConfig": { "extends": "mourner", "rules": { "new-cap": 0, "consistent-return": 0 } }, "files": [ "rbush.js", "rbush.min.js" ], "homepage": "https://github.com/mourner/rbush", "jsdelivr": "rbush.js", "keywords": [ "spatial", "tree", "search", "rectangle", "index", "math" ], "license": "MIT", "main": "index.js", "name": "rbush", "repository": { "type": "git", "url": "git://github.com/mourner/rbush.git" }, "scripts": { "build": "browserify index.js -s rbush -o rbush.js", "build-min": "browserify index.js -s rbush | uglifyjs -c warnings=false -m > rbush.min.js", "cov": "istanbul cover test/test.js -x test/test.js", "perf": "node ./bench/perf.js", "prepare": "npm run build && npm run build-min", "test": "eslint index.js test/test.js && node test/test.js | faucet" }, "unpkg": "rbush.js", "version": "2.0.2", "readme": "RBush\n=====\n\nRBush is a high-performance JavaScript library for 2D **spatial indexing** of points and rectangles.\nIt's based on an optimized **R-tree** data structure with **bulk insertion** support.\n\n*Spatial index* is a special data structure for points and rectangles\nthat allows you to perform queries like \"all items within this bounding box\" very efficiently\n(e.g. hundreds of times faster than looping over all items).\nIt's most commonly used in maps and data visualizations.\n\n[![Build Status](https://travis-ci.org/mourner/rbush.svg?branch=master)](https://travis-ci.org/mourner/rbush)\n[![](https://img.shields.io/badge/simply-awesome-brightgreen.svg)](https://github.com/mourner/projects)\n\n## Demos\n\nThe demos contain visualization of trees generated from 50k bulk-loaded random points.\nOpen web console to see benchmarks;\nclick on buttons to insert or remove items;\nclick to perform search under the cursor.\n\n* [randomly clustered data](http://mourner.github.io/rbush/viz/viz-cluster.html)\n* [uniformly distributed random data](http://mourner.github.io/rbush/viz/viz-uniform.html)\n\n## Install\n\nInstall with NPM (`npm install rbush`), or use CDN links for browsers:\n[rbush.js](https://unpkg.com/rbush@2.0.1/rbush.js),\n[rbush.min.js](https://unpkg.com/rbush@2.0.1/rbush.min.js)\n\n## Usage\n\n### Creating a Tree\n\n```js\nvar tree = rbush();\n```\n\nAn optional argument to `rbush` defines the maximum number of entries in a tree node.\n`9` (used by default) is a reasonable choice for most applications.\nHigher value means faster insertion and slower search, and vice versa.\n\n```js\nvar tree = rbush(16);\n```\n\n### Adding Data\n\nInsert an item:\n\n```js\nvar item = {\n minX: 20,\n minY: 40,\n maxX: 30,\n maxY: 50,\n foo: 'bar'\n};\ntree.insert(item);\n```\n\n### Removing Data\n\nRemove a previously inserted item:\n\n```js\ntree.remove(item);\n```\n\nBy default, RBush removes objects by reference.\nHowever, you can pass a custom `equals` function to compare by value for removal,\nwhich is useful when you only have a copy of the object you need removed (e.g. loaded from server):\n\n```js\ntree.remove(itemCopy, function (a, b) {\n return a.id === b.id;\n});\n```\n\nRemove all items:\n\n```js\ntree.clear();\n```\n\n### Data Format\n\nBy default, RBush assumes the format of data points to be an object\nwith `minX`, `minY`, `maxX` and `maxY` properties.\nYou can customize this by providing an array with corresponding accessor strings\nas a second argument to `rbush` like this:\n\n```js\nvar tree = rbush(9, ['[0]', '[1]', '[0]', '[1]']); // accept [x, y] points\ntree.insert([20, 50]);\n```\n\nIf you're indexing a static list of points (you don't need to add/remove points after indexing), you should use [kdbush](https://github.com/mourner/kdbush) which performs point indexing 5-8x faster than RBush.\n\n### Bulk-Inserting Data\n\nBulk-insert the given data into the tree:\n\n```js\ntree.load([item1, item2, ...]);\n```\n\nBulk insertion is usually ~2-3 times faster than inserting items one by one.\nAfter bulk loading (bulk insertion into an empty tree),\nsubsequent query performance is also ~20-30% better.\n\nNote that when you do bulk insertion into an existing tree,\nit bulk-loads the given data into a separate tree\nand inserts the smaller tree into the larger tree.\nThis means that bulk insertion works very well for clustered data\n(where items in one update are close to each other),\nbut makes query performance worse if the data is scattered.\n\n### Search\n\n```js\nvar result = tree.search({\n minX: 40,\n minY: 20,\n maxX: 80,\n maxY: 70\n});\n```\n\nReturns an array of data items (points or rectangles) that the given bounding box intersects.\n\nNote that the `search` method accepts a bounding box in `{minX, minY, maxX, maxY}` format\nregardless of the format specified in the constructor (which only affects inserted objects).\n\n```js\nvar allItems = tree.all();\n```\n\nReturns all items of the tree.\n\n### Collisions\n\n```js\nvar result = tree.collides({minX: 40, minY: 20, maxX: 80, maxY: 70});\n```\n\nReturns `true` if there are any items intersecting the given bounding box, otherwise `false`.\n\n\n### Export and Import\n\n```js\n// export data as JSON object\nvar treeData = tree.toJSON();\n\n// import previously exported data\nvar tree = rbush(9).fromJSON(treeData);\n```\n\nImporting and exporting as JSON allows you to use RBush on both the server (using Node.js) and the browser combined,\ne.g. first indexing the data on the server and and then importing the resulting tree data on the client for searching.\n\nNote that the `nodeSize` option passed to the constructor must be the same in both trees for export/import to work properly.\n\n### K-Nearest Neighbors\n\nFor \"_k_ nearest neighbors around a point\" type of queries for RBush,\ncheck out [rbush-knn](https://github.com/mourner/rbush-knn).\n\n## Performance\n\nThe following sample performance test was done by generating\nrandom uniformly distributed rectangles of ~0.01% area and setting `maxEntries` to `16`\n(see `debug/perf.js` script).\nPerformed with Node.js v6.2.2 on a Retina Macbook Pro 15 (mid-2012).\n\nTest | RBush | [old RTree](https://github.com/imbcmdth/RTree) | Improvement\n---------------------------- | ------ | ------ | ----\ninsert 1M items one by one | 3.18s | 7.83s | 2.5x\n1000 searches of 0.01% area | 0.03s | 0.93s | 30x\n1000 searches of 1% area | 0.35s | 2.27s | 6.5x\n1000 searches of 10% area | 2.18s | 9.53s | 4.4x\nremove 1000 items one by one | 0.02s | 1.18s | 50x\nbulk-insert 1M items | 1.25s | n/a | 6.7x\n\n## Algorithms Used\n\n* single insertion: non-recursive R-tree insertion with overlap minimizing split routine from R\\*-tree (split is very effective in JS, while other R\\*-tree modifications like reinsertion on overflow and overlap minimizing subtree search are too slow and not worth it)\n* single deletion: non-recursive R-tree deletion using depth-first tree traversal with free-at-empty strategy (entries in underflowed nodes are not reinserted, instead underflowed nodes are kept in the tree and deleted only when empty, which is a good compromise of query vs removal performance)\n* bulk loading: OMT algorithm (Overlap Minimizing Top-down Bulk Loading) combined with Floyd–Rivest selection algorithm\n* bulk insertion: STLT algorithm (Small-Tree-Large-Tree)\n* search: standard non-recursive R-tree search\n\n## Papers\n\n* [R-trees: a Dynamic Index Structure For Spatial Searching](http://www-db.deis.unibo.it/courses/SI-LS/papers/Gut84.pdf)\n* [The R*-tree: An Efficient and Robust Access Method for Points and Rectangles+](http://dbs.mathematik.uni-marburg.de/publications/myPapers/1990/BKSS90.pdf)\n* [OMT: Overlap Minimizing Top-down Bulk Loading Algorithm for R-tree](http://ftp.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-74/files/FORUM_18.pdf)\n* [Bulk Insertions into R-Trees Using the Small-Tree-Large-Tree Approach](http://www.cs.arizona.edu/~bkmoon/papers/dke06-bulk.pdf)\n* [R-Trees: Theory and Applications (book)](http://www.apress.com/9781852339777)\n\n## Development\n\n```bash\nnpm install # install dependencies\n\nnpm test # check the code with JSHint and run tests\nnpm run perf # run performance benchmarks\nnpm run cov # report test coverage (with more detailed report in coverage/lcov-report/index.html)\n```\n\n## Compatibility\n\nRBush should run on Node and all major browsers. The only caveat: IE 8 needs an [Array#indexOf polyfill](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf#Polyfill) for `remove` method to work.\n\n## Changelog\n\n#### 2.0.1 — June 29, 2016\n\n- Fixed browser builds in NPM.\n\n#### 2.0.0 — June 29, 2016\n\n- **Breaking:** changed the default format of inserted items from `[20, 40, 30, 50]` to `{minX: 20, minY: 40, maxX: 30, maxY: 50}`.\n- **Breaking:** changed the `search` method argument format from `[20, 40, 30, 50]` to `{minX: 20, minY: 40, maxX: 30, maxY: 50}`.\n- Improved performance by up to 30%.\n- Added `equalsFn` optional argument to `remove` to be able to remove by value rather than by reference.\n- Changed the source code to use CommonJS module format. Browser builds are automatically built and published to NPM.\n- Quickselect algorithm (used internally) is now a [separate module](https://github.com/mourner/quickselect).\n\n#### 1.4.3 — May 17, 2016\n\n- Fixed an error when inserting many empty bounding boxes.\n\n#### 1.4.2 — Dec 16, 2015\n\n- 50% faster insertion.\n\n#### 1.4.1 — Sep 16, 2015\n\n- Fixed insertion in IE8.\n\n#### 1.4.0 — Apr 22, 2015\n\n- Added `collides` method for fast collision detection.\n\n#### 1.3.4 — Aug 31, 2014\n\n- Improved bulk insertion performance for a large number of items (e.g. up to 100% for inserting a million items).\n- Fixed performance regression for high node sizes.\n\n#### 1.3.3 — Aug 30, 2014\n\n- Improved bulk insertion performance by ~60-70%.\n- Improved insertion performance by ~40%.\n- Improved search performance by ~30%.\n\n#### 1.3.2 — Nov 25, 2013\n\n- Improved removal performance by ~50%. [#18](https://github.com/mourner/rbush/pull/18)\n\n#### 1.3.1 — Nov 24, 2013\n\n- Fixed minor error in the choose split axis algorithm. [#17](https://github.com/mourner/rbush/pull/17)\n- Much better test coverage (near 100%). [#6](https://github.com/mourner/rbush/issues/6)\n\n#### 1.3.0 — Nov 21, 2013\n\n- Significantly improved search performance (especially on large-bbox queries — up to 3x faster). [#11](https://github.com/mourner/rbush/pull/11)\n- Added `all` method for getting all of the tree items. [#11](https://github.com/mourner/rbush/pull/11)\n- Made `toBBox`, `compareMinX`, `compareMinY` methods public, made it possible to avoid Content Security Policy issues by overriding them for custom format. [#14](https://github.com/mourner/rbush/pull/14) [#12](https://github.com/mourner/rbush/pull/12)\n\n#### 1.2.5 — Nov 5, 2013\n\n- Fixed a bug where insertion failed on a tree that had all items removed previously. [#10](https://github.com/mourner/rbush/issues/10)\n\n#### 1.2.4 — Oct 25, 2013\n\n- Added Web Workers support. [#9](https://github.com/mourner/rbush/pull/9)\n\n#### 1.2.3 — Aug 30, 2013\n\n- Added AMD support. [#8](https://github.com/mourner/rbush/pull/8)\n\n#### 1.2.2 — Aug 27, 2013\n\n- Eliminated recursion when recalculating node bboxes (on insert, remove, load).\n\n#### 1.2.0 — Jul 19, 2013\n\nFirst fully functional RBush release.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "quickselect": "^1.0.1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/rbush", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "OpenLayers mapping library", "homepage": "https://openlayers.org/", "keywords": [ "map", "mapping", "ol" ], "license": "BSD-2-Clause", "main": "index.js", "name": "ol", "repository": { "type": "git", "url": "git://github.com/openlayers/openlayers.git" }, "sideEffects": [ "proj.js", "ol.css" ], "version": "5.3.3", "readme": "# OpenLayers\n\n[OpenLayers](https://openlayers.org/) is a high-performance, feature-packed library for creating interactive maps on the web. It can display map tiles, vector data and markers loaded from any source on any web page. OpenLayers has been developed to further the use of geographic information of all kinds. It is completely free, Open Source JavaScript, released under the 2-clause BSD License (also known as the FreeBSD).\n\n## Getting Started\n\nInstall the [`ol` package](https://www.npmjs.com/package/ol):\n\n```\nnpm install ol\n```\n\nImport just what you need for your application:\n\n```js\nimport Map from 'ol/Map';\nimport View from 'ol/View';\nimport TileLayer from 'ol/layer/Tile';\nimport XYZ from 'ol/source/XYZ';\n\nnew Map({\n target: 'map',\n layers: [\n new TileLayer({\n source: new XYZ({\n url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'\n })\n })\n ],\n view: new View({\n center: [0, 0],\n zoom: 2\n })\n});\n```\n\nSee the following examples for more detail on bundling OpenLayers with your application:\n\n * Using [Rollup](https://github.com/openlayers/ol-rollup)\n * Using [Webpack](https://github.com/openlayers/ol-webpack)\n * Using [Parcel](https://github.com/openlayers/ol-parcel)\n * Using [Browserify](https://github.com/openlayers/ol-browserify)\n\n## Supported Browsers\n\nOpenLayers runs on all modern browsers that support [HTML5](https://html.spec.whatwg.org/multipage/) and [ECMAScript 5](http://www.ecma-international.org/ecma-262/5.1/). This includes Chrome, Firefox, Safari and Edge. For older browsers and platforms like Internet Explorer (down to version 9) and Android 4.x, [polyfills](http://polyfill.io) for `requestAnimationFrame` and `Element.prototype.classList` are required, and using the KML format requires a polyfill for `URL`.\n\n## Documentation\n\nCheck out the [hosted examples](https://openlayers.org/en/latest/examples/), the [workshop](https://openlayers.org/workshop/) or the [API documentation](https://openlayers.org/en/latest/apidoc/).\n\n## Bugs\n\nPlease use the [GitHub issue tracker](https://github.com/openlayers/openlayers/issues) for all bugs and feature requests. Before creating a new issue, do a quick search to see if the problem has been reported already.\n\n## Contributing\n\nPlease see our guide on [contributing](CONTRIBUTING.md) if you're interested in getting involved.\n\n## Community\n\n- Need help? Find it on [Stack Overflow using the tag 'openlayers'](http://stackoverflow.com/questions/tagged/openlayers)\n- Follow [@openlayers](https://twitter.com/openlayers) on Twitter\n\n[![Build Status](https://travis-ci.org/openlayers/openlayers.svg?branch=master)](https://travis-ci.org/openlayers/openlayers)\n", "readmeFilename": "README.md", "devDependencies": {}, "optionalDependencies": {}, "_dependencies": { "pbf": "3.1.0", "pixelworks": "1.1.0", "rbush": "2.0.2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/ol", "error": "[Circular]", "extraneous": false }, "pako": { "_from": "pako@^1.0.10", "_id": "pako@1.0.11", "_inBundle": false, "_integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "_location": "/pako", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "pako@^1.0.10", "name": "pako", "escapedName": "pako", "rawSpec": "^1.0.10", "saveSpec": "[Circular]", "fetchSpec": "^1.0.10" }, "_requiredBy": [ "/", "/hdr-histogram-js" ], "_resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "_shasum": "6c9599d340d54dfd3946380252a35705a6b992bf", "_spec": "pako@^1.0.10", "_where": "/builds/gitlab/osm/ng-ui", "bugs": { "url": "https://github.com/nodeca/pako/issues" }, "contributors": [ { "name": "Andrei Tuputcyn", "url": "https://github.com/andr83" }, { "name": "Vitaly Puzrin", "url": "https://github.com/puzrin" }, { "name": "Friedel Ziegelmayer", "url": "https://github.com/dignifiedquire" }, { "name": "Kirill Efimov", "url": "https://github.com/Kirill89" }, { "name": "Jean-loup Gailly" }, { "name": "Mark Adler" } ], "dependencies": {}, "deprecated": false, "description": "zlib port to javascript - fast, modularized, with browser support", "devDependencies": { "ansi": "^0.3.1", "benchmark": "^2.1.4", "browserify": "^16.2.3", "buffer-from": "^1.1.1", "eslint": "^5.9.0", "istanbul": "^0.4.5", "mocha": "^5.2.0", "multiparty": "^4.1.3", "ndoc": "^5.0.1", "uglify-js": "=3.4.8", "zlibjs": "^0.3.1" }, "files": [ "index.js", "dist/", "lib/" ], "homepage": "https://github.com/nodeca/pako", "keywords": [ "zlib", "deflate", "inflate", "gzip" ], "license": "(MIT AND Zlib)", "name": "pako", "repository": { "type": "git", "url": "git+https://github.com/nodeca/pako.git" }, "scripts": { "test": "make test" }, "version": "1.0.11", "readme": "pako\n==========================================\n\n[![Build Status](https://travis-ci.org/nodeca/pako.svg?branch=master)](https://travis-ci.org/nodeca/pako)\n[![NPM version](https://img.shields.io/npm/v/pako.svg)](https://www.npmjs.org/package/pako)\n\n> zlib port to javascript, very fast!\n\n__Why pako is cool:__\n\n- Almost as fast in modern JS engines as C implementation (see benchmarks).\n- Works in browsers, you can browserify any separate component.\n- Chunking support for big blobs.\n- Results are binary equal to well known [zlib](http://www.zlib.net/) (now contains ported zlib v1.2.8).\n\nThis project was done to understand how fast JS can be and is it necessary to\ndevelop native C modules for CPU-intensive tasks. Enjoy the result!\n\n\n__Famous projects, using pako:__\n\n- [browserify](http://browserify.org/) (via [browserify-zlib](https://github.com/devongovett/browserify-zlib))\n- [JSZip](http://stuk.github.io/jszip/)\n- [mincer](https://github.com/nodeca/mincer)\n- [JS-Git](https://github.com/creationix/js-git) and\n [Tedit](https://chrome.google.com/webstore/detail/tedit-development-environ/ooekdijbnbbjdfjocaiflnjgoohnblgf)\n by [@creationix](https://github.com/creationix)\n\n\n__Benchmarks:__\n\n```\nnode v0.10.26, 1mb sample:\n\n deflate-dankogai x 4.73 ops/sec ±0.82% (15 runs sampled)\n deflate-gildas x 4.58 ops/sec ±2.33% (15 runs sampled)\n deflate-imaya x 3.22 ops/sec ±3.95% (12 runs sampled)\n ! deflate-pako x 6.99 ops/sec ±0.51% (21 runs sampled)\n deflate-pako-string x 5.89 ops/sec ±0.77% (18 runs sampled)\n deflate-pako-untyped x 4.39 ops/sec ±1.58% (14 runs sampled)\n * deflate-zlib x 14.71 ops/sec ±4.23% (59 runs sampled)\n inflate-dankogai x 32.16 ops/sec ±0.13% (56 runs sampled)\n inflate-imaya x 30.35 ops/sec ±0.92% (53 runs sampled)\n ! inflate-pako x 69.89 ops/sec ±1.46% (71 runs sampled)\n inflate-pako-string x 19.22 ops/sec ±1.86% (49 runs sampled)\n inflate-pako-untyped x 17.19 ops/sec ±0.85% (32 runs sampled)\n * inflate-zlib x 70.03 ops/sec ±1.64% (81 runs sampled)\n\nnode v0.11.12, 1mb sample:\n\n deflate-dankogai x 5.60 ops/sec ±0.49% (17 runs sampled)\n deflate-gildas x 5.06 ops/sec ±6.00% (16 runs sampled)\n deflate-imaya x 3.52 ops/sec ±3.71% (13 runs sampled)\n ! deflate-pako x 11.52 ops/sec ±0.22% (32 runs sampled)\n deflate-pako-string x 9.53 ops/sec ±1.12% (27 runs sampled)\n deflate-pako-untyped x 5.44 ops/sec ±0.72% (17 runs sampled)\n * deflate-zlib x 14.05 ops/sec ±3.34% (63 runs sampled)\n inflate-dankogai x 42.19 ops/sec ±0.09% (56 runs sampled)\n inflate-imaya x 79.68 ops/sec ±1.07% (68 runs sampled)\n ! inflate-pako x 97.52 ops/sec ±0.83% (80 runs sampled)\n inflate-pako-string x 45.19 ops/sec ±1.69% (57 runs sampled)\n inflate-pako-untyped x 24.35 ops/sec ±2.59% (40 runs sampled)\n * inflate-zlib x 60.32 ops/sec ±1.36% (69 runs sampled)\n```\n\nzlib's test is partially affected by marshalling (that make sense for inflate only).\nYou can change deflate level to 0 in benchmark source, to investigate details.\nFor deflate level 6 results can be considered as correct.\n\n__Install:__\n\nnode.js:\n\n```\nnpm install pako\n```\n\nbrowser:\n\n```\nbower install pako\n```\n\n\nExample & API\n-------------\n\nFull docs - http://nodeca.github.io/pako/\n\n```javascript\nvar pako = require('pako');\n\n// Deflate\n//\nvar input = new Uint8Array();\n//... fill input data here\nvar output = pako.deflate(input);\n\n// Inflate (simple wrapper can throw exception on broken stream)\n//\nvar compressed = new Uint8Array();\n//... fill data to uncompress here\ntry {\n var result = pako.inflate(compressed);\n} catch (err) {\n console.log(err);\n}\n\n//\n// Alternate interface for chunking & without exceptions\n//\n\nvar inflator = new pako.Inflate();\n\ninflator.push(chunk1, false);\ninflator.push(chunk2, false);\n...\ninflator.push(chunkN, true); // true -> last chunk\n\nif (inflator.err) {\n console.log(inflator.msg);\n}\n\nvar output = inflator.result;\n\n```\n\nSometime you can wish to work with strings. For example, to send\nbig objects as json to server. Pako detects input data type. You can\nforce output to be string with option `{ to: 'string' }`.\n\n```javascript\nvar pako = require('pako');\n\nvar test = { my: 'super', puper: [456, 567], awesome: 'pako' };\n\nvar binaryString = pako.deflate(JSON.stringify(test), { to: 'string' });\n\n//\n// Here you can do base64 encode, make xhr requests and so on.\n//\n\nvar restored = JSON.parse(pako.inflate(binaryString, { to: 'string' }));\n```\n\n\nNotes\n-----\n\nPako does not contain some specific zlib functions:\n\n- __deflate__ - methods `deflateCopy`, `deflateBound`, `deflateParams`,\n `deflatePending`, `deflatePrime`, `deflateTune`.\n- __inflate__ - methods `inflateCopy`, `inflateMark`,\n `inflatePrime`, `inflateGetDictionary`, `inflateSync`, `inflateSyncPoint`, `inflateUndermine`.\n- High level inflate/deflate wrappers (classes) may not support some flush\n modes. Those should work: Z_NO_FLUSH, Z_FINISH, Z_SYNC_FLUSH.\n\n\npako for enterprise\n-------------------\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of pako and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-pako?utm_source=npm-pako&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n\nAuthors\n-------\n\n- Andrey Tupitsin [@anrd83](https://github.com/andr83)\n- Vitaly Puzrin [@puzrin](https://github.com/puzrin)\n\nPersonal thanks to:\n\n- Vyacheslav Egorov ([@mraleph](https://github.com/mraleph)) for his awesome\n tutorials about optimising JS code for v8, [IRHydra](http://mrale.ph/irhydra/)\n tool and his advices.\n- David Duponchel ([@dduponchel](https://github.com/dduponchel)) for help with\n testing.\n\nOriginal implementation (in C):\n\n- [zlib](http://zlib.net/) by Jean-loup Gailly and Mark Adler.\n\n\nLicense\n-------\n\n- MIT - all files, except `/lib/zlib` folder\n- ZLIB - `/lib/zlib` content\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/pako", "error": "[Circular]", "extraneous": false }, "roboto-fontface": { "_from": "roboto-fontface@^0.10.0", "_id": "roboto-fontface@0.10.0", "_inBundle": false, "_integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==", "_location": "/roboto-fontface", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "roboto-fontface@^0.10.0", "name": "roboto-fontface", "escapedName": "roboto-fontface", "rawSpec": "^0.10.0", "saveSpec": "[Circular]", "fetchSpec": "^0.10.0" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", "_shasum": "7eee40cfa18b1f7e4e605eaf1a2740afb6fd71b0", "_spec": "roboto-fontface@^0.10.0", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Christian Hoffmeister", "email": "mail@choffmeister.de", "url": "http://choffmeister.de/" }, "bugs": { "url": "https://github.com/choffmeister/roboto-fontface-bower/issues" }, "deprecated": false, "description": "A simple package providing the Roboto fontface.", "devDependencies": { "less": "2.7.1", "node-sass": "3.8.0" }, "homepage": "https://github.com/choffmeister/roboto-fontface-bower", "keywords": [ "roboto", "font", "fontface" ], "license": "Apache-2.0", "main": "css/roboto/roboto-fontface.css", "name": "roboto-fontface", "repository": { "type": "git", "url": "git+https://github.com/choffmeister/roboto-fontface-bower.git" }, "scripts": { "test": "./test.sh" }, "version": "0.10.0", "readme": "# Roboto fontface\n\nA simple package providing the [Roboto](http://www.google.com/fonts/specimen/Roboto) fontface. The font was created by [Christian Robertson](https://plus.google.com/110879635926653430880/about).\n\n## Installing\n\nAssuming you have [NodeJS](http://nodejs.org/), [NPM](https://www.npmjs.com/) and [Bower](http://bower.io/) installed globally just open up a terminal, navigate to your projects root directory and then execute\n\n```\n# install via NPM\n$ npm install roboto-fontface --save\n\n# install via Bower\n$ bower install roboto-fontface --save\n```\n\n\n## Usage\n\nThere're several files in the `css/` subdirectory. Import them in your project\nto have access to \"Roboto\" font face:\n\n* `css/roboto/roboto-fontface.css` - whole font family compiled to CSS\n* `css/roboto/sass/roboto-fontface.scss` - whole font family in SCSS\n* `css/roboto/less/roboto-fontface.less` - whole font family in LESS\n\n* `css/roboto-condensed/roboto-condensed-fontface.css` - whole font family compiled to CSS\n* `css/roboto-condensed/sass/roboto-condensed-fontface.scss` - whole font family in SCSS\n* `css/roboto-condensed/less/roboto-condensed-fontface.less` - whole font family in LESS\n\n* `css/roboto-slab/roboto-slab-fontface.css` - whole font family compiled to CSS\n* `css/roboto-slab/sass/roboto-slab-fontface.scss` - whole font family in SCSS\n* `css/roboto-slab/less/roboto-slab-fontface.less` - whole font family in LESS\n\nImporting whole family may be unnecessary and lead to huge build, so if you are\nusing SCSS or LESS, you can import only individual weights by importing for example:\n\n* `css/roboto/sass/roboto-fontface-black.scss`\n* `css/roboto/sass/roboto-fontface-black-italic.scss`\n\n## Hinting\n\nSome of the included font files have [hinting](http://en.wikipedia.org/wiki/Font_hinting).\n\n| Files | Hinting |\n|----------|---------|\n| `.woff` | yes |\n| `.woff2` | ? |\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/roboto-fontface", "error": "[Circular]", "extraneous": false }, "rxjs": { "_from": "rxjs@^6.5.4", "_id": "rxjs@6.6.7", "_inBundle": false, "_integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "_location": "/rxjs", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "rxjs@^6.5.4", "name": "rxjs", "escapedName": "rxjs", "rawSpec": "^6.5.4", "saveSpec": "[Circular]", "fetchSpec": "^6.5.4" }, "_requiredBy": [ "/", "/@angular-devkit/architect", "/@angular-devkit/build-angular", "/@angular-devkit/build-webpack", "/@angular-devkit/core", "/@angular-devkit/schematics", "/@cypress/schematic", "/@nrwl/devkit", "/@nrwl/tao" ], "_resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "_shasum": "90ac018acabf491bf65044235d5863c4dab804c9", "_spec": "rxjs@^6.5.4", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Ben Lesh", "email": "ben@benlesh.com" }, "bugs": { "url": "https://github.com/ReactiveX/RxJS/issues" }, "config": { "commitizen": { "path": "cz-conventional-changelog" } }, "contributors": [ { "name": "Ben Lesh", "email": "ben@benlesh.com" }, { "name": "Paul Taylor", "email": "paul.e.taylor@me.com" }, { "name": "Jeff Cross", "email": "crossj@google.com" }, { "name": "Matthew Podwysocki", "email": "matthewp@microsoft.com" }, { "name": "OJ Kwon", "email": "kwon.ohjoong@gmail.com" }, { "name": "Andre Staltz", "email": "andre@staltz.com" } ], "dependencies": { "tslib": { "_from": "tslib@^1.9.0", "_id": "tslib@1.14.1", "_inBundle": false, "_integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "_location": "/rxjs/tslib", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "tslib@^1.9.0", "name": "tslib", "escapedName": "tslib", "rawSpec": "^1.9.0", "saveSpec": "[Circular]", "fetchSpec": "^1.9.0" }, "_requiredBy": [ "/rxjs" ], "_resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "_shasum": "cf2d38bdc34a134bcaf1091c41f6619e2f672d00", "_spec": "tslib@^1.9.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/rxjs", "author": { "name": "Microsoft Corp." }, "bugs": { "url": "https://github.com/Microsoft/TypeScript/issues" }, "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": { ".": { "module": "./tslib.es6.js", "import": "./modules/index.js", "default": "./tslib.js" }, "./": "./" }, "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": [ "TypeScript", "Microsoft", "compiler", "language", "javascript", "tslib", "runtime" ], "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": { "type": "git", "url": "git+https://github.com/Microsoft/tslib.git" }, "sideEffects": false, "typings": "tslib.d.ts", "version": "1.14.1", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](http://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 2.3.3 or later\r\nnpm install tslib\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 2.3.3 or later\r\nyarn add tslib\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 2.3.3 or later\r\nbower install tslib\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 2.3.3 or later\r\njspm install tslib\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@1.[version].0/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/rxjs/node_modules/tslib", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Reactive Extensions for modern JavaScript", "devDependencies": { "@angular-devkit/build-optimizer": "0.4.6", "@angular-devkit/schematics": "^0.5.4", "@types/chai": "4.1.2", "@types/lodash": "4.14.102", "@types/mocha": "2.2.48", "@types/node": "9.4.5", "@types/sinon": "4.1.3", "@types/sinon-chai": "2.7.29", "@types/source-map": "^0.5.2", "babel-polyfill": "6.26.0", "benchmark": "2.1.0", "benchpress": "2.0.0-beta.1", "chai": "4.1.2", "check-side-effects": "0.0.20", "color": "3.0.0", "colors": "1.1.2", "commitizen": "2.9.6", "coveralls": "3.0.0", "cross-env": "5.1.3", "cz-conventional-changelog": "1.2.0", "danger": "1.1.0", "dependency-cruiser": "2.13.0", "doctoc": "1.3.0", "dtslint": "0.6.1", "escape-string-regexp": "1.0.5", "esdoc": "0.4.7", "eslint": "4.17.0", "eslint-plugin-jasmine": "^2.10.1", "fs-extra": "5.0.0", "get-folder-size": "1.0.1", "glob": "7.1.2", "gm": "1.23.1", "google-closure-compiler-js": "20170218.0.0", "gzip-size": "4.1.0", "http-server": "0.11.1", "husky": "0.14.3", "klaw-sync": "3.0.2", "lint-staged": "7.1.1", "lodash": "4.17.5", "markdown-doctest": "0.9.1", "minimist": "1.2.0", "mkdirp": "^1.0.4", "mocha": "5.0.0", "mocha-in-sauce": "0.0.1", "npm-run-all": "4.1.2", "nyc": "11.4.1", "opn-cli": "3.1.0", "platform": "1.3.5", "promise": "8.0.1", "protractor": "3.1.1", "rollup": "0.66.6", "rollup-plugin-alias": "1.4.0", "rollup-plugin-inject": "2.0.0", "rollup-plugin-node-resolve": "2.0.0", "rx": "latest", "rxjs": "^5.5.7", "shx": "^0.3.2", "sinon": "4.3.0", "sinon-chai": "2.14.0", "source-map-support": "0.5.3", "symbol-observable": "1.0.1", "systemjs": "^0.21.0", "ts-api-guardian": "^0.5.0", "ts-node": "6.1.0", "tsconfig-paths": "3.2.0", "tslint": "5.9.1", "tslint-etc": "1.2.6", "tslint-no-toplevel-property-access": "0.0.2", "tslint-no-unused-expression-chai": "0.0.3", "typescript": "^3.0.1", "validate-commit-msg": "2.14.0", "webpack": "1.13.1", "xmlhttprequest": "1.8.0" }, "engines": { "npm": ">=2.0.0" }, "es2015": "./_esm2015/index.js", "homepage": "https://github.com/ReactiveX/RxJS", "keywords": [ "Rx", "RxJS", "ReactiveX", "ReactiveExtensions", "Streams", "Observables", "Observable", "Stream", "ES6", "ES2015" ], "license": "Apache-2.0", "lint-staged": { "linters": { "*.@(js)": [ "eslint --fix", "git add" ], "*.@(ts)": [ "tslint --fix", "git add" ] }, "ignore": [ "spec-dtslint/**/*.{js,ts}", "api_guard/**/*.{js,ts}" ] }, "main": "./index.js", "module": "./_esm5/index.js", "name": "rxjs", "ng-update": { "migrations": "./migrations/collection.json" }, "nyc": { "include": [ "src/*.ts", "src/**/*.ts" ], "exclude": [ "node_modules", "dist", "*.d.ts", "src/**/MiscJSDoc.ts" ], "extension": [ ".ts" ], "reporter": [ "html" ], "all": true }, "repository": { "type": "git", "url": "git+https://github.com/reactivex/rxjs.git" }, "sideEffects": false, "typings": "./index.d.ts", "version": "6.6.7", "readme": "# \"RxJS RxJS: Reactive Extensions For JavaScript\n\n[![CircleCI](https://circleci.com/gh/ReactiveX/rxjs/tree/6.x.svg?style=svg)](https://circleci.com/gh/ReactiveX/rxjs/tree/6.x)\n[![npm version](https://badge.fury.io/js/%40reactivex%2Frxjs.svg)](http://badge.fury.io/js/%40reactivex%2Frxjs)\n[![Join the chat at https://gitter.im/Reactive-Extensions/RxJS](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Reactive-Extensions/RxJS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n# RxJS 6 Stable\n\n### MIGRATION AND RELEASE INFORMATION:\n\nFind out how to update to v6, **automatically update your TypeScript code**, and more!\n\n- [Current home is MIGRATION.md](./docs_app/content/guide/v6/migration.md)\n\n### FOR V 5.X PLEASE GO TO [THE 5.0 BRANCH](https://github.com/ReactiveX/rxjs/tree/5.x)\n\nReactive Extensions Library for JavaScript. This is a rewrite of [Reactive-Extensions/RxJS](https://github.com/Reactive-Extensions/RxJS) and is the latest production-ready version of RxJS. This rewrite is meant to have better performance, better modularity, better debuggable call stacks, while staying mostly backwards compatible, with some breaking changes that reduce the API surface.\n\n[Apache 2.0 License](LICENSE.txt)\n\n- [Code of Conduct](CODE_OF_CONDUCT.md)\n- [Contribution Guidelines](CONTRIBUTING.md)\n- [Maintainer Guidelines](doc_app/content/maintainer-guidelines.md)\n- [API Documentation](https://rxjs.dev/)\n\n## Versions In This Repository\n\n- [master](https://github.com/ReactiveX/rxjs/commits/master) - This is all of the current, unreleased work, which is against v6 of RxJS right now\n- [stable](https://github.com/ReactiveX/rxjs/commits/stable) - This is the branch for the latest version you'd get if you do `npm install rxjs`\n\n## Important\n\nBy contributing or commenting on issues in this repository, whether you've read them or not, you're agreeing to the [Contributor Code of Conduct](CODE_OF_CONDUCT.md). Much like traffic laws, ignorance doesn't grant you immunity.\n\n## Installation and Usage\n\n### ES6 via npm\n\n```sh\nnpm install rxjs\n```\n\nIt's recommended to pull in the Observable creation methods you need directly from `'rxjs'` as shown below with `range`. And you can pull in any operator you need from one spot, under `'rxjs/operators'`.\n\n```ts\nimport { range } from \"rxjs\";\nimport { map, filter } from \"rxjs/operators\";\n\nrange(1, 200)\n .pipe(\n filter(x => x % 2 === 1),\n map(x => x + x)\n )\n .subscribe(x => console.log(x));\n```\n\nHere, we're using the built-in `pipe` method on Observables to combine operators. See [pipeable operators](https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md) for more information.\n\n### CommonJS via npm\n\nTo install this library for CommonJS (CJS) usage, use the following command:\n\n```sh\nnpm install rxjs\n```\n\n(Note: destructuring available in Node 8+)\n\n```js\nconst { range } = require('rxjs');\nconst { map, filter } = require('rxjs/operators');\n\nrange(1, 200).pipe(\n filter(x => x % 2 === 1),\n map(x => x + x)\n).subscribe(x => console.log(x));\n```\n\n### CDN\n\nFor CDN, you can use [unpkg](https://unpkg.com/):\n\nhttps://unpkg.com/rxjs/bundles/rxjs.umd.min.js\n\nThe global namespace for rxjs is `rxjs`:\n\n```js\nconst { range } = rxjs;\nconst { map, filter } = rxjs.operators;\n\nrange(1, 200)\n .pipe(\n filter(x => x % 2 === 1),\n map(x => x + x)\n )\n .subscribe(x => console.log(x));\n```\n\n## Goals\n\n- Smaller overall bundles sizes\n- Provide better performance than preceding versions of RxJS\n- To model/follow the [Observable Spec Proposal](https://github.com/zenparsing/es-observable) to the observable\n- Provide more modular file structure in a variety of formats\n- Provide more debuggable call stacks than preceding versions of RxJS\n\n## Building/Testing\n\n- `npm run build_all` - builds everything\n- `npm test` - runs tests\n- `npm run test_no_cache` - run test with `ts-node` set to false\n\n## Performance Tests\n\nRun `npm run build_perf` or `npm run perf` to run the performance tests with `protractor`.\n\nRun `npm run perf_micro [operator]` to run micro performance test benchmarking operator.\n\n## Adding documentation\n\nWe appreciate all contributions to the documentation of any type. All of the information needed to get the docs app up and running locally as well as how to contribute can be found in the [documentation directory](./docs_app).\n\n## Generating PNG marble diagrams\n\nThe script `npm run tests2png` requires some native packages installed locally: `imagemagick`, `graphicsmagick`, and `ghostscript`.\n\nFor Mac OS X with [Homebrew](http://brew.sh/):\n\n- `brew install imagemagick`\n- `brew install graphicsmagick`\n- `brew install ghostscript`\n- You may need to install the Ghostscript fonts manually:\n - Download the tarball from the [gs-fonts project](https://sourceforge.net/projects/gs-fonts)\n - `mkdir -p /usr/local/share/ghostscript && tar zxvf /path/to/ghostscript-fonts.tar.gz -C /usr/local/share/ghostscript`\n\nFor Debian Linux:\n\n- `sudo add-apt-repository ppa:dhor/myway`\n- `apt-get install imagemagick`\n- `apt-get install graphicsmagick`\n- `apt-get install ghostscript`\n\nFor Windows and other Operating Systems, check the download instructions here:\n\n- http://imagemagick.org\n- http://www.graphicsmagick.org\n- http://www.ghostscript.com/\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "tslib": "^1.9.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/rxjs", "error": "[Circular]", "extraneous": false }, "rxjs-compat": { "_from": "rxjs-compat@^6.5.5", "_id": "rxjs-compat@6.6.7", "_inBundle": false, "_integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==", "_location": "/rxjs-compat", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "rxjs-compat@^6.5.5", "name": "rxjs-compat", "escapedName": "rxjs-compat", "rawSpec": "^6.5.5", "saveSpec": "[Circular]", "fetchSpec": "^6.5.5" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", "_shasum": "6eb4ef75c0a58ea672854a701ccc8d49f41e69cb", "_spec": "rxjs-compat@^6.5.5", "_where": "/builds/gitlab/osm/ng-ui", "deprecated": false, "description": "[![CircleCI](https://circleci.com/gh/ReactiveX/rxjs/tree/6.x.svg?style=svg)](https://circleci.com/gh/ReactiveX/rxjs/tree/6.x) [![npm version](https://badge.fury.io/js/%40reactivex%2Frxjs.svg)](http://badge.fury.io/js/%40reactivex%2Frxjs) [![Join the chat at https://gitter.im/Reactive-Extensions/RxJS](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Reactive-Extensions/RxJS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)", "license": "Apache-2.0", "main": "./Rx.js", "name": "rxjs-compat", "typings": "./Rx.d.ts", "version": "6.6.7", "readme": "# \"RxJS RxJS: Reactive Extensions For JavaScript\n\n[![CircleCI](https://circleci.com/gh/ReactiveX/rxjs/tree/6.x.svg?style=svg)](https://circleci.com/gh/ReactiveX/rxjs/tree/6.x)\n[![npm version](https://badge.fury.io/js/%40reactivex%2Frxjs.svg)](http://badge.fury.io/js/%40reactivex%2Frxjs)\n[![Join the chat at https://gitter.im/Reactive-Extensions/RxJS](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Reactive-Extensions/RxJS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n# RxJS 6 Stable\n\n### MIGRATION AND RELEASE INFORMATION:\n\nFind out how to update to v6, **automatically update your TypeScript code**, and more!\n\n- [Current home is MIGRATION.md](./docs_app/content/guide/v6/migration.md)\n\n### FOR V 5.X PLEASE GO TO [THE 5.0 BRANCH](https://github.com/ReactiveX/rxjs/tree/5.x)\n\nReactive Extensions Library for JavaScript. This is a rewrite of [Reactive-Extensions/RxJS](https://github.com/Reactive-Extensions/RxJS) and is the latest production-ready version of RxJS. This rewrite is meant to have better performance, better modularity, better debuggable call stacks, while staying mostly backwards compatible, with some breaking changes that reduce the API surface.\n\n[Apache 2.0 License](LICENSE.txt)\n\n- [Code of Conduct](CODE_OF_CONDUCT.md)\n- [Contribution Guidelines](CONTRIBUTING.md)\n- [Maintainer Guidelines](doc_app/content/maintainer-guidelines.md)\n- [API Documentation](https://rxjs.dev/)\n\n## Versions In This Repository\n\n- [master](https://github.com/ReactiveX/rxjs/commits/master) - This is all of the current, unreleased work, which is against v6 of RxJS right now\n- [stable](https://github.com/ReactiveX/rxjs/commits/stable) - This is the branch for the latest version you'd get if you do `npm install rxjs`\n\n## Important\n\nBy contributing or commenting on issues in this repository, whether you've read them or not, you're agreeing to the [Contributor Code of Conduct](CODE_OF_CONDUCT.md). Much like traffic laws, ignorance doesn't grant you immunity.\n\n## Installation and Usage\n\n### ES6 via npm\n\n```sh\nnpm install rxjs\n```\n\nIt's recommended to pull in the Observable creation methods you need directly from `'rxjs'` as shown below with `range`. And you can pull in any operator you need from one spot, under `'rxjs/operators'`.\n\n```ts\nimport { range } from \"rxjs\";\nimport { map, filter } from \"rxjs/operators\";\n\nrange(1, 200)\n .pipe(\n filter(x => x % 2 === 1),\n map(x => x + x)\n )\n .subscribe(x => console.log(x));\n```\n\nHere, we're using the built-in `pipe` method on Observables to combine operators. See [pipeable operators](https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md) for more information.\n\n### CommonJS via npm\n\nTo install this library for CommonJS (CJS) usage, use the following command:\n\n```sh\nnpm install rxjs\n```\n\n(Note: destructuring available in Node 8+)\n\n```js\nconst { range } = require('rxjs');\nconst { map, filter } = require('rxjs/operators');\n\nrange(1, 200).pipe(\n filter(x => x % 2 === 1),\n map(x => x + x)\n).subscribe(x => console.log(x));\n```\n\n### CDN\n\nFor CDN, you can use [unpkg](https://unpkg.com/):\n\nhttps://unpkg.com/rxjs/bundles/rxjs.umd.min.js\n\nThe global namespace for rxjs is `rxjs`:\n\n```js\nconst { range } = rxjs;\nconst { map, filter } = rxjs.operators;\n\nrange(1, 200)\n .pipe(\n filter(x => x % 2 === 1),\n map(x => x + x)\n )\n .subscribe(x => console.log(x));\n```\n\n## Goals\n\n- Smaller overall bundles sizes\n- Provide better performance than preceding versions of RxJS\n- To model/follow the [Observable Spec Proposal](https://github.com/zenparsing/es-observable) to the observable\n- Provide more modular file structure in a variety of formats\n- Provide more debuggable call stacks than preceding versions of RxJS\n\n## Building/Testing\n\n- `npm run build_all` - builds everything\n- `npm test` - runs tests\n- `npm run test_no_cache` - run test with `ts-node` set to false\n\n## Performance Tests\n\nRun `npm run build_perf` or `npm run perf` to run the performance tests with `protractor`.\n\nRun `npm run perf_micro [operator]` to run micro performance test benchmarking operator.\n\n## Adding documentation\n\nWe appreciate all contributions to the documentation of any type. All of the information needed to get the docs app up and running locally as well as how to contribute can be found in the [documentation directory](./docs_app).\n\n## Generating PNG marble diagrams\n\nThe script `npm run tests2png` requires some native packages installed locally: `imagemagick`, `graphicsmagick`, and `ghostscript`.\n\nFor Mac OS X with [Homebrew](http://brew.sh/):\n\n- `brew install imagemagick`\n- `brew install graphicsmagick`\n- `brew install ghostscript`\n- You may need to install the Ghostscript fonts manually:\n - Download the tarball from the [gs-fonts project](https://sourceforge.net/projects/gs-fonts)\n - `mkdir -p /usr/local/share/ghostscript && tar zxvf /path/to/ghostscript-fonts.tar.gz -C /usr/local/share/ghostscript`\n\nFor Debian Linux:\n\n- `sudo add-apt-repository ppa:dhor/myway`\n- `apt-get install imagemagick`\n- `apt-get install graphicsmagick`\n- `apt-get install ghostscript`\n\nFor Windows and other Operating Systems, check the download instructions here:\n\n- http://imagemagick.org\n- http://www.graphicsmagick.org\n- http://www.ghostscript.com/\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/rxjs-compat", "error": "[Circular]", "extraneous": false }, "stream": { "_from": "stream@0.0.2", "_id": "stream@0.0.2", "_inBundle": false, "_integrity": "sha512-gCq3NDI2P35B2n6t76YJuOp7d6cN/C7Rt0577l91wllh0sY9ZBuw9KaSGqH/b0hzn3CWWJbpbW0W0WvQ1H/Q7g==", "_location": "/stream", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "stream@0.0.2", "name": "stream", "escapedName": "stream", "rawSpec": "0.0.2", "saveSpec": "[Circular]", "fetchSpec": "0.0.2" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/stream/-/stream-0.0.2.tgz", "_shasum": "7f5363f057f6592c5595f00bc80a27f5cec1f0ef", "_spec": "stream@0.0.2", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Julian Gruber", "email": "julian@juliangruber.com" }, "browser": { "emitter": "emitter-component" }, "bugs": { "url": "https://github.com/juliangruber/stream/issues" }, "dependencies": { "emitter-component": { "_from": "emitter-component@^1.1.1", "_id": "emitter-component@1.1.1", "_inBundle": false, "_integrity": "sha512-G+mpdiAySMuB7kesVRLuyvYRqDmshB7ReKEVuyBPkzQlmiDiLrt7hHHIy4Aff552bgknVN7B2/d3lzhGO5dvpQ==", "_location": "/emitter-component", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "emitter-component@^1.1.1", "name": "emitter-component", "escapedName": "emitter-component", "rawSpec": "^1.1.1", "saveSpec": "[Circular]", "fetchSpec": "^1.1.1" }, "_requiredBy": [ "/stream" ], "_resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.1.tgz", "_shasum": "065e2dbed6959bf470679edabeaf7981d1003ab6", "_spec": "emitter-component@^1.1.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/stream", "bugs": { "url": "https://github.com/component/emitter/issues" }, "component": { "scripts": { "emitter": "index.js" } }, "deprecated": false, "description": "Event emitter", "devDependencies": { "mocha": "*", "should": "*" }, "homepage": "https://github.com/component/emitter#readme", "name": "emitter-component", "repository": { "type": "git", "url": "git+https://github.com/component/emitter.git" }, "scripts": { "test": "make test" }, "version": "1.1.1", "readme": "# Emitter [![Build Status](https://travis-ci.org/component/emitter.png)](https://travis-ci.org/component/emitter)\n\n Event emitter component.\n\n## Installation\n\n```\n$ component install component/emitter\n```\n\n## API\n\n### Emitter(obj)\n\n The `Emitter` may also be used as a mixin. For example\n a \"plain\" object may become an emitter, or you may\n extend an existing prototype.\n\n As an `Emitter` instance:\n\n```js\nvar Emitter = require('emitter');\nvar emitter = new Emitter;\nemitter.emit('something');\n```\n\n As a mixin:\n\n```js\nvar Emitter = require('emitter');\nvar user = { name: 'tobi' };\nEmitter(user);\n\nuser.emit('im a user');\n```\n\n As a prototype mixin:\n\n```js\nvar Emitter = require('emitter');\nEmitter(User.prototype);\n```\n\n### Emitter#on(event, fn)\n\n Register an `event` handler `fn`.\n\n### Emitter#once(event, fn)\n\n Register a single-shot `event` handler `fn`,\n removed immediately after it is invoked the\n first time.\n\n### Emitter#off(event, fn)\n\n * Pass `event` and `fn` to remove a listener.\n * Pass `event` to remove all listeners on that event.\n * Pass nothing to remove all listeners on all events.\n\n### Emitter#emit(event, ...)\n\n Emit an `event` with variable option args.\n\n### Emitter#listeners(event)\n\n Return an array of callbacks, or an empty array.\n\n### Emitter#hasListeners(event)\n\n Check if this emitter has `event` handlers.\n", "readmeFilename": "Readme.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/emitter-component", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Node.js streams in the browser", "devDependencies": { "expect.js": "*", "mocha": "*" }, "homepage": "https://github.com/juliangruber/stream#readme", "keywords": [ "stream" ], "license": "MIT", "main": "index.js", "name": "stream", "repository": { "type": "git", "url": "git://github.com/juliangruber/stream.git" }, "version": "0.0.2", "readme": "stream\n======\n\nNode.js streams in the browser.\n\nPorted straight from the [Node.js core](https://github.com/joyent/node/blob/master/lib/stream.js) and adapted to [component/emitter](https://github.com/component/emitter)'s api.\n\nFor docs:\n\n* [Stream Node.js v0.8.9 Manual & Documentation](http://nodejs.org/api/stream.html)\n* [Stream Handbook](https://github.com/substack/stream-handbook)\n\nA [testsuite](https://github.com/juliangruber/stream/blob/master/test.html) for the browser is there too. Just issue `npm install` after you've cloned this repo and then open the html file.\n\nInstallation\n------------\n\nInstall with [component(1)](https://github.com/component/component)\n\n```bash\n$ component install juliangruber/stream\n```\nor\n\n```\n$ npm install stream\n```\n\nUsage example\n-------------\n\n```javascript\nvar Stream = require('stream');\n\nvar src = new Stream();\nsrc.readable = true;\n\nvar dest = new Stream();\ndest.writable = true;\ndest.write = function(data) {\n assert(data == 'test');\n};\n\nsrc.pipe(dest);\n\nsrc.emit('data', 'test');\n```\n\nLicense\n-------\n(MIT)\n\nCopyright (c) 2012 Julian Gruber <julian@juliangruber.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "emitter-component": "^1.1.1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/stream", "error": "[Circular]", "extraneous": false }, "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]" }, "util": { "_from": "util@^0.12.4", "_id": "util@0.12.5", "_inBundle": false, "_integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "_location": "/util", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "util@^0.12.4", "name": "util", "escapedName": "util", "rawSpec": "^0.12.4", "saveSpec": "[Circular]", "fetchSpec": "^0.12.4" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "_shasum": "5f17a6059b73db61a875668781a1c2b136bd6fbc", "_spec": "util@^0.12.4", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Joyent", "url": "http://www.joyent.com" }, "browser": { "./support/isBuffer.js": "./support/isBufferBrowser.js" }, "bugs": { "url": "https://github.com/browserify/node-util/issues" }, "dependencies": { "inherits": { "_from": "inherits@2", "_id": "inherits@2.0.4", "_inBundle": false, "_integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "_location": "/inherits", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "_shasum": "0fa2c64f932917c3433a0ded55363aae37416b7c", "_spec": "inherits@2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/glob", "browser": "./inherits_browser.js", "bugs": "[Circular]", "deprecated": false, "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", "devDependencies": "[Circular]", "files": "[Circular]", "homepage": "https://github.com/isaacs/inherits#readme", "keywords": "[Circular]", "license": "ISC", "main": "./inherits.js", "name": "inherits", "repository": "[Circular]", "scripts": "[Circular]", "version": "2.0.4", "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/inherits", "error": "[Circular]", "extraneous": false }, "is-arguments": { "_from": "is-arguments@^1.0.4", "_id": "is-arguments@1.1.1", "_inBundle": false, "_integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "_location": "/is-arguments", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "is-arguments@^1.0.4", "name": "is-arguments", "escapedName": "is-arguments", "rawSpec": "^1.0.4", "saveSpec": "[Circular]", "fetchSpec": "^1.0.4" }, "_requiredBy": [ "/util" ], "_resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "_shasum": "15b3f88fda01f2a97fec84ca761a560f123efa9b", "_spec": "is-arguments@^1.0.4", "_where": "/builds/gitlab/osm/ng-ui/node_modules/util", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/inspect-js/is-arguments/issues" }, "contributors": [ { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" } ], "dependencies": { "call-bind": { "_from": "call-bind@^1.0.2", "_id": "call-bind@1.0.5", "_inBundle": false, "_integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "_location": "/call-bind", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "call-bind@^1.0.2", "name": "call-bind", "escapedName": "call-bind", "rawSpec": "^1.0.2", "saveSpec": "[Circular]", "fetchSpec": "^1.0.2" }, "_requiredBy": [ "/array-buffer-byte-length", "/array-includes", "/array.prototype.flat", "/array.prototype.flatmap", "/arraybuffer.prototype.slice", "/es-abstract", "/function.prototype.name", "/get-symbol-description", "/is-arguments", "/is-array-buffer", "/is-boolean-object", "/is-regex", "/is-shared-array-buffer", "/is-weakref", "/object.assign", "/object.entries", "/object.fromentries", "/object.values", "/regexp.prototype.flags", "/safe-array-concat", "/safe-regex-test", "/side-channel", "/string.prototype.matchall", "/string.prototype.trim", "/string.prototype.trimend", "/string.prototype.trimstart", "/typed-array-buffer", "/typed-array-byte-length", "/typed-array-byte-offset", "/typed-array-length", "/unbox-primitive", "/which-typed-array" ], "_resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", "_shasum": "6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513", "_spec": "call-bind@^1.0.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/is-arguments", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/ljharb/call-bind/issues" }, "dependencies": { "function-bind": { "_from": "function-bind@^1.1.2", "_id": "function-bind@1.1.2", "_inBundle": false, "_integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "_location": "/function-bind", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "function-bind@^1.1.2", "name": "function-bind", "escapedName": "function-bind", "rawSpec": "^1.1.2", "saveSpec": "[Circular]", "fetchSpec": "^1.1.2" }, "_requiredBy": [ "/call-bind", "/get-intrinsic", "/hasown" ], "_resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "_shasum": "2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c", "_spec": "function-bind@^1.1.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": { "name": "Raynos", "email": "raynos2@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/Raynos/function-bind/issues", "email": "raynos2@gmail.com" }, "contributors": [ { "name": "Raynos" }, { "name": "Jordan Harband", "url": "https://github.com/ljharb" } ], "deprecated": false, "description": "Implementation of Function.prototype.bind", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "in-publish": "^2.0.1", "npmignore": "^0.3.0", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", "tape": "^5.7.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/Raynos/function-bind", "keywords": [ "function", "bind", "shim", "es5" ], "license": "MIT", "main": "index", "name": "function-bind", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git+https://github.com/Raynos/function-bind.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/index.js", "browsers": [ "ie/8..latest", "firefox/16..latest", "firefox/nightly", "chrome/22..latest", "chrome/canary", "opera/12..latest", "opera/next", "safari/5.1..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2..latest" ] }, "version": "1.1.2", "readme": "# function-bind [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nImplementation of function.prototype.bind\n\nOld versions of phantomjs, Internet Explorer < 9, and node < 0.6 don't support `Function.prototype.bind`.\n\n## Example\n\n```js\nFunction.prototype.bind = require(\"function-bind\")\n```\n\n## Installation\n\n`npm install function-bind`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n[package-url]: https://npmjs.org/package/function-bind\n[npm-version-svg]: https://versionbadg.es/Raynos/function-bind.svg\n[deps-svg]: https://david-dm.org/Raynos/function-bind.svg\n[deps-url]: https://david-dm.org/Raynos/function-bind\n[dev-deps-svg]: https://david-dm.org/Raynos/function-bind/dev-status.svg\n[dev-deps-url]: https://david-dm.org/Raynos/function-bind#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/function-bind.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/function-bind.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/function-bind.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=function-bind\n[codecov-image]: https://codecov.io/gh/Raynos/function-bind/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/Raynos/function-bind/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/Raynos/function-bind\n[actions-url]: https://github.com/Raynos/function-bind/actions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/function-bind", "error": "[Circular]", "extraneous": false }, "get-intrinsic": { "_from": "get-intrinsic@^1.2.1", "_id": "get-intrinsic@1.2.2", "_inBundle": false, "_integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "_location": "/get-intrinsic", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "get-intrinsic@^1.2.1", "name": "get-intrinsic", "escapedName": "get-intrinsic", "rawSpec": "^1.2.1", "saveSpec": "[Circular]", "fetchSpec": "^1.2.1" }, "_requiredBy": [ "/array-includes", "/arraybuffer.prototype.slice", "/call-bind", "/define-data-property", "/es-abstract", "/es-set-tostringtag", "/get-symbol-description", "/gopd", "/has-property-descriptors", "/internal-slot", "/is-array-buffer", "/safe-array-concat", "/safe-regex-test", "/set-function-length", "/side-channel", "/string.prototype.matchall", "/typed-array-buffer" ], "_resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "_shasum": "281b7622971123e1ef4b3c90fd7539306da93f3b", "_spec": "get-intrinsic@^1.2.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/ljharb/get-intrinsic/issues" }, "dependencies": { "function-bind": { "_from": "function-bind@^1.1.2", "_id": "function-bind@1.1.2", "_inBundle": false, "_integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "_location": "/function-bind", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "_shasum": "2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c", "_spec": "function-bind@^1.1.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "contributors": "[Circular]", "deprecated": false, "description": "Implementation of Function.prototype.bind", "devDependencies": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/Raynos/function-bind", "keywords": "[Circular]", "license": "MIT", "main": "index", "name": "function-bind", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "testling": "[Circular]", "version": "1.1.2", "readme": "# function-bind [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nImplementation of function.prototype.bind\n\nOld versions of phantomjs, Internet Explorer < 9, and node < 0.6 don't support `Function.prototype.bind`.\n\n## Example\n\n```js\nFunction.prototype.bind = require(\"function-bind\")\n```\n\n## Installation\n\n`npm install function-bind`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n[package-url]: https://npmjs.org/package/function-bind\n[npm-version-svg]: https://versionbadg.es/Raynos/function-bind.svg\n[deps-svg]: https://david-dm.org/Raynos/function-bind.svg\n[deps-url]: https://david-dm.org/Raynos/function-bind\n[dev-deps-svg]: https://david-dm.org/Raynos/function-bind/dev-status.svg\n[dev-deps-url]: https://david-dm.org/Raynos/function-bind#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/function-bind.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/function-bind.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/function-bind.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=function-bind\n[codecov-image]: https://codecov.io/gh/Raynos/function-bind/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/Raynos/function-bind/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/Raynos/function-bind\n[actions-url]: https://github.com/Raynos/function-bind/actions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/function-bind", "error": "[Circular]", "extraneous": false, "_deduped": "function-bind" }, "has-proto": { "_from": "has-proto@^1.0.1", "_id": "has-proto@1.0.1", "_inBundle": false, "_integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "_location": "/has-proto", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "has-proto@^1.0.1", "name": "has-proto", "escapedName": "has-proto", "rawSpec": "^1.0.1", "saveSpec": "[Circular]", "fetchSpec": "^1.0.1" }, "_requiredBy": [ "/es-abstract", "/get-intrinsic", "/typed-array-byte-length", "/typed-array-byte-offset" ], "_resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "_shasum": "1885c1305538958aff469fef37937c22795408e0", "_spec": "has-proto@^1.0.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/inspect-js/has-proto/issues" }, "deprecated": false, "description": "Does this environment have the ability to get the [[Prototype]] of an object on creation with `__proto__`?", "devDependencies": { "@ljharb/eslint-config": "^21.0.0", "aud": "^2.0.2", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "in-publish": "^2.0.1", "npmignore": "^0.3.0", "safe-publish-latest": "^2.0.0", "tape": "^5.6.1" }, "engines": { "node": ">= 0.4" }, "exports": { ".": "./index.js", "./package.json": "./package.json" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/has-proto#readme", "keywords": [ "prototype", "proto", "set", "get", "__proto__", "getPrototypeOf", "setPrototypeOf", "has" ], "license": "MIT", "main": "index.js", "name": "has-proto", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git+https://github.com/inspect-js/has-proto.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/index.js" }, "version": "1.0.1", "readme": "# has-proto [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nDoes this environment have the ability to set the [[Prototype]] of an object on creation with `__proto__`?\n\n## Example\n\n```js\nvar hasProto = require('has-proto');\nvar assert = require('assert');\n\nassert.equal(typeof hasProto(), 'boolean');\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/has-proto\n[npm-version-svg]: https://versionbadg.es/inspect-js/has-proto.svg\n[deps-svg]: https://david-dm.org/inspect-js/has-proto.svg\n[deps-url]: https://david-dm.org/inspect-js/has-proto\n[dev-deps-svg]: https://david-dm.org/inspect-js/has-proto/dev-status.svg\n[dev-deps-url]: https://david-dm.org/inspect-js/has-proto#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/has-proto.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-proto.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-proto.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-proto\n[codecov-image]: https://codecov.io/gh/inspect-js/has-proto/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-proto/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-proto\n[actions-url]: https://github.com/inspect-js/has-proto/actions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/has-proto", "error": "[Circular]", "extraneous": false }, "has-symbols": { "_from": "has-symbols@^1.0.3", "_id": "has-symbols@1.0.3", "_inBundle": false, "_integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "_location": "/has-symbols", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "has-symbols@^1.0.3", "name": "has-symbols", "escapedName": "has-symbols", "rawSpec": "^1.0.3", "saveSpec": "[Circular]", "fetchSpec": "^1.0.3" }, "_requiredBy": [ "/es-abstract", "/get-intrinsic", "/has-tostringtag", "/is-symbol", "/object.assign", "/safe-array-concat", "/string.prototype.matchall", "/unbox-primitive" ], "_resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "_shasum": "bb7b2c4349251dce87b125f7bdf874aa7c8b39f8", "_spec": "has-symbols@^1.0.3", "_where": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/ljharb/has-symbols/issues" }, "contributors": [ { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" } ], "deprecated": false, "description": "Determine if the JS environment has Symbol support. Supports spec, or shams.", "devDependencies": { "@ljharb/eslint-config": "^20.2.3", "aud": "^2.0.0", "auto-changelog": "^2.4.0", "core-js": "^2.6.12", "eslint": "=8.8.0", "get-own-property-symbols": "^0.9.5", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", "tape": "^5.5.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "greenkeeper": { "ignore": [ "core-js" ] }, "homepage": "https://github.com/ljharb/has-symbols#readme", "keywords": [ "Symbol", "symbols", "typeof", "sham", "polyfill", "native", "core-js", "ES6" ], "license": "MIT", "main": "index.js", "name": "has-symbols", "repository": { "type": "git", "url": "git://github.com/inspect-js/has-symbols.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run --silent lint", "test": "npm run tests-only", "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", "test:shams:corejs": "nyc node test/shams/core-js.js", "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", "test:staging": "nyc node --harmony --es-staging test", "test:stock": "nyc node test", "tests-only": "npm run test:stock && npm run test:staging && npm run test:shams", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/index.js", "browsers": [ "iexplore/6.0..latest", "firefox/3.0..6.0", "firefox/15.0..latest", "firefox/nightly", "chrome/4.0..10.0", "chrome/20.0..latest", "chrome/canary", "opera/10.0..latest", "opera/next", "safari/4.0..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2" ] }, "version": "1.0.3", "readme": "# has-symbols [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nDetermine if the JS environment has Symbol support. Supports spec, or shams.\n\n## Example\n\n```js\nvar hasSymbols = require('has-symbols');\n\nhasSymbols() === true; // if the environment has native Symbol support. Not polyfillable, not forgeable.\n\nvar hasSymbolsKinda = require('has-symbols/shams');\nhasSymbolsKinda() === true; // if the environment has a Symbol sham that mostly follows the spec.\n```\n\n## Supported Symbol shams\n - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)\n - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/has-symbols\n[2]: https://versionbadg.es/inspect-js/has-symbols.svg\n[5]: https://david-dm.org/inspect-js/has-symbols.svg\n[6]: https://david-dm.org/inspect-js/has-symbols\n[7]: https://david-dm.org/inspect-js/has-symbols/dev-status.svg\n[8]: https://david-dm.org/inspect-js/has-symbols#info=devDependencies\n[11]: https://nodei.co/npm/has-symbols.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-symbols.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-symbols.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-symbols\n[codecov-image]: https://codecov.io/gh/inspect-js/has-symbols/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-symbols/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-symbols\n[actions-url]: https://github.com/inspect-js/has-symbols/actions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/has-symbols", "error": "[Circular]", "extraneous": false, "_deduped": "has-symbols" }, "hasown": { "_from": "hasown@^2.0.0", "_id": "hasown@2.0.0", "_inBundle": false, "_integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "_location": "/hasown", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "hasown@^2.0.0", "name": "hasown", "escapedName": "hasown", "rawSpec": "^2.0.0", "saveSpec": "[Circular]", "fetchSpec": "^2.0.0" }, "_requiredBy": [ "/es-abstract", "/es-set-tostringtag", "/es-shim-unscopables", "/get-intrinsic", "/internal-slot", "/is-core-module" ], "_resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "_shasum": "f4c513d454a57b7c7e1650778de226b11700546c", "_spec": "hasown@^2.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/inspect-js/hasOwn/issues" }, "dependencies": { "function-bind": { "_from": "function-bind@^1.1.2", "_id": "function-bind@1.1.2", "_inBundle": false, "_integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "_location": "/function-bind", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "_shasum": "2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c", "_spec": "function-bind@^1.1.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "contributors": "[Circular]", "deprecated": false, "description": "Implementation of Function.prototype.bind", "devDependencies": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/Raynos/function-bind", "keywords": "[Circular]", "license": "MIT", "main": "index", "name": "function-bind", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "testling": "[Circular]", "version": "1.1.2", "readme": "# function-bind [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nImplementation of function.prototype.bind\n\nOld versions of phantomjs, Internet Explorer < 9, and node < 0.6 don't support `Function.prototype.bind`.\n\n## Example\n\n```js\nFunction.prototype.bind = require(\"function-bind\")\n```\n\n## Installation\n\n`npm install function-bind`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n[package-url]: https://npmjs.org/package/function-bind\n[npm-version-svg]: https://versionbadg.es/Raynos/function-bind.svg\n[deps-svg]: https://david-dm.org/Raynos/function-bind.svg\n[deps-url]: https://david-dm.org/Raynos/function-bind\n[dev-deps-svg]: https://david-dm.org/Raynos/function-bind/dev-status.svg\n[dev-deps-url]: https://david-dm.org/Raynos/function-bind#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/function-bind.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/function-bind.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/function-bind.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=function-bind\n[codecov-image]: https://codecov.io/gh/Raynos/function-bind/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/Raynos/function-bind/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/Raynos/function-bind\n[actions-url]: https://github.com/Raynos/function-bind/actions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/function-bind", "error": "[Circular]", "extraneous": false, "_deduped": "function-bind" } }, "deprecated": false, "description": "A robust, ES3 compatible, \"has own property\" predicate.", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "@types/function-bind": "^1.1.9", "@types/mock-property": "^1.0.1", "@types/tape": "^5.6.3", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "evalmd": "^0.0.19", "in-publish": "^2.0.1", "mock-property": "^1.0.2", "npmignore": "^0.3.0", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", "tape": "^5.7.1", "typescript": "^5.3.0-dev.20231019" }, "engines": { "node": ">= 0.4" }, "exports": { ".": "./index.js", "./package.json": "./package.json" }, "homepage": "https://github.com/inspect-js/hasOwn#readme", "keywords": [ "has", "hasOwnProperty", "hasOwn", "has-own", "own", "has", "property", "in", "javascript", "ecmascript" ], "license": "MIT", "main": "index.js", "name": "hasown", "publishConfig": { "ignore": [ ".github/workflows", "test", "!*.d.ts", "!*.d.ts.map" ] }, "repository": { "type": "git", "url": "git+https://github.com/inspect-js/hasOwn.git" }, "scripts": { "emit-types": "npm run tsc -- --noEmit false --emitDeclarationOnly", "lint": "eslint --ext=js,mjs .", "postlint": "npm run tsc", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "preemit-types": "rm -f *.ts *.ts.map test/*.ts test/*.ts.map", "prelint": "evalmd README.md", "prepack": "npmignore --auto --commentLines=autogenerated && npm run emit-types", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'", "tsc": "tsc -p .", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/index.js" }, "version": "2.0.0", "readme": "# hasown [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nA robust, ES3 compatible, \"has own property\" predicate.\n\n## Example\n\n```js\nconst assert = require('assert');\nconst hasOwn = require('hasown');\n\nassert.equal(hasOwn({}, 'toString'), false);\nassert.equal(hasOwn([], 'length'), true);\nassert.equal(hasOwn({ a: 42 }, 'a'), true);\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/hasown\n[npm-version-svg]: https://versionbadg.es/inspect-js/hasown.svg\n[deps-svg]: https://david-dm.org/inspect-js/hasOwn.svg\n[deps-url]: https://david-dm.org/inspect-js/hasOwn\n[dev-deps-svg]: https://david-dm.org/inspect-js/hasOwn/dev-status.svg\n[dev-deps-url]: https://david-dm.org/inspect-js/hasOwn#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/hasown.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/hasown.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/hasown.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=hasown\n[codecov-image]: https://codecov.io/gh/inspect-js/hasOwn/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/hasOwn/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/hasOwn\n[actions-url]: https://github.com/inspect-js/hasOwn/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "function-bind": "^1.1.2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/hasown", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Get and robustly cache all JS language-level intrinsics at first require time", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "call-bind": "^1.0.5", "es-abstract": "^1.22.2", "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", "evalmd": "^0.0.19", "for-each": "^0.3.3", "gopd": "^1.0.1", "make-async-function": "^1.0.0", "make-async-generator-function": "^1.0.0", "make-generator-function": "^2.0.0", "mock-property": "^1.0.2", "npmignore": "^0.3.0", "nyc": "^10.3.2", "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", "tape": "^5.7.2" }, "exports": { ".": [ { "default": "./index.js" }, "./index.js" ], "./package.json": "./package.json" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/ljharb/get-intrinsic#readme", "keywords": [ "javascript", "ecmascript", "es", "js", "intrinsic", "getintrinsic", "es-abstract" ], "license": "MIT", "main": "index.js", "name": "get-intrinsic", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git+https://github.com/ljharb/get-intrinsic.git" }, "scripts": { "lint": "eslint --ext=.js,.mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prelint": "evalmd README.md", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/GetIntrinsic.js" }, "version": "1.2.2", "readme": "# get-intrinsic [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nGet and robustly cache all JS language-level intrinsics at first require time.\n\nSee the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference.\n\n## Example\n\n```js\nvar GetIntrinsic = require('get-intrinsic');\nvar assert = require('assert');\n\n// static methods\nassert.equal(GetIntrinsic('%Math.pow%'), Math.pow);\nassert.equal(Math.pow(2, 3), 8);\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\ndelete Math.pow;\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\n\n// instance methods\nvar arr = [1];\nassert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push);\nassert.deepEqual(arr, [1]);\n\narr.push(2);\nassert.deepEqual(arr, [1, 2]);\n\nGetIntrinsic('%Array.prototype.push%').call(arr, 3);\nassert.deepEqual(arr, [1, 2, 3]);\n\ndelete Array.prototype.push;\nGetIntrinsic('%Array.prototype.push%').call(arr, 4);\nassert.deepEqual(arr, [1, 2, 3, 4]);\n\n// missing features\ndelete JSON.parse; // to simulate a real intrinsic that is missing in the environment\nassert.throws(() => GetIntrinsic('%JSON.parse%'));\nassert.equal(undefined, GetIntrinsic('%JSON.parse%', true));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n## Security\n\nPlease email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.\n\n[package-url]: https://npmjs.org/package/get-intrinsic\n[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg\n[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg\n[deps-url]: https://david-dm.org/ljharb/get-intrinsic\n[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic\n[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic\n[actions-url]: https://github.com/ljharb/get-intrinsic/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "error": "[Circular]", "extraneous": false }, "set-function-length": { "_from": "set-function-length@^1.1.1", "_id": "set-function-length@1.1.1", "_inBundle": false, "_integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", "_location": "/set-function-length", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "set-function-length@^1.1.1", "name": "set-function-length", "escapedName": "set-function-length", "rawSpec": "^1.1.1", "saveSpec": "[Circular]", "fetchSpec": "^1.1.1" }, "_requiredBy": [ "/call-bind" ], "_resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", "_shasum": "4bc39fafb0307224a33e106a7d35ca1218d659ed", "_spec": "set-function-length@^1.1.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/ljharb/set-function-length/issues" }, "dependencies": { "define-data-property": { "_from": "define-data-property@^1.1.1", "_id": "define-data-property@1.1.1", "_inBundle": false, "_integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "_location": "/define-data-property", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "define-data-property@^1.1.1", "name": "define-data-property", "escapedName": "define-data-property", "rawSpec": "^1.1.1", "saveSpec": "[Circular]", "fetchSpec": "^1.1.1" }, "_requiredBy": [ "/define-properties", "/set-function-length", "/set-function-name" ], "_resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", "_shasum": "c35f7cd0ab09883480d12ac5cb213715587800b3", "_spec": "define-data-property@^1.1.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/set-function-length", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/ljharb/define-data-property/issues" }, "dependencies": { "get-intrinsic": { "_from": "get-intrinsic@^1.2.1", "_id": "get-intrinsic@1.2.2", "_inBundle": false, "_integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "_location": "/get-intrinsic", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "_shasum": "281b7622971123e1ef4b3c90fd7539306da93f3b", "_spec": "get-intrinsic@^1.2.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Get and robustly cache all JS language-level intrinsics at first require time", "devDependencies": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/ljharb/get-intrinsic#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "get-intrinsic", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "testling": "[Circular]", "version": "1.2.2", "readme": "# get-intrinsic [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nGet and robustly cache all JS language-level intrinsics at first require time.\n\nSee the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference.\n\n## Example\n\n```js\nvar GetIntrinsic = require('get-intrinsic');\nvar assert = require('assert');\n\n// static methods\nassert.equal(GetIntrinsic('%Math.pow%'), Math.pow);\nassert.equal(Math.pow(2, 3), 8);\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\ndelete Math.pow;\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\n\n// instance methods\nvar arr = [1];\nassert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push);\nassert.deepEqual(arr, [1]);\n\narr.push(2);\nassert.deepEqual(arr, [1, 2]);\n\nGetIntrinsic('%Array.prototype.push%').call(arr, 3);\nassert.deepEqual(arr, [1, 2, 3]);\n\ndelete Array.prototype.push;\nGetIntrinsic('%Array.prototype.push%').call(arr, 4);\nassert.deepEqual(arr, [1, 2, 3, 4]);\n\n// missing features\ndelete JSON.parse; // to simulate a real intrinsic that is missing in the environment\nassert.throws(() => GetIntrinsic('%JSON.parse%'));\nassert.equal(undefined, GetIntrinsic('%JSON.parse%', true));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n## Security\n\nPlease email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.\n\n[package-url]: https://npmjs.org/package/get-intrinsic\n[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg\n[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg\n[deps-url]: https://david-dm.org/ljharb/get-intrinsic\n[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic\n[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic\n[actions-url]: https://github.com/ljharb/get-intrinsic/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "error": "[Circular]", "extraneous": false, "_deduped": "get-intrinsic" }, "gopd": { "_from": "gopd@^1.0.1", "_id": "gopd@1.0.1", "_inBundle": false, "_integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "_location": "/gopd", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "gopd@^1.0.1", "name": "gopd", "escapedName": "gopd", "rawSpec": "^1.0.1", "saveSpec": "[Circular]", "fetchSpec": "^1.0.1" }, "_requiredBy": [ "/define-data-property", "/es-abstract", "/set-function-length", "/which-typed-array" ], "_resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "_shasum": "29ff76de69dac7489b7c0918a5788e56477c332c", "_spec": "gopd@^1.0.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/set-function-length", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/ljharb/gopd/issues" }, "dependencies": {}, "deprecated": false, "description": "`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.", "devDependencies": { "@ljharb/eslint-config": "^21.0.0", "aud": "^2.0.1", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "evalmd": "^0.0.19", "in-publish": "^2.0.1", "npmignore": "^0.3.0", "safe-publish-latest": "^2.0.0", "tape": "^5.6.1" }, "exports": { ".": "./index.js", "./package.json": "./package.json" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/ljharb/gopd#readme", "keywords": [ "ecmascript", "javascript", "getownpropertydescriptor", "property", "descriptor" ], "license": "MIT", "main": "index.js", "name": "gopd", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git+https://github.com/ljharb/gopd.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "postlint": "evalmd README.md", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "sideEffects": false, "version": "1.0.1", "readme": "# gopd [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\n`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.\n\n## Usage\n\n```javascript\nvar gOPD = require('gopd');\nvar assert = require('assert');\n\nif (gOPD) {\n\tassert.equal(typeof gOPD, 'function', 'descriptors supported');\n\t// use gOPD like Object.getOwnPropertyDescriptor here\n} else {\n\tassert.ok(!gOPD, 'descriptors not supported');\n}\n```\n\n[package-url]: https://npmjs.org/package/gopd\n[npm-version-svg]: https://versionbadg.es/ljharb/gopd.svg\n[deps-svg]: https://david-dm.org/ljharb/gopd.svg\n[deps-url]: https://david-dm.org/ljharb/gopd\n[dev-deps-svg]: https://david-dm.org/ljharb/gopd/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/gopd#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/gopd.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/gopd.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/gopd.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=gopd\n[codecov-image]: https://codecov.io/gh/ljharb/gopd/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/gopd/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/gopd\n[actions-url]: https://github.com/ljharb/gopd/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "get-intrinsic": "^1.1.3" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/gopd", "error": "[Circular]", "extraneous": false, "_deduped": "gopd" }, "has-property-descriptors": { "_from": "has-property-descriptors@^1.0.0", "_id": "has-property-descriptors@1.0.1", "_inBundle": false, "_integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "_location": "/has-property-descriptors", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "has-property-descriptors@^1.0.0", "name": "has-property-descriptors", "escapedName": "has-property-descriptors", "rawSpec": "^1.0.0", "saveSpec": "[Circular]", "fetchSpec": "^1.0.0" }, "_requiredBy": [ "/define-data-property", "/define-properties", "/es-abstract", "/set-function-length", "/set-function-name" ], "_resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", "_shasum": "52ba30b6c5ec87fd89fa574bc1c39125c6f65340", "_spec": "has-property-descriptors@^1.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/set-function-length", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/inspect-js/has-property-descriptors/issues" }, "dependencies": {}, "deprecated": false, "description": "Does the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD.", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "evalmd": "^0.0.19", "in-publish": "^2.0.1", "npmignore": "^0.3.0", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", "tape": "^5.7.2" }, "exports": { ".": "./index.js", "./package.json": "./package.json" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/has-property-descriptors#readme", "keywords": [ "property", "descriptors", "has", "environment", "env", "defineProperty", "getOwnPropertyDescriptor" ], "license": "MIT", "main": "index.js", "name": "has-property-descriptors", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git+https://github.com/inspect-js/has-property-descriptors.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prelint": "evalmd README.md", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "sideEffects": false, "testling": { "files": "test/index.js" }, "version": "1.0.1", "readme": "# has-property-descriptors [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nDoes the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD.\n\n## Example\n\n```js\nvar hasPropertyDescriptors = require('has-property-descriptors');\nvar assert = require('assert');\n\nassert.equal(hasPropertyDescriptors(), true); // will be `false` in IE 6-8, and ES5 engines\n\n// Arrays can not have their length `[[Defined]]` in some engines\nassert.equal(hasPropertyDescriptors.hasArrayLengthDefineBug(), false); // will be `true` in Firefox 4-22, and node v0.6\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/has-property-descriptors\n[npm-version-svg]: https://versionbadg.es/inspect-js/has-property-descriptors.svg\n[deps-svg]: https://david-dm.org/inspect-js/has-property-descriptors.svg\n[deps-url]: https://david-dm.org/inspect-js/has-property-descriptors\n[dev-deps-svg]: https://david-dm.org/inspect-js/has-property-descriptors/dev-status.svg\n[dev-deps-url]: https://david-dm.org/inspect-js/has-property-descriptors#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/has-property-descriptors.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-property-descriptors.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-property-descriptors.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-property-descriptors\n[codecov-image]: https://codecov.io/gh/inspect-js/has-property-descriptors/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-property-descriptors/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-property-descriptors\n[actions-url]: https://github.com/inspect-js/has-property-descriptors/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "get-intrinsic": "^1.2.2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/has-property-descriptors", "error": "[Circular]", "extraneous": false, "_deduped": "has-property-descriptors" } }, "deprecated": false, "description": "Define a data property on an object. Will fall back to assignment in an engine without descriptors.", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "@types/es-value-fixtures": "^1.4.1", "@types/for-each": "^0.3.1", "@types/get-intrinsic": "^1.2.0", "@types/gopd": "^1.0.1", "@types/has": "^1.0.0", "@types/has-property-descriptors": "^1.0.1", "@types/object-inspect": "^1.8.2", "@types/object.getownpropertydescriptors": "^2.1.2", "@types/tape": "^5.6.1", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", "evalmd": "^0.0.19", "for-each": "^0.3.3", "has": "^1.0.3", "in-publish": "^2.0.1", "npmignore": "^0.3.0", "nyc": "^10.3.2", "object-inspect": "^1.12.3", "object.getownpropertydescriptors": "^2.1.7", "reflect.ownkeys": "^1.1.4", "safe-publish-latest": "^2.0.0", "tape": "^5.7.1", "typescript": "^5.3.0-dev.20231012" }, "engines": { "node": ">= 0.4" }, "exports": { ".": [ { "types": "./index.d.ts", "default": "./index.js" }, "./index.js" ], "./package.json": "./package.json" }, "homepage": "https://github.com/ljharb/define-data-property#readme", "keywords": [ "define", "data", "property", "object", "accessor", "javascript", "ecmascript", "enumerable", "configurable", "writable" ], "license": "MIT", "main": "index.js", "name": "define-data-property", "publishConfig": { "ignore": [ ".github/workflows", "!*.ts", "!*.ts.map", "types/reflect.ownkeys" ] }, "repository": { "type": "git", "url": "git+https://github.com/ljharb/define-data-property.git" }, "scripts": { "emit-types": "npm run tsc -- --noEmit false --emitDeclarationOnly", "lint": "eslint --ext=js,mjs .", "postemit-types": "rm test/*.ts test/*.ts.map", "postlint": "npm run tsc", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "preemit-types": "rm -f *.ts *.ts.map test/*.ts test/*.ts.map", "prelint": "evalmd README.md", "prepack": "npmignore --auto --commentLines=autogenerated && npm run emit-types", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'", "tsc": "tsc -p .", "version": "auto-changelog && git add CHANGELOG.md" }, "sideEffects": false, "testling": { "files": "test/index.js" }, "types": "./index.d.ts", "version": "1.1.1", "readme": "# define-data-property [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nDefine a data property on an object. Will fall back to assignment in an engine without descriptors.\n\nThe three `non*` argument can also be passed `null`, which will use the existing state if available.\n\nThe `loose` argument will mean that if you attempt to set a non-normal data property, in an environment without descriptor support, it will fall back to normal assignment.\n\n## Usage\n\n```javascript\nvar defineDataProperty = require('define-data-property');\nvar assert = require('assert');\n\nvar obj = {};\ndefineDataProperty(obj, 'key', 'value');\ndefineDataProperty(\n\tobj,\n\t'key2',\n\t'value',\n\ttrue, // nonEnumerable, optional\n\tfalse, // nonWritable, optional\n\ttrue, // nonConfigurable, optional\n\tfalse // loose, optional\n);\n\nassert.deepEqual(\n\tObject.getOwnPropertyDescriptors(obj),\n\t{\n\t\tkey: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: 'value',\n\t\t\twritable: true,\n\t\t},\n\t\tkey2: {\n\t\t\tconfigurable: false,\n\t\t\tenumerable: false,\n\t\t\tvalue: 'value',\n\t\t\twritable: true,\n\t\t},\n\t}\n);\n```\n\n[package-url]: https://npmjs.org/package/define-data-property\n[npm-version-svg]: https://versionbadg.es/ljharb/define-data-property.svg\n[deps-svg]: https://david-dm.org/ljharb/define-data-property.svg\n[deps-url]: https://david-dm.org/ljharb/define-data-property\n[dev-deps-svg]: https://david-dm.org/ljharb/define-data-property/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/define-data-property#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/define-data-property.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/define-data-property.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/define-data-property.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=define-data-property\n[codecov-image]: https://codecov.io/gh/ljharb/define-data-property/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/define-data-property/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/define-data-property\n[actions-url]: https://github.com/ljharb/define-data-property/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/define-data-property", "error": "[Circular]", "extraneous": false }, "get-intrinsic": { "_from": "get-intrinsic@^1.2.1", "_id": "get-intrinsic@1.2.2", "_inBundle": false, "_integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "_location": "/get-intrinsic", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "_shasum": "281b7622971123e1ef4b3c90fd7539306da93f3b", "_spec": "get-intrinsic@^1.2.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Get and robustly cache all JS language-level intrinsics at first require time", "devDependencies": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/ljharb/get-intrinsic#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "get-intrinsic", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "testling": "[Circular]", "version": "1.2.2", "readme": "# get-intrinsic [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nGet and robustly cache all JS language-level intrinsics at first require time.\n\nSee the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference.\n\n## Example\n\n```js\nvar GetIntrinsic = require('get-intrinsic');\nvar assert = require('assert');\n\n// static methods\nassert.equal(GetIntrinsic('%Math.pow%'), Math.pow);\nassert.equal(Math.pow(2, 3), 8);\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\ndelete Math.pow;\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\n\n// instance methods\nvar arr = [1];\nassert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push);\nassert.deepEqual(arr, [1]);\n\narr.push(2);\nassert.deepEqual(arr, [1, 2]);\n\nGetIntrinsic('%Array.prototype.push%').call(arr, 3);\nassert.deepEqual(arr, [1, 2, 3]);\n\ndelete Array.prototype.push;\nGetIntrinsic('%Array.prototype.push%').call(arr, 4);\nassert.deepEqual(arr, [1, 2, 3, 4]);\n\n// missing features\ndelete JSON.parse; // to simulate a real intrinsic that is missing in the environment\nassert.throws(() => GetIntrinsic('%JSON.parse%'));\nassert.equal(undefined, GetIntrinsic('%JSON.parse%', true));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n## Security\n\nPlease email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.\n\n[package-url]: https://npmjs.org/package/get-intrinsic\n[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg\n[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg\n[deps-url]: https://david-dm.org/ljharb/get-intrinsic\n[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic\n[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic\n[actions-url]: https://github.com/ljharb/get-intrinsic/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "error": "[Circular]", "extraneous": false, "_deduped": "get-intrinsic" }, "gopd": { "_from": "gopd@^1.0.1", "_id": "gopd@1.0.1", "_inBundle": false, "_integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "_location": "/gopd", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "_shasum": "29ff76de69dac7489b7c0918a5788e56477c332c", "_spec": "gopd@^1.0.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/set-function-length", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.", "devDependencies": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/ljharb/gopd#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "gopd", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "version": "1.0.1", "readme": "# gopd [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\n`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.\n\n## Usage\n\n```javascript\nvar gOPD = require('gopd');\nvar assert = require('assert');\n\nif (gOPD) {\n\tassert.equal(typeof gOPD, 'function', 'descriptors supported');\n\t// use gOPD like Object.getOwnPropertyDescriptor here\n} else {\n\tassert.ok(!gOPD, 'descriptors not supported');\n}\n```\n\n[package-url]: https://npmjs.org/package/gopd\n[npm-version-svg]: https://versionbadg.es/ljharb/gopd.svg\n[deps-svg]: https://david-dm.org/ljharb/gopd.svg\n[deps-url]: https://david-dm.org/ljharb/gopd\n[dev-deps-svg]: https://david-dm.org/ljharb/gopd/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/gopd#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/gopd.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/gopd.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/gopd.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=gopd\n[codecov-image]: https://codecov.io/gh/ljharb/gopd/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/gopd/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/gopd\n[actions-url]: https://github.com/ljharb/gopd/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/gopd", "error": "[Circular]", "extraneous": false, "_deduped": "gopd" }, "has-property-descriptors": { "_from": "has-property-descriptors@^1.0.0", "_id": "has-property-descriptors@1.0.1", "_inBundle": false, "_integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "_location": "/has-property-descriptors", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", "_shasum": "52ba30b6c5ec87fd89fa574bc1c39125c6f65340", "_spec": "has-property-descriptors@^1.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/set-function-length", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "dependencies": { "get-intrinsic": { "_from": "get-intrinsic@^1.2.1", "_id": "get-intrinsic@1.2.2", "_inBundle": false, "_integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "_location": "/get-intrinsic", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "_shasum": "281b7622971123e1ef4b3c90fd7539306da93f3b", "_spec": "get-intrinsic@^1.2.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Get and robustly cache all JS language-level intrinsics at first require time", "devDependencies": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/ljharb/get-intrinsic#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "get-intrinsic", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "testling": "[Circular]", "version": "1.2.2", "readme": "# get-intrinsic [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nGet and robustly cache all JS language-level intrinsics at first require time.\n\nSee the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference.\n\n## Example\n\n```js\nvar GetIntrinsic = require('get-intrinsic');\nvar assert = require('assert');\n\n// static methods\nassert.equal(GetIntrinsic('%Math.pow%'), Math.pow);\nassert.equal(Math.pow(2, 3), 8);\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\ndelete Math.pow;\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\n\n// instance methods\nvar arr = [1];\nassert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push);\nassert.deepEqual(arr, [1]);\n\narr.push(2);\nassert.deepEqual(arr, [1, 2]);\n\nGetIntrinsic('%Array.prototype.push%').call(arr, 3);\nassert.deepEqual(arr, [1, 2, 3]);\n\ndelete Array.prototype.push;\nGetIntrinsic('%Array.prototype.push%').call(arr, 4);\nassert.deepEqual(arr, [1, 2, 3, 4]);\n\n// missing features\ndelete JSON.parse; // to simulate a real intrinsic that is missing in the environment\nassert.throws(() => GetIntrinsic('%JSON.parse%'));\nassert.equal(undefined, GetIntrinsic('%JSON.parse%', true));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n## Security\n\nPlease email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.\n\n[package-url]: https://npmjs.org/package/get-intrinsic\n[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg\n[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg\n[deps-url]: https://david-dm.org/ljharb/get-intrinsic\n[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic\n[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic\n[actions-url]: https://github.com/ljharb/get-intrinsic/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "error": "[Circular]", "extraneous": false, "_deduped": "get-intrinsic" } }, "deprecated": false, "description": "Does the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD.", "devDependencies": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/inspect-js/has-property-descriptors#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "has-property-descriptors", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "testling": "[Circular]", "version": "1.0.1", "readme": "# has-property-descriptors [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nDoes the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD.\n\n## Example\n\n```js\nvar hasPropertyDescriptors = require('has-property-descriptors');\nvar assert = require('assert');\n\nassert.equal(hasPropertyDescriptors(), true); // will be `false` in IE 6-8, and ES5 engines\n\n// Arrays can not have their length `[[Defined]]` in some engines\nassert.equal(hasPropertyDescriptors.hasArrayLengthDefineBug(), false); // will be `true` in Firefox 4-22, and node v0.6\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/has-property-descriptors\n[npm-version-svg]: https://versionbadg.es/inspect-js/has-property-descriptors.svg\n[deps-svg]: https://david-dm.org/inspect-js/has-property-descriptors.svg\n[deps-url]: https://david-dm.org/inspect-js/has-property-descriptors\n[dev-deps-svg]: https://david-dm.org/inspect-js/has-property-descriptors/dev-status.svg\n[dev-deps-url]: https://david-dm.org/inspect-js/has-property-descriptors#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/has-property-descriptors.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-property-descriptors.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-property-descriptors.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-property-descriptors\n[codecov-image]: https://codecov.io/gh/inspect-js/has-property-descriptors/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-property-descriptors/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-property-descriptors\n[actions-url]: https://github.com/inspect-js/has-property-descriptors/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/has-property-descriptors", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Set a function's length property", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "call-bind": "^1.0.4", "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", "evalmd": "^0.0.19", "for-each": "^0.3.3", "in-publish": "^2.0.1", "npmignore": "^0.3.0", "nyc": "^10.3.2", "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", "tape": "^5.7.1" }, "directories": { "test": "test" }, "engines": { "node": ">= 0.4" }, "exports": { ".": "./index.js", "./env": "./env.js", "./package.json": "./package.json" }, "homepage": "https://github.com/ljharb/set-function-length#readme", "keywords": [ "javascript", "ecmascript", "set", "function", "length", "function.length" ], "license": "MIT", "main": "index.js", "name": "set-function-length", "publishConfig": { "ignore": [ ".github/workflows", "test" ] }, "repository": { "type": "git", "url": "git+https://github.com/ljharb/set-function-length.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prelint": "evalmd README.md", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "version": "1.1.1", "readme": "# set-function-length [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nSet a function’s length.\n\nArguments:\n - `fn`: the function\n - `length`: the new length. Must be an integer between 0 and 2**32.\n - `loose`: Optional. If true, and the length fails to be set, do not throw. Default false.\n\nReturns `fn`.\n\n## Usage\n\n```javascript\nvar setFunctionLength = require('set-function-length');\nvar assert = require('assert');\n\nfunction zero() {}\nfunction one(_) {}\nfunction two(_, __) {}\n\nassert.equal(zero.length, 0);\nassert.equal(one.length, 1);\nassert.equal(two.length, 2);\n\nassert.equal(setFunctionLength(zero, 10), zero);\nassert.equal(setFunctionLength(one, 11), one);\nassert.equal(setFunctionLength(two, 12), two);\n\nassert.equal(zero.length, 10);\nassert.equal(one.length, 11);\nassert.equal(two.length, 12);\n```\n\n[package-url]: https://npmjs.org/package/set-function-length\n[npm-version-svg]: https://versionbadg.es/ljharb/set-function-length.svg\n[deps-svg]: https://david-dm.org/ljharb/set-function-length.svg\n[deps-url]: https://david-dm.org/ljharb/set-function-length\n[dev-deps-svg]: https://david-dm.org/ljharb/set-function-length/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/set-function-length#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/set-function-length.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/set-function-length.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/set-function-length.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=set-function-length\n[codecov-image]: https://codecov.io/gh/ljharb/set-function-length/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/set-function-length/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/set-function-length\n[actions-url]: https://github.com/ljharb/set-function-length/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "define-data-property": "^1.1.1", "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/set-function-length", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Robustly `.call.bind()` a function", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", "evalmd": "^0.0.19", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-strict-mode": "^1.0.1", "in-publish": "^2.0.1", "npmignore": "^0.3.0", "nyc": "^10.3.2", "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", "tape": "^5.7.1" }, "exports": { ".": "./index.js", "./callBound": "./callBound.js", "./package.json": "./package.json" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/ljharb/call-bind#readme", "keywords": [ "javascript", "ecmascript", "es", "js", "callbind", "callbound", "call", "bind", "bound", "call-bind", "call-bound", "function", "es-abstract" ], "license": "MIT", "main": "index.js", "name": "call-bind", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git+https://github.com/ljharb/call-bind.git" }, "scripts": { "lint": "eslint --ext=.js,.mjs .", "postlint": "evalmd README.md", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepack": "npmignore --auto --commentLines=auto", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/index.js" }, "version": "1.0.5", "readme": "# call-bind [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nRobustly `.call.bind()` a function.\n\n## Getting started\n\n```sh\nnpm install --save call-bind\n```\n\n## Usage/Examples\n\n```js\nconst assert = require('assert');\nconst callBind = require('call-bind');\nconst callBound = require('call-bind/callBound');\n\nfunction f(a, b) {\n\tassert.equal(this, 1);\n\tassert.equal(a, 2);\n\tassert.equal(b, 3);\n\tassert.equal(arguments.length, 2);\n}\n\nconst fBound = callBind(f);\n\nconst slice = callBound('Array.prototype.slice');\n\ndelete Function.prototype.call;\ndelete Function.prototype.bind;\n\nfBound(1, 2, 3);\n\nassert.deepEqual(slice([1, 2, 3, 4], 1, -1), [2, 3]);\n```\n\n## Tests\n\nClone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/call-bind\n[npm-version-svg]: https://versionbadg.es/ljharb/call-bind.svg\n[deps-svg]: https://david-dm.org/ljharb/call-bind.svg\n[deps-url]: https://david-dm.org/ljharb/call-bind\n[dev-deps-svg]: https://david-dm.org/ljharb/call-bind/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/call-bind#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/call-bind.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/call-bind.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/call-bind.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=call-bind\n[codecov-image]: https://codecov.io/gh/ljharb/call-bind/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/call-bind/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind\n[actions-url]: https://github.com/ljharb/call-bind/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", "set-function-length": "^1.1.1" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "error": "[Circular]", "extraneous": false }, "has-tostringtag": { "_from": "has-tostringtag@^1.0.0", "_id": "has-tostringtag@1.0.0", "_inBundle": false, "_integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "_location": "/has-tostringtag", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "has-tostringtag@^1.0.0", "name": "has-tostringtag", "escapedName": "has-tostringtag", "rawSpec": "^1.0.0", "saveSpec": "[Circular]", "fetchSpec": "^1.0.0" }, "_requiredBy": [ "/es-set-tostringtag", "/is-arguments", "/is-boolean-object", "/is-date-object", "/is-generator-function", "/is-number-object", "/is-regex", "/is-string", "/which-typed-array" ], "_resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "_shasum": "7e133818a7d394734f941e73c3d3f9291e658b25", "_spec": "has-tostringtag@^1.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/is-arguments", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/inspect-js/has-tostringtag/issues" }, "contributors": [ { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" } ], "dependencies": { "has-symbols": { "_from": "has-symbols@^1.0.3", "_id": "has-symbols@1.0.3", "_inBundle": false, "_integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "_location": "/has-symbols", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "_shasum": "bb7b2c4349251dce87b125f7bdf874aa7c8b39f8", "_spec": "has-symbols@^1.0.3", "_where": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "contributors": "[Circular]", "deprecated": false, "description": "Determine if the JS environment has Symbol support. Supports spec, or shams.", "devDependencies": "[Circular]", "engines": "[Circular]", "funding": "[Circular]", "greenkeeper": "[Circular]", "homepage": "https://github.com/ljharb/has-symbols#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "has-symbols", "repository": "[Circular]", "scripts": "[Circular]", "testling": "[Circular]", "version": "1.0.3", "readme": "# has-symbols [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nDetermine if the JS environment has Symbol support. Supports spec, or shams.\n\n## Example\n\n```js\nvar hasSymbols = require('has-symbols');\n\nhasSymbols() === true; // if the environment has native Symbol support. Not polyfillable, not forgeable.\n\nvar hasSymbolsKinda = require('has-symbols/shams');\nhasSymbolsKinda() === true; // if the environment has a Symbol sham that mostly follows the spec.\n```\n\n## Supported Symbol shams\n - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)\n - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/has-symbols\n[2]: https://versionbadg.es/inspect-js/has-symbols.svg\n[5]: https://david-dm.org/inspect-js/has-symbols.svg\n[6]: https://david-dm.org/inspect-js/has-symbols\n[7]: https://david-dm.org/inspect-js/has-symbols/dev-status.svg\n[8]: https://david-dm.org/inspect-js/has-symbols#info=devDependencies\n[11]: https://nodei.co/npm/has-symbols.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-symbols.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-symbols.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-symbols\n[codecov-image]: https://codecov.io/gh/inspect-js/has-symbols/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-symbols/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-symbols\n[actions-url]: https://github.com/inspect-js/has-symbols/actions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/has-symbols", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.", "devDependencies": { "@ljharb/eslint-config": "^17.6.0", "aud": "^1.1.5", "auto-changelog": "^2.3.0", "core-js": "^2.6.12", "eslint": "^7.32.0", "get-own-property-symbols": "^0.9.5", "nyc": "^10.3.2", "safe-publish-latest": "^1.1.4", "tape": "^5.3.0" }, "engines": { "node": ">= 0.4" }, "exports": { ".": "./index.js", "./shams": "./shams.js", "./package.json": "./package.json" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/has-tostringtag#readme", "keywords": [ "javascript", "ecmascript", "symbol", "symbols", "tostringtag", "Symbol.toStringTag" ], "license": "MIT", "main": "index.js", "name": "has-tostringtag", "repository": { "type": "git", "url": "git+https://github.com/inspect-js/has-tostringtag.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run --silent lint", "test": "npm run tests-only", "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", "test:shams:corejs": "nyc node test/shams/core-js.js", "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", "test:staging": "nyc node --harmony --es-staging test", "test:stock": "nyc node test", "tests-only": "npm run test:stock && npm run test:staging && npm run test:shams", "version": "auto-changelog && git add CHANGELOG.md" }, "version": "1.0.0", "readme": "# has-tostringtag [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nDetermine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.\n\n## Example\n\n```js\nvar hasSymbolToStringTag = require('has-tostringtag');\n\nhasSymbolToStringTag() === true; // if the environment has native Symbol.toStringTag support. Not polyfillable, not forgeable.\n\nvar hasSymbolToStringTagKinda = require('has-tostringtag/shams');\nhasSymbolToStringTagKinda() === true; // if the environment has a Symbol.toStringTag sham that mostly follows the spec.\n```\n\n## Supported Symbol shams\n - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)\n - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/has-tostringtag\n[2]: https://versionbadg.es/inspect-js/has-tostringtag.svg\n[5]: https://david-dm.org/inspect-js/has-tostringtag.svg\n[6]: https://david-dm.org/inspect-js/has-tostringtag\n[7]: https://david-dm.org/inspect-js/has-tostringtag/dev-status.svg\n[8]: https://david-dm.org/inspect-js/has-tostringtag#info=devDependencies\n[11]: https://nodei.co/npm/has-tostringtag.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-tostringtag.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-tostringtag.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-tostringtag\n[codecov-image]: https://codecov.io/gh/inspect-js/has-tostringtag/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-tostringtag/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-tostringtag\n[actions-url]: https://github.com/inspect-js/has-tostringtag/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "has-symbols": "^1.0.2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/has-tostringtag", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Is this an arguments object? It's a harder question than you think.", "devDependencies": { "@ljharb/eslint-config": "^17.6.0", "aud": "^1.1.5", "auto-changelog": "^2.3.0", "eslint": "^7.32.0", "nyc": "^10.3.2", "safe-publish-latest": "^1.1.4", "tape": "^5.3.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/is-arguments", "keywords": [ "arguments", "js", "javascript", "is-arguments", "is", "object" ], "license": "MIT", "main": "index.js", "name": "is-arguments", "repository": { "type": "git", "url": "git://github.com/inspect-js/is-arguments.git" }, "scripts": { "lint": "eslint .", "posttest": "npx aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run --silent lint", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test.js", "browsers": [ "iexplore/6.0..latest", "firefox/3.0..6.0", "firefox/15.0..latest", "firefox/nightly", "chrome/4.0..10.0", "chrome/20.0..latest", "chrome/canary", "opera/10.0..latest", "opera/next", "safari/4.0..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2" ] }, "version": "1.1.1", "readme": "# is-arguments [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nIs this an arguments object? It's a harder question than you think.\n\n## Example\n\n```js\nvar isArguments = require('is-arguments');\nvar assert = require('assert');\n\nassert.equal(isArguments({}), false);\nassert.equal(isArguments([]), false);\n(function () {\n\tassert.equal(isArguments(arguments), true);\n}())\n```\n\n## Caveats\nIf you have modified an actual `arguments` object by giving it a `Symbol.toStringTag` property, then this package will return `false`.\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/is-arguments\n[2]: https://versionbadg.es/inspect-js/is-arguments.svg\n[5]: https://david-dm.org/inspect-js/is-arguments.svg\n[6]: https://david-dm.org/inspect-js/is-arguments\n[7]: https://david-dm.org/inspect-js/is-arguments/dev-status.svg\n[8]: https://david-dm.org/inspect-js/is-arguments#info=devDependencies\n[11]: https://nodei.co/npm/is-arguments.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/is-arguments.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/is-arguments.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=is-arguments\n[codecov-image]: https://codecov.io/gh/inspect-js/is-arguments/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/is-arguments/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-arguments\n[actions-url]: https://github.com/inspect-js/is-arguments/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/is-arguments", "error": "[Circular]", "extraneous": false }, "is-generator-function": { "_from": "is-generator-function@^1.0.7", "_id": "is-generator-function@1.0.10", "_inBundle": false, "_integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "_location": "/is-generator-function", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "is-generator-function@^1.0.7", "name": "is-generator-function", "escapedName": "is-generator-function", "rawSpec": "^1.0.7", "saveSpec": "[Circular]", "fetchSpec": "^1.0.7" }, "_requiredBy": [ "/util" ], "_resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "_shasum": "f1558baf1ac17e0deea7c0415c438351ff2b3c72", "_spec": "is-generator-function@^1.0.7", "_where": "/builds/gitlab/osm/ng-ui/node_modules/util", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/inspect-js/is-generator-function/issues" }, "dependencies": { "has-tostringtag": { "_from": "has-tostringtag@^1.0.0", "_id": "has-tostringtag@1.0.0", "_inBundle": false, "_integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "_location": "/has-tostringtag", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "_shasum": "7e133818a7d394734f941e73c3d3f9291e658b25", "_spec": "has-tostringtag@^1.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/is-arguments", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "contributors": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.", "devDependencies": "[Circular]", "engines": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/inspect-js/has-tostringtag#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "has-tostringtag", "repository": "[Circular]", "scripts": "[Circular]", "version": "1.0.0", "readme": "# has-tostringtag [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nDetermine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.\n\n## Example\n\n```js\nvar hasSymbolToStringTag = require('has-tostringtag');\n\nhasSymbolToStringTag() === true; // if the environment has native Symbol.toStringTag support. Not polyfillable, not forgeable.\n\nvar hasSymbolToStringTagKinda = require('has-tostringtag/shams');\nhasSymbolToStringTagKinda() === true; // if the environment has a Symbol.toStringTag sham that mostly follows the spec.\n```\n\n## Supported Symbol shams\n - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)\n - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/has-tostringtag\n[2]: https://versionbadg.es/inspect-js/has-tostringtag.svg\n[5]: https://david-dm.org/inspect-js/has-tostringtag.svg\n[6]: https://david-dm.org/inspect-js/has-tostringtag\n[7]: https://david-dm.org/inspect-js/has-tostringtag/dev-status.svg\n[8]: https://david-dm.org/inspect-js/has-tostringtag#info=devDependencies\n[11]: https://nodei.co/npm/has-tostringtag.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-tostringtag.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-tostringtag.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-tostringtag\n[codecov-image]: https://codecov.io/gh/inspect-js/has-tostringtag/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-tostringtag/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-tostringtag\n[actions-url]: https://github.com/inspect-js/has-tostringtag/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/has-tostringtag", "error": "[Circular]", "extraneous": false, "_deduped": "has-tostringtag" } }, "deprecated": false, "description": "Determine if a function is a native generator function.", "devDependencies": { "@ljharb/eslint-config": "^17.6.0", "aud": "^1.1.5", "auto-changelog": "^2.3.0", "core-js": "^2.6.5 || ^3.16.0", "eslint": "^7.32.0", "make-generator-function": "^2.0.0", "nyc": "^10.3.2", "safe-publish-latest": "^1.1.4", "tape": "^5.3.0", "uglify-register": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/is-generator-function#readme", "keywords": [ "generator", "generator function", "es6", "es2015", "yield", "function", "function*" ], "license": "MIT", "main": "index.js", "name": "is-generator-function", "repository": { "type": "git", "url": "git://github.com/inspect-js/is-generator-function.git" }, "scripts": { "lint": "eslint .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only", "test:all": "npm run test:index && npm run test:corejs && npm run test:uglified", "test:corejs": "node test/corejs", "test:harmony": "node --es-staging --harmony test && node --es-staging --harmony test/corejs && node --es-staging --harmony test/uglified", "test:index": "node test", "test:uglified": "node test/uglified", "tests-only": "nyc npm run test:all", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/index.js", "browsers": [ "iexplore/6.0..latest", "firefox/3.0..6.0", "firefox/15.0..latest", "firefox/nightly", "chrome/4.0..10.0", "chrome/20.0..latest", "chrome/canary", "opera/10.0..latest", "opera/next", "safari/4.0..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2" ] }, "version": "1.0.10", "readme": "# is-generator-function [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nIs this a native generator function?\n\n## Example\n\n```js\nvar isGeneratorFunction = require('is-generator-function');\nassert(!isGeneratorFunction(function () {}));\nassert(!isGeneratorFunction(null));\nassert(isGeneratorFunction(function* () { yield 42; return Infinity; }));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/is-generator-function\n[2]: https://versionbadg.es/inspect-js/is-generator-function.svg\n[5]: https://david-dm.org/inspect-js/is-generator-function.svg\n[6]: https://david-dm.org/inspect-js/is-generator-function\n[7]: https://david-dm.org/inspect-js/is-generator-function/dev-status.svg\n[8]: https://david-dm.org/inspect-js/is-generator-function#info=devDependencies\n[11]: https://nodei.co/npm/is-generator-function.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/is-generator-function.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/is-generator-function.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=is-generator-function\n[codecov-image]: https://codecov.io/gh/inspect-js/is-generator-function/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/is-generator-function/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-generator-function\n[actions-url]: https://github.com/inspect-js/is-generator-function/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "has-tostringtag": "^1.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/is-generator-function", "error": "[Circular]", "extraneous": false }, "is-typed-array": { "_from": "is-typed-array@^1.1.3", "_id": "is-typed-array@1.1.12", "_inBundle": false, "_integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "_location": "/is-typed-array", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "is-typed-array@^1.1.3", "name": "is-typed-array", "escapedName": "is-typed-array", "rawSpec": "^1.1.3", "saveSpec": "[Circular]", "fetchSpec": "^1.1.3" }, "_requiredBy": [ "/es-abstract", "/is-array-buffer", "/typed-array-buffer", "/typed-array-byte-length", "/typed-array-byte-offset", "/typed-array-length", "/util" ], "_resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "_shasum": "d0bab5686ef4a76f7a73097b95470ab199c57d4a", "_spec": "is-typed-array@^1.1.3", "_where": "/builds/gitlab/osm/ng-ui/node_modules/util", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true, "startingVersion": "1.1.10" }, "bugs": { "url": "https://github.com/inspect-js/is-typed-array/issues" }, "contributors": [ { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" } ], "dependencies": { "which-typed-array": { "_from": "which-typed-array@^1.1.2", "_id": "which-typed-array@1.1.13", "_inBundle": false, "_integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "_location": "/which-typed-array", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "which-typed-array@^1.1.2", "name": "which-typed-array", "escapedName": "which-typed-array", "rawSpec": "^1.1.2", "saveSpec": "[Circular]", "fetchSpec": "^1.1.2" }, "_requiredBy": [ "/es-abstract", "/is-typed-array", "/util" ], "_resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", "_shasum": "870cd5be06ddb616f504e7b039c4c24898184d36", "_spec": "which-typed-array@^1.1.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/util", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/inspect-js/which-typed-array/issues" }, "contributors": [ { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" } ], "dependencies": {}, "deprecated": false, "description": "Which kind of Typed Array is this JavaScript value? Works cross-realm, without `instanceof`, and despite Symbol.toStringTag.", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "in-publish": "^2.0.1", "is-callable": "^1.2.7", "make-arrow-function": "^1.2.0", "make-generator-function": "^2.0.0", "npmignore": "^0.3.0", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", "tape": "^5.7.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/which-typed-array#readme", "keywords": [ "array", "TypedArray", "typed array", "which", "typed", "Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Uint16Array", "Int32Array", "Uint32Array", "Float32Array", "Float64Array", "ES6", "toStringTag", "Symbol.toStringTag", "@@toStringTag" ], "license": "MIT", "main": "index.js", "name": "which-typed-array", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git://github.com/inspect-js/which-typed-array.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run --silent lint", "test": "npm run tests-only && npm run test:harmony", "test:harmony": "nyc node --harmony --es-staging test", "tests-only": "nyc tape test", "version": "auto-changelog && git add CHANGELOG.md" }, "sideEffects": false, "testling": { "files": "test/index.js", "browsers": [ "iexplore/6.0..latest", "firefox/3.0..6.0", "firefox/15.0..latest", "firefox/nightly", "chrome/4.0..10.0", "chrome/20.0..latest", "chrome/canary", "opera/10.0..latest", "opera/next", "safari/4.0..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2" ] }, "version": "1.1.13", "readme": "# which-typed-array [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nWhich kind of Typed Array is this JavaScript value? Works cross-realm, without `instanceof`, and despite Symbol.toStringTag.\n\n## Example\n\n```js\nvar whichTypedArray = require('which-typed-array');\nvar assert = require('assert');\n\nassert.equal(false, whichTypedArray(undefined));\nassert.equal(false, whichTypedArray(null));\nassert.equal(false, whichTypedArray(false));\nassert.equal(false, whichTypedArray(true));\nassert.equal(false, whichTypedArray([]));\nassert.equal(false, whichTypedArray({}));\nassert.equal(false, whichTypedArray(/a/g));\nassert.equal(false, whichTypedArray(new RegExp('a', 'g')));\nassert.equal(false, whichTypedArray(new Date()));\nassert.equal(false, whichTypedArray(42));\nassert.equal(false, whichTypedArray(NaN));\nassert.equal(false, whichTypedArray(Infinity));\nassert.equal(false, whichTypedArray(new Number(42)));\nassert.equal(false, whichTypedArray('foo'));\nassert.equal(false, whichTypedArray(Object('foo')));\nassert.equal(false, whichTypedArray(function () {}));\nassert.equal(false, whichTypedArray(function* () {}));\nassert.equal(false, whichTypedArray(x => x * x));\nassert.equal(false, whichTypedArray([]));\n\nassert.equal('Int8Array', whichTypedArray(new Int8Array()));\nassert.equal('Uint8Array', whichTypedArray(new Uint8Array()));\nassert.equal('Uint8ClampedArray', whichTypedArray(new Uint8ClampedArray()));\nassert.equal('Int16Array', whichTypedArray(new Int16Array()));\nassert.equal('Uint16Array', whichTypedArray(new Uint16Array()));\nassert.equal('Int32Array', whichTypedArray(new Int32Array()));\nassert.equal('Uint32Array', whichTypedArray(new Uint32Array()));\nassert.equal('Float32Array', whichTypedArray(new Float32Array()));\nassert.equal('Float64Array', whichTypedArray(new Float64Array()));\nassert.equal('BigInt64Array', whichTypedArray(new BigInt64Array()));\nassert.equal('BigUint64Array', whichTypedArray(new BigUint64Array()));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/which-typed-array\n[npm-version-svg]: https://versionbadg.es/inspect-js/which-typed-array.svg\n[deps-svg]: https://david-dm.org/inspect-js/which-typed-array.svg\n[deps-url]: https://david-dm.org/inspect-js/which-typed-array\n[dev-deps-svg]: https://david-dm.org/inspect-js/which-typed-array/dev-status.svg\n[dev-deps-url]: https://david-dm.org/inspect-js/which-typed-array#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/which-typed-array.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/which-typed-array.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/which-typed-array.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=which-typed-array\n[codecov-image]: https://codecov.io/gh/inspect-js/which-typed-array/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/which-typed-array/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/which-typed-array\n[actions-url]: https://github.com/inspect-js/which-typed-array/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/which-typed-array", "error": "[Circular]", "extraneous": false, "_deduped": "which-typed-array" } }, "deprecated": false, "description": "Is this value a JS Typed Array? This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and despite ES6 Symbol.toStringTag.", "devDependencies": { "@ljharb/eslint-config": "^21.1.0", "aud": "^2.0.3", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "evalmd": "^0.0.19", "for-each": "^0.3.3", "has-tostringtag": "^1.0.0", "in-publish": "^2.0.1", "is-callable": "^1.2.7", "make-arrow-function": "^1.2.0", "make-generator-function": "^2.0.0", "npmignore": "^0.3.0", "nyc": "^10.3.2", "object-inspect": "^1.12.3", "safe-publish-latest": "^2.0.0", "tape": "^5.6.5" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/is-typed-array#readme", "keywords": [ "array", "TypedArray", "typed array", "is", "typed", "Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Uint16Array", "Int32Array", "Uint32Array", "Float32Array", "Float64Array", "ES6", "toStringTag", "Symbol.toStringTag", "@@toStringTag" ], "license": "MIT", "main": "index.js", "name": "is-typed-array", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git://github.com/inspect-js/is-typed-array.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "npx aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prelint": "evalmd README.md", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run --silent lint", "test": "npm run tests-only && npm run test:harmony", "test:harmony": "nyc node --harmony --es-staging test", "tests-only": "nyc tape test", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/index.js", "browsers": [ "iexplore/6.0..latest", "firefox/3.0..6.0", "firefox/15.0..latest", "firefox/nightly", "chrome/4.0..10.0", "chrome/20.0..latest", "chrome/canary", "opera/10.0..latest", "opera/next", "safari/4.0..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2" ] }, "version": "1.1.12", "readme": "# is-typed-array [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nIs this value a JS Typed Array? This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and despite ES6 Symbol.toStringTag.\n\n## Example\n\n```js\nvar isTypedArray = require('is-typed-array');\nvar assert = require('assert');\n\nassert.equal(false, isTypedArray(undefined));\nassert.equal(false, isTypedArray(null));\nassert.equal(false, isTypedArray(false));\nassert.equal(false, isTypedArray(true));\nassert.equal(false, isTypedArray([]));\nassert.equal(false, isTypedArray({}));\nassert.equal(false, isTypedArray(/a/g));\nassert.equal(false, isTypedArray(new RegExp('a', 'g')));\nassert.equal(false, isTypedArray(new Date()));\nassert.equal(false, isTypedArray(42));\nassert.equal(false, isTypedArray(NaN));\nassert.equal(false, isTypedArray(Infinity));\nassert.equal(false, isTypedArray(new Number(42)));\nassert.equal(false, isTypedArray('foo'));\nassert.equal(false, isTypedArray(Object('foo')));\nassert.equal(false, isTypedArray(function () {}));\nassert.equal(false, isTypedArray(function* () {}));\nassert.equal(false, isTypedArray(x => x * x));\nassert.equal(false, isTypedArray([]));\n\nassert.ok(isTypedArray(new Int8Array()));\nassert.ok(isTypedArray(new Uint8Array()));\nassert.ok(isTypedArray(new Uint8ClampedArray()));\nassert.ok(isTypedArray(new Int16Array()));\nassert.ok(isTypedArray(new Uint16Array()));\nassert.ok(isTypedArray(new Int32Array()));\nassert.ok(isTypedArray(new Uint32Array()));\nassert.ok(isTypedArray(new Float32Array()));\nassert.ok(isTypedArray(new Float64Array()));\nassert.ok(isTypedArray(new BigInt64Array()));\nassert.ok(isTypedArray(new BigUint64Array()));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/is-typed-array\n[npm-version-svg]: https://versionbadg.es/inspect-js/is-typed-array.svg\n[deps-svg]: https://david-dm.org/inspect-js/is-typed-array.svg\n[deps-url]: https://david-dm.org/inspect-js/is-typed-array\n[dev-deps-svg]: https://david-dm.org/inspect-js/is-typed-array/dev-status.svg\n[dev-deps-url]: https://david-dm.org/inspect-js/is-typed-array#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/is-typed-array.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/is-typed-array.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/is-typed-array.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=is-typed-array\n[codecov-image]: https://codecov.io/gh/inspect-js/is-typed-array/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/is-typed-array/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-typed-array\n[actions-url]: https://github.com/inspect-js/is-typed-array/actions\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "which-typed-array": "^1.1.11" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/is-typed-array", "error": "[Circular]", "extraneous": false }, "which-typed-array": { "_from": "which-typed-array@^1.1.2", "_id": "which-typed-array@1.1.13", "_inBundle": false, "_integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "_location": "/which-typed-array", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", "_shasum": "870cd5be06ddb616f504e7b039c4c24898184d36", "_spec": "which-typed-array@^1.1.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/util", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "contributors": "[Circular]", "dependencies": { "available-typed-arrays": { "_from": "available-typed-arrays@^1.0.5", "_id": "available-typed-arrays@1.0.5", "_inBundle": false, "_integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "_location": "/available-typed-arrays", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "available-typed-arrays@^1.0.5", "name": "available-typed-arrays", "escapedName": "available-typed-arrays", "rawSpec": "^1.0.5", "saveSpec": "[Circular]", "fetchSpec": "^1.0.5" }, "_requiredBy": [ "/es-abstract", "/typed-array-byte-offset", "/which-typed-array" ], "_resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "_shasum": "92f95616501069d07d10edb2fc37d3e1c65123b7", "_spec": "available-typed-arrays@^1.0.5", "_where": "/builds/gitlab/osm/ng-ui/node_modules/which-typed-array", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true }, "bugs": { "url": "https://github.com/inspect-js/available-typed-arrays/issues" }, "deprecated": false, "description": "Returns an array of Typed Array names that are available in the current environment", "devDependencies": { "@ljharb/eslint-config": "^18.0.0", "array.prototype.every": "^1.1.2", "aud": "^1.1.5", "auto-changelog": "^2.3.0", "eslint": "^7.32.0", "evalmd": "^0.0.19", "isarray": "^2.0.5", "nyc": "^10.3.2", "safe-publish-latest": "^1.1.4", "tape": "^5.3.1" }, "engines": { "node": ">= 0.4" }, "exports": { ".": [ { "default": "./index.js" }, "./index.js" ], "./package": "./package.json", "./package.json": "./package.json" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/available-typed-arrays#readme", "keywords": [ "typed", "arrays", "Float32Array", "Float64Array", "Int8Array", "Int16Array", "Int32Array", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "BigInt64Array", "BigUint64Array" ], "license": "MIT", "main": "index.js", "name": "available-typed-arrays", "repository": { "type": "git", "url": "git+https://github.com/inspect-js/available-typed-arrays.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prelint": "evalmd README.md", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only && npm run test:harmony", "test:harmony": "nyc node --harmony --es-staging test", "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "sideEffects": false, "type": "commonjs", "version": "1.0.5", "readme": "# available-typed-arrays [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nReturns an array of Typed Array names that are available in the current environment.\n\n## Example\n\n```js\nvar availableTypedArrays = require('available-typed-arrays');\nvar assert = require('assert');\n\nassert.deepStrictEqual(availableTypedArrays(), [\n\t'Int8Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray',\n\t'Int16Array',\n\t'Uint16Array',\n\t'Int32Array',\n\t'Uint32Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'BigInt64Array',\n\t'BigUint64Array'\n].sort());\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/available-typed-arrays\n[2]: https://versionbadg.es/inspect-js/available-typed-arrays.svg\n[5]: https://david-dm.org/inspect-js/available-typed-arrays.svg\n[6]: https://david-dm.org/inspect-js/available-typed-arrays\n[7]: https://david-dm.org/inspect-js/available-typed-arrays/dev-status.svg\n[8]: https://david-dm.org/inspect-js/available-typed-arrays#info=devDependencies\n[11]: https://nodei.co/npm/available-typed-arrays.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/available-typed-arrays.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/available-typed-arrays.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=available-typed-arrays\n[codecov-image]: https://codecov.io/gh/inspect-js/available-typed-arrays/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/available-typed-arrays/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/available-typed-arrays\n[actions-url]: https://github.com/inspect-js/available-typed-arrays/actions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/available-typed-arrays", "error": "[Circular]", "extraneous": false }, "call-bind": { "_from": "call-bind@^1.0.2", "_id": "call-bind@1.0.5", "_inBundle": false, "_integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "_location": "/call-bind", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", "_shasum": "6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513", "_spec": "call-bind@^1.0.2", "_where": "/builds/gitlab/osm/ng-ui/node_modules/is-arguments", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Robustly `.call.bind()` a function", "devDependencies": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/ljharb/call-bind#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "call-bind", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "testling": "[Circular]", "version": "1.0.5", "readme": "# call-bind [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nRobustly `.call.bind()` a function.\n\n## Getting started\n\n```sh\nnpm install --save call-bind\n```\n\n## Usage/Examples\n\n```js\nconst assert = require('assert');\nconst callBind = require('call-bind');\nconst callBound = require('call-bind/callBound');\n\nfunction f(a, b) {\n\tassert.equal(this, 1);\n\tassert.equal(a, 2);\n\tassert.equal(b, 3);\n\tassert.equal(arguments.length, 2);\n}\n\nconst fBound = callBind(f);\n\nconst slice = callBound('Array.prototype.slice');\n\ndelete Function.prototype.call;\ndelete Function.prototype.bind;\n\nfBound(1, 2, 3);\n\nassert.deepEqual(slice([1, 2, 3, 4], 1, -1), [2, 3]);\n```\n\n## Tests\n\nClone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/call-bind\n[npm-version-svg]: https://versionbadg.es/ljharb/call-bind.svg\n[deps-svg]: https://david-dm.org/ljharb/call-bind.svg\n[deps-url]: https://david-dm.org/ljharb/call-bind\n[dev-deps-svg]: https://david-dm.org/ljharb/call-bind/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/call-bind#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/call-bind.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/call-bind.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/call-bind.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=call-bind\n[codecov-image]: https://codecov.io/gh/ljharb/call-bind/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/call-bind/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind\n[actions-url]: https://github.com/ljharb/call-bind/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "error": "[Circular]", "extraneous": false, "_deduped": "call-bind" }, "for-each": { "_from": "for-each@^0.3.3", "_id": "for-each@0.3.3", "_inBundle": false, "_integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "_location": "/for-each", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "for-each@^0.3.3", "name": "for-each", "escapedName": "for-each", "rawSpec": "^0.3.3", "saveSpec": "[Circular]", "fetchSpec": "^0.3.3" }, "_requiredBy": [ "/typed-array-byte-length", "/typed-array-byte-offset", "/typed-array-length", "/which-typed-array" ], "_resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "_shasum": "69b447e88a0a5d32c3e7084f3f1710034b21376e", "_spec": "for-each@^0.3.3", "_where": "/builds/gitlab/osm/ng-ui/node_modules/which-typed-array", "author": { "name": "Raynos", "email": "raynos2@gmail.com" }, "bugs": { "url": "https://github.com/Raynos/for-each/issues", "email": "raynos2@gmail.com" }, "contributors": [ { "name": "Jake Verbaten" }, { "name": "Jordan Harband", "url": "https://github.com/ljharb" } ], "dependencies": { "is-callable": { "_from": "is-callable@^1.1.3", "_id": "is-callable@1.2.7", "_inBundle": false, "_integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "_location": "/is-callable", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "is-callable@^1.1.3", "name": "is-callable", "escapedName": "is-callable", "rawSpec": "^1.1.3", "saveSpec": "[Circular]", "fetchSpec": "^1.1.3" }, "_requiredBy": [ "/es-abstract", "/es-to-primitive", "/for-each" ], "_resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "_shasum": "3bc2a85ea742d9e36205dcacdd72ca1fdc51b055", "_spec": "is-callable@^1.1.3", "_where": "/builds/gitlab/osm/ng-ui/node_modules/for-each", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" }, "auto-changelog": { "output": "CHANGELOG.md", "template": "keepachangelog", "unreleased": false, "commitLimit": false, "backfillLimit": false, "hideCredit": true, "startingVersion": "v1.2.5" }, "bugs": { "url": "https://github.com/inspect-js/is-callable/issues" }, "contributors": [ { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" } ], "deprecated": false, "description": "Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag.", "devDependencies": { "@ljharb/eslint-config": "^21.0.0", "aud": "^2.0.0", "auto-changelog": "^2.4.0", "available-typed-arrays": "^1.0.5", "eclint": "^2.8.1", "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", "for-each": "^0.3.3", "has-tostringtag": "^1.0.0", "make-arrow-function": "^1.2.0", "make-async-function": "^1.0.0", "make-generator-function": "^2.0.0", "npmignore": "^0.3.0", "nyc": "^10.3.2", "object-inspect": "^1.12.2", "rimraf": "^2.7.1", "safe-publish-latest": "^2.0.0", "tape": "^5.6.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "homepage": "https://github.com/inspect-js/is-callable#readme", "keywords": [ "Function", "function", "callable", "generator", "generator function", "arrow", "arrow function", "ES6", "toStringTag", "@@toStringTag" ], "license": "MIT", "main": "index.js", "name": "is-callable", "publishConfig": { "ignore": [ ".github/workflows" ] }, "repository": { "type": "git", "url": "git://github.com/inspect-js/is-callable.git" }, "scripts": { "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prelint": "eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run --silent lint", "test": "npm run tests-only --", "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, "testling": { "files": "test/index.js", "browsers": [ "iexplore/6.0..latest", "firefox/3.0..6.0", "firefox/15.0..latest", "firefox/nightly", "chrome/4.0..10.0", "chrome/20.0..latest", "chrome/canary", "opera/10.0..latest", "opera/next", "safari/4.0..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2" ] }, "version": "1.2.7", "readme": "# is-callable [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nIs this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag.\n\n## Supported engines\nAutomatically tested in every minor version of node.\n\nManually tested in:\n - Safari: v4 - v15 (4, 5, 5.1, 6.0.5, 6.2, 7.1, 8, 9.1.3, 10.1.2, 11.1.2, 12.1, 13.1.2, 14.1.2, 15.3, 15.6.1)\n - Note: Safari 9 has `class`, but `Function.prototype.toString` hides that progeny and makes them look like functions, so `class` constructors will be reported by this package as callable, when they are not in fact callable.\n - Chrome: v15 - v81, v83 - v106(every integer version)\n - Note: This includes Edge v80+ and Opera v15+, which matches Chrome\n - Firefox: v3, v3.6, v4 - v105 (every integer version)\n - Note: v45 - v54 has `class`, but `Function.prototype.toString` hides that progeny and makes them look like functions, so `class` constructors will be reported by this package as callable, when they are not in fact callable.\n - Note: in v42 - v63, `Function.prototype.toString` throws on HTML element constructors, or a Proxy to a function\n - Note: in v20 - v35, HTML element constructors are not callable, despite having typeof `function`.\n - Note: in v19, `document.all` is not callable.\n - IE: v6 - v11(every integer version\n - Opera: v11.1, v11.5, v11.6, v12.1, v12.14, v12.15, v12.16, v15+ v15+ matches Chrome\n\n## Example\n\n```js\nvar isCallable = require('is-callable');\nvar assert = require('assert');\n\nassert.notOk(isCallable(undefined));\nassert.notOk(isCallable(null));\nassert.notOk(isCallable(false));\nassert.notOk(isCallable(true));\nassert.notOk(isCallable([]));\nassert.notOk(isCallable({}));\nassert.notOk(isCallable(/a/g));\nassert.notOk(isCallable(new RegExp('a', 'g')));\nassert.notOk(isCallable(new Date()));\nassert.notOk(isCallable(42));\nassert.notOk(isCallable(NaN));\nassert.notOk(isCallable(Infinity));\nassert.notOk(isCallable(new Number(42)));\nassert.notOk(isCallable('foo'));\nassert.notOk(isCallable(Object('foo')));\n\nassert.ok(isCallable(function () {}));\nassert.ok(isCallable(function* () {}));\nassert.ok(isCallable(x => x * x));\n```\n\n## Install\n\nInstall with\n\n```\nnpm install is-callable\n```\n\n## Tests\n\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/is-callable\n[2]: https://versionbadg.es/inspect-js/is-callable.svg\n[5]: https://david-dm.org/inspect-js/is-callable.svg\n[6]: https://david-dm.org/inspect-js/is-callable\n[7]: https://david-dm.org/inspect-js/is-callable/dev-status.svg\n[8]: https://david-dm.org/inspect-js/is-callable#info=devDependencies\n[11]: https://nodei.co/npm/is-callable.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/is-callable.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/is-callable.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=is-callable\n[codecov-image]: https://codecov.io/gh/inspect-js/is-callable/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/is-callable/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-callable\n[actions-url]: https://github.com/inspect-js/is-callable/actions\n", "readmeFilename": "README.md", "dependencies": {}, "optionalDependencies": {}, "_dependencies": {}, "path": "/builds/gitlab/osm/ng-ui/node_modules/is-callable", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "A better forEach", "devDependencies": { "@ljharb/eslint-config": "^12.2.1", "eslint": "^4.19.1", "nsp": "^3.2.1", "tape": "^4.9.0" }, "homepage": "https://github.com/Raynos/for-each", "keywords": [], "license": "MIT", "licenses": [ { "type": "MIT", "url": "http://github.com/Raynos/for-each/raw/master/LICENSE" } ], "main": "index", "name": "for-each", "repository": { "type": "git", "url": "git://github.com/Raynos/for-each.git" }, "scripts": { "lint": "eslint *.js test/*.js", "posttest": "npm run security", "pretest": "npm run lint", "security": "nsp check", "test": "npm run tests-only", "tests-only": "node test/test" }, "testling": { "files": "test/test.js", "browsers": [ "iexplore/6.0..latest", "firefox/3.0..6.0", "firefox/15.0..latest", "firefox/nightly", "chrome/4.0..10.0", "chrome/20.0..latest", "chrome/canary", "opera/10.0..latest", "opera/next", "safari/4.0..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2" ] }, "version": "0.3.3", "readme": "# for-each [![build status][1]][2]\n\n[![browser support][3]][4]\n\nA better forEach.\n\n## Example\n\nLike `Array.prototype.forEach` but works on objects.\n\n```js\nvar forEach = require(\"for-each\")\n\nforEach({ key: \"value\" }, function (value, key, object) {\n /* code */\n})\n```\n\nAs a bonus, it's also a perfectly function shim/polyfill for arrays too!\n\n```js\nvar forEach = require(\"for-each\")\n\nforEach([1, 2, 3], function (value, index, array) {\n /* code */\n})\n```\n\n## Installation\n\n`npm install for-each`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n [1]: https://secure.travis-ci.org/Raynos/for-each.png\n [2]: http://travis-ci.org/Raynos/for-each\n [3]: https://ci.testling.com/Raynos/for-each.png\n [4]: https://ci.testling.com/Raynos/for-each\n\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "is-callable": "^1.1.3" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/for-each", "error": "[Circular]", "extraneous": false }, "gopd": { "_from": "gopd@^1.0.1", "_id": "gopd@1.0.1", "_inBundle": false, "_integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "_location": "/gopd", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "_shasum": "29ff76de69dac7489b7c0918a5788e56477c332c", "_spec": "gopd@^1.0.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/set-function-length", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "dependencies": { "get-intrinsic": { "_from": "get-intrinsic@^1.2.1", "_id": "get-intrinsic@1.2.2", "_inBundle": false, "_integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "_location": "/get-intrinsic", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "_shasum": "281b7622971123e1ef4b3c90fd7539306da93f3b", "_spec": "get-intrinsic@^1.2.1", "_where": "/builds/gitlab/osm/ng-ui/node_modules/call-bind", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Get and robustly cache all JS language-level intrinsics at first require time", "devDependencies": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/ljharb/get-intrinsic#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "get-intrinsic", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "testling": "[Circular]", "version": "1.2.2", "readme": "# get-intrinsic [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nGet and robustly cache all JS language-level intrinsics at first require time.\n\nSee the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference.\n\n## Example\n\n```js\nvar GetIntrinsic = require('get-intrinsic');\nvar assert = require('assert');\n\n// static methods\nassert.equal(GetIntrinsic('%Math.pow%'), Math.pow);\nassert.equal(Math.pow(2, 3), 8);\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\ndelete Math.pow;\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\n\n// instance methods\nvar arr = [1];\nassert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push);\nassert.deepEqual(arr, [1]);\n\narr.push(2);\nassert.deepEqual(arr, [1, 2]);\n\nGetIntrinsic('%Array.prototype.push%').call(arr, 3);\nassert.deepEqual(arr, [1, 2, 3]);\n\ndelete Array.prototype.push;\nGetIntrinsic('%Array.prototype.push%').call(arr, 4);\nassert.deepEqual(arr, [1, 2, 3, 4]);\n\n// missing features\ndelete JSON.parse; // to simulate a real intrinsic that is missing in the environment\nassert.throws(() => GetIntrinsic('%JSON.parse%'));\nassert.equal(undefined, GetIntrinsic('%JSON.parse%', true));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n## Security\n\nPlease email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.\n\n[package-url]: https://npmjs.org/package/get-intrinsic\n[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg\n[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg\n[deps-url]: https://david-dm.org/ljharb/get-intrinsic\n[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic\n[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic\n[actions-url]: https://github.com/ljharb/get-intrinsic/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/get-intrinsic", "error": "[Circular]", "extraneous": false, "_deduped": "get-intrinsic" } }, "deprecated": false, "description": "`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.", "devDependencies": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/ljharb/gopd#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "gopd", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "version": "1.0.1", "readme": "# gopd [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\n`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.\n\n## Usage\n\n```javascript\nvar gOPD = require('gopd');\nvar assert = require('assert');\n\nif (gOPD) {\n\tassert.equal(typeof gOPD, 'function', 'descriptors supported');\n\t// use gOPD like Object.getOwnPropertyDescriptor here\n} else {\n\tassert.ok(!gOPD, 'descriptors not supported');\n}\n```\n\n[package-url]: https://npmjs.org/package/gopd\n[npm-version-svg]: https://versionbadg.es/ljharb/gopd.svg\n[deps-svg]: https://david-dm.org/ljharb/gopd.svg\n[deps-url]: https://david-dm.org/ljharb/gopd\n[dev-deps-svg]: https://david-dm.org/ljharb/gopd/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/gopd#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/gopd.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/gopd.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/gopd.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=gopd\n[codecov-image]: https://codecov.io/gh/ljharb/gopd/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/gopd/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/gopd\n[actions-url]: https://github.com/ljharb/gopd/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/gopd", "error": "[Circular]", "extraneous": false }, "has-tostringtag": { "_from": "has-tostringtag@^1.0.0", "_id": "has-tostringtag@1.0.0", "_inBundle": false, "_integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "_location": "/has-tostringtag", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "_shasum": "7e133818a7d394734f941e73c3d3f9291e658b25", "_spec": "has-tostringtag@^1.0.0", "_where": "/builds/gitlab/osm/ng-ui/node_modules/is-arguments", "author": "[Circular]", "auto-changelog": "[Circular]", "bugs": "[Circular]", "contributors": "[Circular]", "dependencies": {}, "deprecated": false, "description": "Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.", "devDependencies": "[Circular]", "engines": "[Circular]", "exports": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/inspect-js/has-tostringtag#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "has-tostringtag", "repository": "[Circular]", "scripts": "[Circular]", "version": "1.0.0", "readme": "# has-tostringtag [![Version Badge][2]][1]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nDetermine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.\n\n## Example\n\n```js\nvar hasSymbolToStringTag = require('has-tostringtag');\n\nhasSymbolToStringTag() === true; // if the environment has native Symbol.toStringTag support. Not polyfillable, not forgeable.\n\nvar hasSymbolToStringTagKinda = require('has-tostringtag/shams');\nhasSymbolToStringTagKinda() === true; // if the environment has a Symbol.toStringTag sham that mostly follows the spec.\n```\n\n## Supported Symbol shams\n - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)\n - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/has-tostringtag\n[2]: https://versionbadg.es/inspect-js/has-tostringtag.svg\n[5]: https://david-dm.org/inspect-js/has-tostringtag.svg\n[6]: https://david-dm.org/inspect-js/has-tostringtag\n[7]: https://david-dm.org/inspect-js/has-tostringtag/dev-status.svg\n[8]: https://david-dm.org/inspect-js/has-tostringtag#info=devDependencies\n[11]: https://nodei.co/npm/has-tostringtag.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-tostringtag.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-tostringtag.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-tostringtag\n[codecov-image]: https://codecov.io/gh/inspect-js/has-tostringtag/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-tostringtag/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-tostringtag\n[actions-url]: https://github.com/inspect-js/has-tostringtag/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/has-tostringtag", "error": "[Circular]", "extraneous": false, "_deduped": "has-tostringtag" } }, "deprecated": false, "description": "Which kind of Typed Array is this JavaScript value? Works cross-realm, without `instanceof`, and despite Symbol.toStringTag.", "devDependencies": "[Circular]", "engines": "[Circular]", "funding": "[Circular]", "homepage": "https://github.com/inspect-js/which-typed-array#readme", "keywords": "[Circular]", "license": "MIT", "main": "index.js", "name": "which-typed-array", "publishConfig": "[Circular]", "repository": "[Circular]", "scripts": "[Circular]", "sideEffects": false, "testling": "[Circular]", "version": "1.1.13", "readme": "# which-typed-array [![Version Badge][npm-version-svg]][package-url]\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nWhich kind of Typed Array is this JavaScript value? Works cross-realm, without `instanceof`, and despite Symbol.toStringTag.\n\n## Example\n\n```js\nvar whichTypedArray = require('which-typed-array');\nvar assert = require('assert');\n\nassert.equal(false, whichTypedArray(undefined));\nassert.equal(false, whichTypedArray(null));\nassert.equal(false, whichTypedArray(false));\nassert.equal(false, whichTypedArray(true));\nassert.equal(false, whichTypedArray([]));\nassert.equal(false, whichTypedArray({}));\nassert.equal(false, whichTypedArray(/a/g));\nassert.equal(false, whichTypedArray(new RegExp('a', 'g')));\nassert.equal(false, whichTypedArray(new Date()));\nassert.equal(false, whichTypedArray(42));\nassert.equal(false, whichTypedArray(NaN));\nassert.equal(false, whichTypedArray(Infinity));\nassert.equal(false, whichTypedArray(new Number(42)));\nassert.equal(false, whichTypedArray('foo'));\nassert.equal(false, whichTypedArray(Object('foo')));\nassert.equal(false, whichTypedArray(function () {}));\nassert.equal(false, whichTypedArray(function* () {}));\nassert.equal(false, whichTypedArray(x => x * x));\nassert.equal(false, whichTypedArray([]));\n\nassert.equal('Int8Array', whichTypedArray(new Int8Array()));\nassert.equal('Uint8Array', whichTypedArray(new Uint8Array()));\nassert.equal('Uint8ClampedArray', whichTypedArray(new Uint8ClampedArray()));\nassert.equal('Int16Array', whichTypedArray(new Int16Array()));\nassert.equal('Uint16Array', whichTypedArray(new Uint16Array()));\nassert.equal('Int32Array', whichTypedArray(new Int32Array()));\nassert.equal('Uint32Array', whichTypedArray(new Uint32Array()));\nassert.equal('Float32Array', whichTypedArray(new Float32Array()));\nassert.equal('Float64Array', whichTypedArray(new Float64Array()));\nassert.equal('BigInt64Array', whichTypedArray(new BigInt64Array()));\nassert.equal('BigUint64Array', whichTypedArray(new BigUint64Array()));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/which-typed-array\n[npm-version-svg]: https://versionbadg.es/inspect-js/which-typed-array.svg\n[deps-svg]: https://david-dm.org/inspect-js/which-typed-array.svg\n[deps-url]: https://david-dm.org/inspect-js/which-typed-array\n[dev-deps-svg]: https://david-dm.org/inspect-js/which-typed-array/dev-status.svg\n[dev-deps-url]: https://david-dm.org/inspect-js/which-typed-array#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/which-typed-array.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/which-typed-array.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/which-typed-array.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=which-typed-array\n[codecov-image]: https://codecov.io/gh/inspect-js/which-typed-array/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/which-typed-array/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/which-typed-array\n[actions-url]: https://github.com/inspect-js/which-typed-array/actions\n", "readmeFilename": "README.md", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/which-typed-array", "error": "[Circular]", "extraneous": false } }, "deprecated": false, "description": "Node.js's util module for all engines", "devDependencies": { "airtap": "~1.0.0", "core-js": "^3.6.5", "is-async-supported": "~1.2.0", "object.assign": "~4.1.0", "object.entries": "^1.1.0", "run-series": "~1.1.4", "safe-buffer": "^5.1.2", "tape": "~4.9.0" }, "files": [ "util.js", "support" ], "homepage": "https://github.com/browserify/node-util", "keywords": [ "util" ], "license": "MIT", "main": "./util.js", "name": "util", "repository": { "type": "git", "url": "git://github.com/browserify/node-util.git" }, "scripts": { "test": "node test/node/index.js", "test:browsers": "airtap test/browser/index.js", "test:browsers:local": "npm run test:browsers -- --local", "test:browsers:with-polyfills": "airtap test/browser/with-polyfills.js", "test:browsers:with-polyfills:local": "npm run test:browsers:with-polyfills -- --local" }, "version": "0.12.5", "readme": "# util [![Build Status](https://travis-ci.org/browserify/node-util.png?branch=master)](https://travis-ci.org/browserify/node-util)\n\n> Node.js's [util][util] module for all engines.\n\nThis implements the Node.js [`util`][util] module for environments that do not have it, like browsers.\n\n## Install\n\nYou usually do not have to install `util` yourself. If your code runs in Node.js, `util` is built in. If your code runs in the browser, bundlers like [browserify](https://github.com/browserify/browserify) or [webpack](https://github.com/webpack/webpack) (up to version 4 -- [see this documentation](https://webpack.js.org/configuration/resolve/#resolvefallback) for how to include polyfills like `util` in webpack 5+) also include the `util` module.\n\nBut if none of those apply, with npm do:\n\n```shell\nnpm install util\n```\n\n## Usage\n\n```javascript\nvar util = require('util')\nvar EventEmitter = require('events')\n\nfunction MyClass() { EventEmitter.call(this) }\nutil.inherits(MyClass, EventEmitter)\n```\n\n## Browser Support\n\nThe `util` module uses ES5 features. If you need to support very old browsers like IE8, use a shim like [`es5-shim`](https://www.npmjs.com/package/es5-shim). You need both the shim and the sham versions of `es5-shim`.\n\nTo use `util.promisify` and `util.callbackify`, Promises must already be available. If you need to support browsers like IE11 that do not support Promises, use a shim. [es6-promise](https://github.com/stefanpenner/es6-promise) is a popular one but there are many others available on npm.\n\n## API\n\nSee the [Node.js util docs][util]. `util` currently supports the Node 8 LTS API. However, some of the methods are outdated. The `inspect` and `format` methods included in this module are a lot more simple and barebones than the ones in Node.js.\n\n## Contributing\n\nPRs are very welcome! The main way to contribute to `util` is by porting features, bugfixes and tests from Node.js. Ideally, code contributions to this module are copy-pasted from Node.js and transpiled to ES5, rather than reimplemented from scratch. Matching the Node.js code as closely as possible makes maintenance simpler when new changes land in Node.js.\nThis module intends to provide exactly the same API as Node.js, so features that are not available in the core `util` module will not be accepted. Feature requests should instead be directed at [nodejs/node](https://github.com/nodejs/node) and will be added to this module once they are implemented in Node.js.\n\nIf there is a difference in behaviour between Node.js's `util` module and this module, please open an issue!\n\n## License\n\n[MIT](./LICENSE)\n\n[util]: https://nodejs.org/docs/latest-v8.x/api/util.html\n", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/util", "error": "[Circular]", "extraneous": false }, "zone.js": { "_from": "zone.js@~0.11.8", "_id": "zone.js@0.11.8", "_inBundle": false, "_integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", "_location": "/zone.js", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, "raw": "zone.js@~0.11.8", "name": "zone.js", "escapedName": "zone.js", "rawSpec": "~0.11.8", "saveSpec": "[Circular]", "fetchSpec": "~0.11.8" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", "_shasum": "40dea9adc1ad007b5effb2bfed17f350f1f46a21", "_spec": "zone.js@~0.11.8", "_where": "/builds/gitlab/osm/ng-ui", "author": { "name": "Brian Ford" }, "bugs": { "url": "https://github.com/angular/angular/issues" }, "dependencies": { "tslib": { "_from": "tslib@^2.5.0", "_id": "tslib@2.6.2", "_inBundle": false, "_integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "_location": "/tslib", "_phantomChildren": "[Circular]", "_requested": "[Circular]", "_requiredBy": "[Circular]", "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "_shasum": "703ac29425e7b37cd6fd456e92404d46d1f3e4ae", "_spec": "tslib@^2.5.0", "_where": "/builds/gitlab/osm/ng-ui", "author": "[Circular]", "bugs": "[Circular]", "deprecated": false, "description": "Runtime library for TypeScript helper functions", "exports": "[Circular]", "homepage": "https://www.typescriptlang.org/", "jsnext:main": "tslib.es6.js", "keywords": "[Circular]", "license": "0BSD", "main": "tslib.js", "module": "tslib.es6.js", "name": "tslib", "repository": "[Circular]", "sideEffects": false, "typings": "tslib.d.ts", "version": "2.6.2", "readme": "# tslib\r\n\r\nThis is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"importHelpers\": true\r\n }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"amd\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n \"compilerOptions\": {\r\n \"module\": \"system\",\r\n \"importHelpers\": true,\r\n \"baseUrl\": \"./\",\r\n \"paths\": {\r\n \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n }\r\n }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n", "readmeFilename": "README.md", "dependencies": {}, "devDependencies": "[Circular]", "optionalDependencies": "[Circular]", "_dependencies": "[Circular]", "path": "/builds/gitlab/osm/ng-ui/node_modules/tslib", "error": "[Circular]", "extraneous": false, "peerMissing": "[Circular]", "_deduped": "tslib" } }, "deprecated": false, "description": "Zones for JavaScript", "devDependencies": { "@externs/nodejs": "^1.5.0", "@types/node": "^10.9.4", "domino": "2.1.6", "google-closure-compiler": "^20220719.0.0", "jest": "^26.4", "mocha": "^10.0.0", "mock-require": "3.0.3", "promises-aplus-tests": "^2.1.2", "typescript": "~4.7.2" }, "es2015": "./fesm2015/zone.js", "fesm2015": "./fesm2015/zone.js", "homepage": "https://github.com/angular/angular#readme", "license": "MIT", "main": "./bundles/zone.umd.js", "module": "./fesm2015/zone.js", "name": "zone.js", "publishConfig": { "registry": "https://wombat-dressing-room.appspot.com" }, "repository": { "type": "git", "url": "git://github.com/angular/angular.git", "directory": "packages/zone.js" }, "scripts": { "closuretest": "./scripts/closure/closure_compiler.sh", "electrontest": "cd test/extra && node electron.js", "jest:nodetest": "jest --config ./test/jest/jest.node.config.js ./test/jest/jest.spec.js", "jest:test": "jest --config ./test/jest/jest.config.js ./test/jest/jest.spec.js", "promisefinallytest": "tsc -p . && mocha ./test/promise/promise.finally.spec.js", "promisetest": "tsc -p . && node ./test/promise/promise-test.js" }, "typings": "./zone.d.ts", "version": "0.11.8", "readme": "# Zone.js\n\n[![CDNJS](https://img.shields.io/cdnjs/v/zone.js.svg)](https://cdnjs.com/libraries/zone.js)\n\nImplements _Zones_ for JavaScript, inspired by [Dart](https://dart.dev/articles/archive/zones).\n\n> If you're using zone.js via unpkg (i.e. using `https://unpkg.com/zone.js`)\n> and you're using any of the following libraries, make sure you import them first\n\n> * 'newrelic' as it patches global.Promise before zone.js does\n> * 'async-listener' as it patches global.setTimeout, global.setInterval before zone.js does\n> * 'continuation-local-storage' as it uses async-listener\n\n# NEW Zone.js POST-v0.6.0\n\nSee the new API [here](./lib/zone.ts).\n\nRead up on [Zone Primer](https://docs.google.com/document/d/1F5Ug0jcrm031vhSMJEOgp1l-Is-Vf0UCNDY-LsQtAIY).\n\n# BREAKING CHANGES since Zone.js v0.11.1\n\nPrior to `v0.11.1`, Zone.js provided two distribution bundle formats in the `dist` folder.\nThey were (1) `ES5` bundle distributed as `zone.js` and (2) `ES2015` bundle distributed as `zone-evergreen.js`.\nBoth of these bundles were in `UMD` format, and are used for Angular's differential-loading mechanism.\n\nStarting with `v0.11.1`, Zone.js follows the [Angular Package Format](https://docs.google.com/document/d/1CZC2rcpxffTDfRDs6p1cfbmKNLA6x5O-NtkJglDaBVs). Therefor the new Zone.js file layout is:\n\n- `bundles`: `ES5` bundle in `UMD` format.\n- `fesm2015`: `ES5` bundle in `ESM` format.\n- `dist`: `ES5` bundle in `UMD` format. This directory is present to keep backward compatibility.\n\nIf you are using `Angular CLI`, the `polyfills.ts` file will contain:\n\n```\nimport 'zone.js/dist/zone';\n```\n\nStarting with Zone.js `v0.11.1+` the import changes to:\n\n```\nimport 'zone.js';\n```\n\nPrior to `v0.11.1` the import would load the `ES5` bundle in `UMD` format from `dist/zone.js`. \nStarting with `v0.11.1` the import loads the `ES2015` bundle in `ESM` format instead.\n\nThis is a breaking change for legacy browsers such as `IE11`.\n\nFor backwards compatibility `zone.js` continues to distribute the same bundles under `dist`.\nTo restore the old behavior import from the `dist` directory instead like so:\n\n```\nimport 'zone.js/dist/zone';\n```\n\nFor details, please refer the [changelog](./CHANGELOG.md) and the [PR](https://github.com/angular/angular/pull/36540).\n\n## What's a Zone?\n\nA Zone is an execution context that persists across async tasks.\nYou can think of it as [thread-local storage](https://en.wikipedia.org/wiki/Thread-local_storage) for JavaScript VMs.\n\nSee this video from ng-conf 2014 for a detailed explanation:\n\n[![screenshot of the zone.js presentation and ng-conf 2014](./presentation.png)](//www.youtube.com/watch?v=3IqtmUscE_U&t=150)\n\n## See also\n* [async-listener](https://github.com/othiym23/async-listener) - a similar library for node\n* [Async stack traces in Chrome](https://www.html5rocks.com/en/tutorials/developertools/async-call-stack/)\n* [strongloop/zone](https://github.com/strongloop/zone) (Deprecated)\n* [vizone](https://github.com/gilbox/vizone) - control flow visualizer that uses zone.js\n\n## Standard API support\n\nzone.js patched most standard web APIs (such as DOM events, `XMLHttpRequest`, ...) and nodejs APIs\n(`EventEmitter`, `fs`, ...), for more details, please see [STANDARD-APIS.md](STANDARD-APIS.md).\n\n## Nonstandard API support\n\nWe are adding support to some nonstandard APIs, such as MediaQuery and\nNotification. Please see [NON-STANDARD-APIS.md](NON-STANDARD-APIS.md) for more details.\n\n## Examples\n\nYou can find some samples to describe how to use zone.js in [SAMPLE.md](SAMPLE.md).\n\n## Modules\n\nzone.js patches the async APIs described above, but those patches will have some overhead.\nStarting from zone.js v0.8.9, you can choose which web API module you want to patch.\nFor more details, please\nsee [MODULE.md](MODULE.md).\n\n## Bundles\n\nStarting with `v0.11.0`, `zone.js` uses `Angular Package Format` for bundle distribution.\n(For backwards compatibility, all bundles can still be accessed from `dist` folder.)\n\n|Bundle|Summary|\n|---|---|\n|`zone.js`| The default bundle. Contains the most used APIs such as `setTimeout/Promise/EventTarget...`, it also supports differential loading by importing this bundle using `import zone.js`. In legacy browsers it includes some additional patches such as `registerElement` and `EventTarget` like APIs.|\n|`zone-testing.js`| The bundle for zone testing support of `jasmine` / `mocha` / `jest`. Also includes test utility functions `async` / `fakeAsync` / `sync`.|\n|`zone-node.js`|The NodeJS support bundle.|\n|`zone-mix.js`|A mixed bundle which supports both browser and NodeJS. Useful for mixed environment such as Electron.|\n|`zone-externs.js`|the API definitions for `closure compiler`.|\n\nAdditional optional patches not included in the `zone.js` bundles which extend functionality.\nThe additional bundles can be found under `zone.js/plugins` folder.\nTo use these bundles, add the following code after importing zone.js bundle.\n\n```\nimport 'zone.js';\n// For example, import canvas patch\nimport 'zone.js/plugins/zone-patch-canvas';\n```\n\n|Patch|Summary|\n|---|---|\n|`webapis-media-query.js`|patch for `MediaQuery APIs`|\n|`webapis-notification.js`|patch for `Notification APIs`|\n|`webapis-rtc-peer-connection.js`|patch for `RTCPeerConnection APIs`|\n|`webapis-shadydom.js`|patch for `Shady DOM APIs`|\n|`zone-bluebird.js`|patch for `Bluebird APIs`|\n|`zone-error.js`|patch for `Error Global Object`, supports adding zone information to stack frame, and also removing unrelated stack frames from `zone.js` internally|\n|`zone-patch-canvas.js`|patch for `Canvas API`|\n|`zone-patch-cordova.js`|patch for `Cordova API`|\n|`zone-patch-electron.js`|patch for `Electron API`|\n|`zone-patch-fetch.js`|patch for `Fetch API`|\n|`zone-patch-jsonp.js`|helper utility for `jsonp API`|\n|`zone-patch-resize-observer.js`|patch for `ResizeObserver API`|\n|`zone-patch-rxjs.js`|patch for `rxjs API`|\n|`zone-patch-rxjs-fake-async.js`|patch for `rxjs fakeasync test`|\n|`zone-patch-socket-io.js`|patch for `socket-io`|\n|`zone-patch-user-media.js`|patch for `UserMedia API`|\n|`zone-patch-message-port.js`|patch for `MessagePort API`|\n\n## Promise A+ test passed\n[![Promises/A+ 1.1 compliant](https://promisesaplus.com/assets/logo-small.png)](https://promisesaplus.com/)\n\n## License\nMIT", "readmeFilename": "README.md", "optionalDependencies": {}, "_dependencies": { "tslib": "^2.3.0" }, "path": "/builds/gitlab/osm/ng-ui/node_modules/zone.js", "error": "[Circular]", "extraneous": false } }, "devDependencies": { "@angular-devkit/build-angular": "^14.2.10", "@angular-eslint/builder": "13.5.0", "@angular-eslint/eslint-plugin": "13.5.0", "@angular-eslint/eslint-plugin-template": "13.5.0", "@angular-eslint/schematics": "13.5.0", "@angular-eslint/template-parser": "13.5.0", "@angular/cli": "^14.2.10", "@angular/compiler-cli": "^14.2.12", "@angular/language-service": "^14.2.12", "@cypress/schematic": "^2.3.0", "@microsoft/eslint-plugin-sdl": "~0.2.0", "@types/jasmine": "~3.10.0", "@types/jasminewd2": "~2.0.3", "@types/jquery": "^3.3.31", "@types/node": "^8.10.59", "@typescript-eslint/eslint-plugin": "4.28.2", "@typescript-eslint/parser": "4.28.2", "cypress": "^12.10.0", "eslint": "^7.26.0", "eslint-plugin-compat": "~4.0.2", "eslint-plugin-deprecation": "~1.3.2", "eslint-plugin-import": "~2.26.0", "eslint-plugin-jest": "~27.1.5", "eslint-plugin-jsdoc": "~39.6.2", "eslint-plugin-jsx-a11y": "~6.6.1", "eslint-plugin-lodash": "~7.4.0", "eslint-plugin-no-null": "~1.0.2", "eslint-plugin-prefer-arrow": "~1.2.3", "eslint-plugin-security": "~1.5.0", "jasmine-core": "~4.0.0", "jasmine-spec-reporter": "~5.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.1.0", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "~1.7.0", "ng2-completer": "^3.0.3", "sass": "^1.58.0", "ts-node": "~7.0.0", "typescript": "~4.6.2" }, "readme": "\n\n## Angular Based OSM NG UI\nThis project focuses on the implementation of a web GUI to interact with the Northbound API of OSM. \n\nThe project is based on ([Angular](https://angular.io/)), a One framework for Mobile & desktop, app-design framework and development platform for creating efficient and sophisticated single-page web apps.\n\n## Table of Contents\n\n* [Community](#community)\n* [Getting Started](#getting-started)\n* [Prerequisites](#prerequisites)\n* [Installation](#installation)\n* [Running the application](#running-the-application)\n* [Check the lint](#check-the-lint)\n* [Supported Browsers](#supported-browsers)\n* [Deployment](#deployment)\n* [Built With](#built-with)\n* [Contributing](#contributing)\n* [Versioning](#versioning)\n* [License](#license)\n\n## Community\n\nContact [kumaran.m@tataelxsi.co.in](mailto:kumaran.m@tataelxsi.co.in), [rajesh.s@tataelxsi.co.in](mailto:rajesh.s@tataelxsi.co.in), [barath.r@tataelxsi.co.in](mailto:barath.r@tataelxsi.co.in) for architecture and design discussions, requests for help, features request and bug reports on NG UI. \n\n## Getting Started\n\nFollowing instructions in the sections below will get you a copy of the project up and running on your local machine for development and testing purposes. See Deployment section for notes on how to deploy the project on a live system.\n\n### Prerequisites\n\nAngular Setup, Install, & Build Guide\n\n1. Install Node.js from [here](https://nodejs.org/en/download/)\nTo check if nodejs is installed on your system, type below command. This will help you see the version of nodejs currently installed on your system.\n`node -version`\nAfter downloading Node.js, the node package manager (npm) should automatically be installed. Test it out by doing:\n`npm --version`\n2. Install Angluar CLI. [More details](https://cli.angular.io/) Angular can be installed Globally (or) Locally,\nInstall Globally\n`npm install -g @angular/cli`\nInstall Locally\n`npm install @angular/cli`\nAfter installation done you can check the version using below command. It will display version details of angular-cli\n`ng version`\n\nWe are done with the installation of Angular\n\n### Installation\n\nClone the NG UI from the repository\n\n`git clone \"https://osm.etsi.org/gerrit/osm/NG-UI\"`\n\nInstall the packages\n\n`cd NG-UI`\n\n`npm install`\n\n### Running the application\n\nThe following instructions is for running NG UI locally for development purpose,\n\nOn the folder project\n\nOpen `proxy.conf.json`\n\nAdd the below code\n```typescript\n{\n \"/osm/*\": {\n \"target\": \"https://OSM-NBI-IP:9999\",\n \"secure\": false,\n \"logLevel\": \"info\"\n }\n}\n```\nTo run the application give the below command\n\n`npm run proxy`\n- To Run the NG-UI page Navigate to \n\n## Check the lint\n\nTo check the typescript lint run the below command\n\n`npm run lint`\n\n## Supported Browsers\n\n- Edge (42.17134.1098.0) and IE 11 (Windows)\n- Firefox (75.0)(Ubunutu)\n- Firefox (75.0)(Windows)\n- Chrome (81.0.4044.92) (Ubunutu)\n- Chrome (81.0.4044.122) (Windows)\n\n## Deployment\n\nTo deploy the NG UI use the [Dockerfile](Dockerfile)\n\n## Built With\n\n* [Angular Frame work](https://angular.io/) - The languages used are Javascript, Typescript, HTML, and SCSS\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.\n\n## Versioning\n\nWe use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://osm.etsi.org/gitweb/?p=osm/NG-UI.git;a=tags).\n\n## License\n\nThis project is licensed under the Apache2 License - see the [LICENSE.md](LICENSE) file for details\n", "readmeFilename": "README.md", "gitHead": "bc7c077fc0fe3521e2b2d63138f8a41884bf90d1", "description": "